學(xué)習(xí)筆記 基于UML面向?qū)ο蟮脑O(shè)計(jì)
本節(jié)向大家介紹一下有關(guān)基于UML面向?qū)ο蟮脑O(shè)計(jì),主要包括面向?qū)ο蟾攀觯琔ML概述和基于UML面向?qū)ο笤O(shè)計(jì)等內(nèi)容, 相信通過本節(jié)的學(xué)習(xí)大家對(duì)UML面向?qū)ο笏枷胗幸欢ǖ恼J(rèn)識(shí)。
基于UML面向?qū)ο蟮脑O(shè)計(jì)
近年來,面向?qū)ο蠹夹g(shù)是軟件設(shè)計(jì)的主流設(shè)計(jì)思想。UML作為一種面向?qū)ο蟮慕7椒ǎ环矫婵煞奖愕赝蠖鄶?shù)面向?qū)ο蟮脑O(shè)計(jì)語言鏈接;另一方面可運(yùn)用到除軟件設(shè)計(jì)以外的其他方面,如商業(yè)、信息系統(tǒng)、甚至是面向?qū)ο笤O(shè)計(jì)語言的開發(fā)等。
1面向?qū)ο蟾攀?/strong>
1.1面向?qū)ο笏枷?/p>
面向?qū)ο笏枷肫鹪从?0世紀(jì)70年代,在80年代得到了鞏固與發(fā)展。90年代,面向?qū)ο蠹夹g(shù)已經(jīng)成熟,并進(jìn)入深入發(fā)展階段。面向?qū)ο蟪绦蛟O(shè)計(jì)與傳統(tǒng)的過程式程序設(shè)計(jì)有著顯著的區(qū)別。過程式程序設(shè)計(jì)是面向功能的,通常使用函數(shù)或過程來實(shí)現(xiàn)所需要的功能,數(shù)據(jù)通常作為參數(shù)傳遞給函數(shù)或過程,這種方式不利于大中型軟件的開發(fā)與維護(hù),小部分?jǐn)?shù)據(jù)或功能的變動(dòng)會(huì)波及到很多的相關(guān)程序。隨著計(jì)算機(jī)應(yīng)用需求的不斷擴(kuò)大,計(jì)算機(jī)軟件越來越復(fù)雜,這種復(fù)雜性不僅體現(xiàn)在規(guī)模的擴(kuò)大,而且模塊之間的交互越來越復(fù)雜。為此,人們提出了面向?qū)ο蟪绦蛟O(shè)計(jì)的思想,他是一種以對(duì)象為中心的程序設(shè)計(jì)方法。
面向?qū)ο蟪绦蛟O(shè)計(jì)提出了一種新的系統(tǒng)設(shè)計(jì)模型,他將系統(tǒng)看成通過交互作用來完成任務(wù)的對(duì)象的集合,每個(gè)對(duì)象用自己的方法管理數(shù)據(jù)。他允許抽象化、模塊化的分層結(jié)構(gòu),具有多態(tài)性、繼承性和封裝性。面向?qū)ο蟮某绦蛟O(shè)計(jì)考慮如何通過創(chuàng)建對(duì)象來簡化程序設(shè)計(jì),提高代碼的可重用性。
1.2面向?qū)ο蟮膸追N設(shè)計(jì)方法
隨著面向?qū)ο蠹夹g(shù)成為研究的熱點(diǎn),相繼出現(xiàn)了幾十種支持軟件開發(fā)的面向?qū)ο蠓椒?。其中Booch,Coad/Yourdon,OMT和Jacobson的方法在面向?qū)ο筌浖_發(fā)界得到了廣泛的認(rèn)可。
Booch方法的優(yōu)點(diǎn)在于其豐富的符號(hào)體系;Rumbaugh的OMT方法從3個(gè)視角描述系統(tǒng),相應(yīng)地提供了3種模型對(duì)象模型、動(dòng)態(tài)模型和功能模型;Coad/Yourdon方法嚴(yán)格區(qū)分了面向?qū)ο蠓治觯∣OA)和面向?qū)ο笤O(shè)計(jì)(OOD)。
該方法利用5個(gè)層次的活動(dòng)來定義和記錄系統(tǒng)行為、輸入和輸出;Jacobson方法與上述3種方法有所不同,他涉及到整個(gè)軟件生命周期,包括需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測試等4個(gè)階段;而統(tǒng)一建模語言UML(UnifiedModelingLanguage),結(jié)合了Booch,OMT和Jacobson方法的優(yōu)點(diǎn),統(tǒng)一了符號(hào)體系,并從其他的方法和工程實(shí)踐中吸收了許多經(jīng)過實(shí)際檢驗(yàn)的概念和技術(shù),UML作為一種標(biāo)準(zhǔn)的建模工具已經(jīng)得到世界的認(rèn)可,成為國際標(biāo)準(zhǔn)。UML面向?qū)ο笤O(shè)計(jì)介紹了面向?qū)ο蟮乃枷?,下面讓我們來看下一UML概述。
2UML概述
2.1UML的出現(xiàn)與發(fā)展
面向?qū)ο蠹夹g(shù)作為一種軟件技術(shù)有著其優(yōu)越性,但是由于目前的大多數(shù)面向?qū)ο蠓治雠c設(shè)計(jì)方法都沒有提供一個(gè)定義對(duì)象的有力手段,往往是在工作一開始就陷入了一個(gè)十分復(fù)雜的境地。由于事先定義了過多的對(duì)象,使得在進(jìn)一步確定對(duì)象時(shí)仍具有很大的隨機(jī)性和盲目性。所以,隨著OOP(面向?qū)ο缶幊蹋┫騉OD(面向?qū)ο笤O(shè)計(jì))和OOA(面向?qū)ο蠓治觯┑陌l(fā)展,最終形成面向?qū)ο蟮能浖_發(fā)方法OMT(反對(duì)Modelling技術(shù))。這是一種自底向上和自頂向下相結(jié)合的方法,而且他以對(duì)象建模為基礎(chǔ),從而不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實(shí)際上也包含了所有對(duì)象的數(shù)據(jù)結(jié)構(gòu)。所以O(shè)MT徹底實(shí)現(xiàn)了PAM沒有實(shí)現(xiàn)的目標(biāo)。不僅如此,OOD技術(shù)在需求分析、可維護(hù)性和可靠性這3個(gè)軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標(biāo)上有了實(shí)質(zhì)性的突破,徹底地解決了在這些方面存在的嚴(yán)重問題。
UML是Booch,Objectory和OMT方法的結(jié)合,并且是這三者直接的向上兼容的后繼。同時(shí)他還吸收了大量方法學(xué)家的思想,包括WirfsBrock,Ward,Cunningham,Rubin等等。這些先進(jìn)的面向?qū)ο蟮乃枷虢y(tǒng)一為公共的、穩(wěn)定的、表達(dá)能力強(qiáng)的面向?qū)ο蠓椒ㄌ峁┝嘶A(chǔ)。
2.2UML的特點(diǎn)
作為一種標(biāo)準(zhǔn)的圖形化建模語言,UML面向?qū)ο笤O(shè)計(jì)有如下幾個(gè)方面的特點(diǎn):
(1)UML結(jié)合了Booch方法、OMT方法和OOSE方法的概念,統(tǒng)一了面向?qū)ο蠓椒ǖ幕靖拍?,是一個(gè)單一的通用建模語言;
(2)UML的建模能力比其他面向?qū)ο蠓椒ǜ鼜?qiáng),不僅適合于一般系統(tǒng)的開發(fā),更擅長于并行、分布式系統(tǒng)的建模;
(3)UML是一種標(biāo)準(zhǔn)的建模語言,而不是一個(gè)標(biāo)準(zhǔn)的開發(fā)過程,他完全獨(dú)立于開發(fā)過程;
(4)UML提出了許多新的概念,如構(gòu)造型、職責(zé)、擴(kuò)展機(jī)制、模式等等。
所以,UML的出現(xiàn)意味著開發(fā)方法統(tǒng)一化、標(biāo)準(zhǔn)化的新發(fā)展,標(biāo)志著軟件自動(dòng)化進(jìn)程又邁進(jìn)了一步。
2.3UML的基本內(nèi)容
UML語言使用若干個(gè)視圖(view)構(gòu)造模型。每個(gè)視圖代表系統(tǒng)的一個(gè)方面。UML共包括5類視圖:
用例視圖(Usecaseview)用于描述系統(tǒng)應(yīng)該具有的功能集,并指出各功能的操作者,主要為用戶、設(shè)計(jì)人員、開發(fā)人員和測試人員而設(shè)置。
邏輯視圖用來顯示系統(tǒng)內(nèi)部的功能是如何設(shè)計(jì)的。
組件視圖(Componentview)用來顯示代碼組件的組織方式。他描述了實(shí)現(xiàn)模型(implementationmodule)和他們之間的依賴關(guān)系,主要供開發(fā)者使用。
并發(fā)視圖(Concurrencyview)用來顯示系統(tǒng)的開發(fā)工作狀況。供系統(tǒng)開發(fā)者和集成者使用。
展開視圖(Deploymentview)用來顯示系統(tǒng)的物理架構(gòu),即系統(tǒng)的物理展開。供開發(fā)者、集成者和測試者使用。
視圖用圖描述,而圖用模型元素的符號(hào)表示。圖中包含的元素可以有類、對(duì)象、組件、關(guān)系等,這些模型具有具體的含義并且用圖形符號(hào)表示。UML圖包括:類圖、對(duì)象圖、用例圖、狀態(tài)圖、序列圖、協(xié)作圖、活動(dòng)圖、組件圖和展開圖。#p#
3基于UML面向?qū)ο笤O(shè)計(jì)
3.1UML的應(yīng)用
標(biāo)準(zhǔn)建模語言UML適用于以面向?qū)ο蠹夹g(shù)來描述任何類型的系統(tǒng),而且適用于系統(tǒng)開發(fā)的不同階段,從需求規(guī)格描述直至系統(tǒng)完成后的測試和維護(hù)。但需要注意的是,UML是一種建模語言而不是方法,這是因?yàn)閁ML中沒有過程的概念,而過程正是方法的一個(gè)重要組成部分。UML面向?qū)ο蟾拍畋旧愍?dú)立于過程,這意味著用戶在使用UML進(jìn)行建模時(shí),可以選用任何適合的過程。然而,使用UML建模仍然有著大致統(tǒng)一的過程框架,該框架包含了UML建模過程中的共同要素,同時(shí)又為用戶選用與其所開發(fā)的工程相適合的建模技術(shù)提供了很大的自由度。
同時(shí),UML建模過程是一個(gè)迭代遞增的開發(fā)過程。使用此方法,不是在項(xiàng)目結(jié)束時(shí)一次性提交軟件,而是分塊逐次開發(fā)和提交。構(gòu)造階段由多次迭代組成,每一次迭代都包含編碼、測試和集成,所得產(chǎn)品應(yīng)滿足項(xiàng)目需求的某一子集,或提交給用戶,或純粹是內(nèi)部提交。每次迭代都包含了軟件生命周期的所有階段。同時(shí),每次迭代都要增加一些新的功能,解決一些新的問題。以類圖為例,在需求分析階段,類圖是研究領(lǐng)域的概念,是概念層描述;在設(shè)計(jì)階段,類圖描述類與類之間的接口,是說明層描述;而在實(shí)現(xiàn)階段,類圖描述軟件系統(tǒng)中類的實(shí)現(xiàn),是實(shí)現(xiàn)層描述。實(shí)現(xiàn)層描述更接近于軟件實(shí)現(xiàn)中具體的描述,但概念層和說明層描述更易于不同領(lǐng)域?qū)<抑g的理解和交流。
3.2基于UML的RationalROSE面向?qū)ο笤O(shè)計(jì)過程
現(xiàn)以某金融貿(mào)易系統(tǒng)為例說明UML建模的具體過程。該過程主要包括:理解需求、分析、設(shè)計(jì)、實(shí)現(xiàn)、測試和配置。
首先進(jìn)行需求分析,這是一個(gè)決定系統(tǒng)能否符合用戶需求的關(guān)鍵步驟,該階段的好壞直接影響到設(shè)計(jì)的進(jìn)度以及質(zhì)量。需求分析主要是定義用例,對(duì)該系統(tǒng)的主要功能進(jìn)行描述,從而確定系統(tǒng)的功能需求,在這部分主要應(yīng)用的是用例圖,用例圖要詳盡地表示系統(tǒng)的各種關(guān)系。在該系統(tǒng)中各角色的關(guān)系如圖1所示。
從中我們可以清楚地看出各個(gè)角色之間的關(guān)系,所以在進(jìn)行系統(tǒng)的設(shè)計(jì)、實(shí)現(xiàn)時(shí)可以減少盲目性。在需求分析時(shí),要注意領(lǐng)域分析以及類與對(duì)象的定義。
其次進(jìn)行的是設(shè)計(jì),設(shè)計(jì)一般分為架構(gòu)設(shè)計(jì)和詳細(xì)設(shè)計(jì)。這部分主要包括定義包、描述包間的相關(guān)性和基本的通信機(jī)制。注意要減少相關(guān)的二義性以及與用戶的接口設(shè)計(jì)。
再進(jìn)行的是實(shí)現(xiàn),在這個(gè)過程中UML的優(yōu)點(diǎn)可以得到長足的體現(xiàn):運(yùn)用RationalROSE提供的環(huán)境將前幾步設(shè)計(jì)的圖進(jìn)行分析,然后可以轉(zhuǎn)換成自己所熟悉的高級(jí)語言,并在高級(jí)語言中進(jìn)行編輯,在高級(jí)語言的環(huán)境中我們可以看到UML面向?qū)ο蟀褕D轉(zhuǎn)換成系統(tǒng)的程序設(shè)計(jì)的結(jié)構(gòu)框架。并且,在進(jìn)行該系統(tǒng)擴(kuò)展時(shí)只需要在前兩步設(shè)計(jì)的圖中進(jìn)行更改,從而改變程序框架,徹底改變了傳統(tǒng)設(shè)計(jì)中更改所帶來的復(fù)雜性與潛在的危險(xiǎn)性。
在進(jìn)行測試的時(shí)候同樣可以運(yùn)用UML,將整個(gè)系統(tǒng)分為不同的單元,然后將各個(gè)單元作為一個(gè)“黑盒”,運(yùn)用不同的圖進(jìn)行“黑盒”測試。將測試后的結(jié)果再返回到設(shè)計(jì)實(shí)現(xiàn)中進(jìn)行分析。將完整無誤的軟件與需求說明結(jié)合,從而可以順利地進(jìn)行配置。
可以看出:UML的圖運(yùn)用于整個(gè)系統(tǒng)設(shè)計(jì)的全過程,減少了設(shè)計(jì)盲目性,提高了設(shè)計(jì)效率。
4結(jié)語
要想實(shí)現(xiàn)軟件生產(chǎn)自動(dòng)化,基本的一條是實(shí)現(xiàn)開發(fā)方法的統(tǒng)一化、標(biāo)準(zhǔn)化。實(shí)現(xiàn)面向?qū)ο箝_發(fā)方法的標(biāo)準(zhǔn)化以后,就可以避免不同方法的差異,提高軟件重用效率。另外,統(tǒng)一面向?qū)ο箝_發(fā)方法也就是綜合每個(gè)面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn),最大限度地發(fā)揮各種方法的長處。UML作為一種建模語言,應(yīng)用于各種系統(tǒng)的設(shè)計(jì)與分析,改變了傳統(tǒng)的軟件設(shè)計(jì)思想,降低了系統(tǒng)設(shè)計(jì)的盲目性,也更有利于系統(tǒng)的擴(kuò)展與測試。但是由于他自身發(fā)展的程度決定了目前他還不能取代現(xiàn)有的各種面向?qū)ο蟮姆治雠c設(shè)計(jì)方法。但是,隨著UML面向?qū)ο筮M(jìn)一步發(fā)展,必將有助于實(shí)現(xiàn)軟件自動(dòng)化。
【編輯推薦】