- UML2面向?qū)ο蠓治雠c設(shè)計(jì)(第2版)
- 譚火彬編著
- 2406字
- 2019-07-01 10:17:35
2.2 統(tǒng)一建模語(yǔ)言
可視化建模技術(shù)在軟件開(kāi)發(fā)中正日益扮演著越來(lái)越重要的角色。為了便于交流,選擇一種合適的建模語(yǔ)言就顯得至關(guān)重要。統(tǒng)一建模語(yǔ)言就是一種最佳的選擇。
統(tǒng)一建模語(yǔ)言是由對(duì)象管理組織(Object Management Group, OMG)制定的一個(gè)通用的、可視化的建模語(yǔ)言標(biāo)準(zhǔn),可以用來(lái)可視化、描述、構(gòu)造和文檔化軟件密集型系統(tǒng)的各種工件。它是由信息系統(tǒng)和面向?qū)ο箢I(lǐng)域的3位著名的方法學(xué)家Grady Booch、James Rumbaugh和Ivar Jacobson(three Amigos,三友)提出的。這種建模語(yǔ)言已經(jīng)得到了工業(yè)界的廣泛支持和應(yīng)用,并已被ISO確立為國(guó)際標(biāo)準(zhǔn)。在選擇UML建模時(shí),需要注意以下幾個(gè)方面的問(wèn)題。
(1)UML不是一種程序設(shè)計(jì)語(yǔ)言,而是一種可視化的建模語(yǔ)言。它比C++、Java這樣的程序設(shè)計(jì)語(yǔ)言抽象層次更高,可以適用于任何面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。
(2)UML不是工具或知識(shí)庫(kù)的規(guī)格說(shuō)明,而是一種建模語(yǔ)言規(guī)格說(shuō)明,是一種模型表示的標(biāo)準(zhǔn)。
(3)UML不是過(guò)程,也不是方法,但允許任何一種過(guò)程和方法使用它。
2.2.1 選擇UML
在面向?qū)ο蟮能浖_(kāi)發(fā)中,選擇UML已經(jīng)成了必然的趨勢(shì)。面向?qū)ο髮?zhuān)家Martin Flower曾經(jīng)這樣說(shuō)過(guò):“如果正在使用其他的舊技術(shù),我強(qiáng)烈建議您馬上轉(zhuǎn)用UML,因?yàn)樗黠@地將成為符號(hào)系統(tǒng)的統(tǒng)一標(biāo)準(zhǔn)。如果正在考慮開(kāi)始使用設(shè)計(jì)符號(hào)來(lái)工作,UML是一個(gè)好的選擇,因?yàn)樗呀?jīng)統(tǒng)治業(yè)界了。”在很多情況下,開(kāi)發(fā)人員都應(yīng)該選擇UML作為建模語(yǔ)言。
(1)OO方法是項(xiàng)目決定采用的方法論,是整個(gè)項(xiàng)目或產(chǎn)品成功的關(guān)鍵。
(2)開(kāi)發(fā)人員感覺(jué)用源碼說(shuō)明不了真正的問(wèn)題,希望利用可視化建模語(yǔ)言簡(jiǎn)化文檔,提高交流效率,準(zhǔn)確抓住問(wèn)題本質(zhì)。
(3)系統(tǒng)的規(guī)模和設(shè)計(jì)都比較復(fù)雜,需要用圖形抽象地表達(dá)復(fù)雜的概念,增強(qiáng)設(shè)計(jì)的靈活性、可讀性和可理解性,以便暴露深層次的設(shè)計(jì)問(wèn)題、降低開(kāi)發(fā)風(fēng)險(xiǎn)。
(4)組織希望記錄已成功項(xiàng)目、產(chǎn)品的公共設(shè)計(jì)方案,在開(kāi)發(fā)新項(xiàng)目時(shí)可以參考、復(fù)用過(guò)去的設(shè)計(jì),以節(jié)省投入,提高開(kāi)發(fā)效率和整體成功率。
(5)有必要采用一套通用的圖形語(yǔ)言和符號(hào)體系描述組織的業(yè)務(wù)流程和軟件需求,促進(jìn)業(yè)務(wù)人員與軟件開(kāi)發(fā)人員之間一致且高效的交流。
當(dāng)然,UML并不是萬(wàn)能的。在以下情況下,選擇UML并不適合。
(1)傳統(tǒng)的做法已完全適用,對(duì)面向?qū)ο蠹夹g(shù)的要求也不高,項(xiàng)目非常成功,無(wú)任何改進(jìn)的必要。
(2)開(kāi)發(fā)的系統(tǒng)比較簡(jiǎn)單,直接用源碼配上少量的文字就能解決問(wèn)題,軟件開(kāi)發(fā)文檔也無(wú)須添加圖形進(jìn)行輔助說(shuō)明。
(3)開(kāi)發(fā)的系統(tǒng)本身不屬于OO方法、UML適用的范圍。
2.2.2 UML統(tǒng)一歷程
UML的誕生經(jīng)歷了一個(gè)漫長(zhǎng)的歷程。從20世紀(jì)80年代初期開(kāi)始,眾多的方法學(xué)家都在嘗試用不同的方法進(jìn)行面向?qū)ο蟮姆治雠c設(shè)計(jì)。當(dāng)時(shí),許多方法開(kāi)始在一些項(xiàng)目中發(fā)揮作用,如Booch、OMT、Shlaer/Mellor、Odell/Martin、RDD、Objectory等方法。到了20世紀(jì)90年代中期出現(xiàn)了比較完善的面向?qū)ο蠓椒ǎ挠蠦ooch 94、OMT 2、OOSE、Fusion等方法,那時(shí)面向?qū)ο蠓椒ㄒ呀?jīng)成為軟件分析和設(shè)計(jì)方法的主流。
當(dāng)時(shí)Booch方法和OMT方法都已經(jīng)獨(dú)自、成功地發(fā)展成為主要的面向?qū)ο蠓椒ǎS著OMT方法的創(chuàng)始人Jim Rumbaugh加入Grady Booch所在的Rational公司,他們?cè)?994年10月共同合作,將這兩種方法統(tǒng)一起來(lái),到1995年形成“統(tǒng)一方法”(Unified Method, UM)版本0.8。隨后,OOSE方法的創(chuàng)始人Ivar Jacobson也加入Rational公司,并引入他的用例思想,于是該公司于1996年發(fā)布了UML 0.9版本。1997年1月,UML 1.0版本被提交給OMG作為軟件建模語(yǔ)言標(biāo)準(zhǔn)化的候選標(biāo)準(zhǔn)。在之后的半年多時(shí)間里,一些重要的軟件開(kāi)發(fā)商和系統(tǒng)集成商相繼成為“UML聯(lián)盟”成員,如Microsoft、IBM、HP等公司積極地使用UML并提出反饋意見(jiàn)。1997年9月,UML 1.1被提交給OMG,并于1997年11月正式被OMG采納作為業(yè)界標(biāo)準(zhǔn)。之后,UML在OMG的管理下不斷發(fā)展,相繼推出了1.2、1.3、1.4、1.5、2.0、2.1.1、2.1.2、2.2、2.3、2.4、2.4.1、2.5等多個(gè)版本,并最終成為經(jīng)ISO認(rèn)證的國(guó)際標(biāo)準(zhǔn),其中UML 1.4.2對(duì)應(yīng)于ISO/IEC 19501—2005國(guó)際標(biāo)準(zhǔn),而UML 2.4.1及后續(xù)版本對(duì)應(yīng)于ISO/IEC 19505-1—2012(基礎(chǔ)結(jié)構(gòu))和ISO/IEC 19505-2—2012(上層結(jié)構(gòu))。圖2-1展示了UML的產(chǎn)生和發(fā)展歷程。

圖2-1 UML的產(chǎn)生和發(fā)展歷程
目前,UML主要存在UML 1.x和UML 2兩個(gè)大的版本系列。UML 1.x主要是指UML 1.0~UML 1.5的這幾個(gè)版本,版本之間有一些差別,但總體差別不大。而UML 2則是指從2005年正式發(fā)布的UML 2之后的各個(gè)版本。相比UML 1.x, UML 2的變化很大,首先是結(jié)構(gòu)的調(diào)整,從UML 2開(kāi)始,UML標(biāo)準(zhǔn)被劃分為兩個(gè)相對(duì)獨(dú)立的部分:基礎(chǔ)結(jié)構(gòu)和上層結(jié)構(gòu);其次內(nèi)容上也有很大的變化,包括底層概念的統(tǒng)一、各種圖形的改進(jìn)和增加等。目前,UML 2已經(jīng)成為發(fā)展趨勢(shì),本書(shū)采用最新的UML 2.5作為建模語(yǔ)言。
作為一種統(tǒng)一建模語(yǔ)言,UML的統(tǒng)一并不僅僅是三大面向?qū)ο蠓椒ǖ慕y(tǒng)一,還合并了許多面向?qū)ο蠓椒ㄖ斜黄毡榻邮艿母拍睿瑢?duì)每一種概念,UML都給出了清晰的定義、表示法和有關(guān)術(shù)語(yǔ)。此外,UML還嘗試統(tǒng)一幾種不同領(lǐng)域等,具體包括以下內(nèi)容。
(1)開(kāi)發(fā)生命周期:UML對(duì)于開(kāi)發(fā)的要求具有無(wú)縫性,即在軟件開(kāi)發(fā)生命周期的各個(gè)階段都可以采用UML。開(kāi)發(fā)過(guò)程的不同階段可以采用相同的一套概念和表示法,在同一個(gè)模型中它們可以混合使用。在開(kāi)發(fā)的不同階段,不必轉(zhuǎn)換概念和表示法。這種無(wú)縫性對(duì)迭代的增量式軟件開(kāi)發(fā)至關(guān)重要。
(2)應(yīng)用領(lǐng)域:UML適用于各種應(yīng)用領(lǐng)域的建模,包括大型復(fù)雜分布式系統(tǒng)、實(shí)時(shí)嵌入式系統(tǒng)、集中式數(shù)據(jù)或計(jì)算系統(tǒng)等。當(dāng)然,也許用某種專(zhuān)用語(yǔ)言來(lái)描述一些專(zhuān)門(mén)領(lǐng)域更有用,但在大部分應(yīng)用領(lǐng)域中,UML不比其他的專(zhuān)用語(yǔ)言遜色,甚至更好。
(3)實(shí)現(xiàn)語(yǔ)言和平臺(tái):UML可應(yīng)用于各種不同的編程實(shí)現(xiàn)語(yǔ)言和開(kāi)發(fā)平臺(tái)系統(tǒng)。無(wú)論是采用Java、C++、C#等程序設(shè)計(jì)語(yǔ)言和開(kāi)發(fā)工具,還是使用Windows、Linux等不同的操作系統(tǒng),均可以采用UML進(jìn)行建模。
(4)開(kāi)發(fā)過(guò)程:UML是一種建模型語(yǔ)言,不是對(duì)開(kāi)發(fā)過(guò)程的細(xì)節(jié)進(jìn)行描述的工具。就像通用程序設(shè)計(jì)語(yǔ)言可以用于許多風(fēng)格的程序設(shè)計(jì)一樣,UML適用于大部分現(xiàn)有的或新出現(xiàn)的開(kāi)發(fā)過(guò)程,尤其適用于類(lèi)似敏捷過(guò)程、統(tǒng)一過(guò)程等迭代增量式開(kāi)發(fā)過(guò)程。
(5)自身的內(nèi)部概念:在構(gòu)建UML元模型的過(guò)程中,特別注意揭示和表達(dá)各種概念之間的內(nèi)在聯(lián)系,并試圖用多種適用于已知和未知情況的辦法去把握建模中的概念。這個(gè)過(guò)程會(huì)增強(qiáng)用戶(hù)對(duì)概念及其適用性的理解。這不是統(tǒng)一各種標(biāo)準(zhǔn)的初衷,卻是統(tǒng)一各種標(biāo)準(zhǔn)所得到的最重要的結(jié)果之一。
- 數(shù)據(jù)庫(kù)系統(tǒng)原理及MySQL應(yīng)用教程(第2版)
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- 羅克韋爾ControlLogix系統(tǒng)應(yīng)用技術(shù)
- 基于差分進(jìn)化的優(yōu)化方法及應(yīng)用
- PhoneGap Mobile Application Development Cookbook
- Python忍者秘籍
- SQL Server數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)兵書(shū)
- UNIX Linux程序設(shè)計(jì)教程
- Kotlin極簡(jiǎn)教程
- Advanced Python Programming
- TypeScript圖形渲染實(shí)戰(zhàn):2D架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)
- AutoCAD基礎(chǔ)教程
- C/C++語(yǔ)言程序開(kāi)發(fā)參考手冊(cè)
- 利用Python駕馭Stable Diffusion:原理解析、擴(kuò)展開(kāi)發(fā)與高級(jí)應(yīng)用(智能系統(tǒng)與技術(shù)叢書(shū))
- Mastering Swift 4(Fourth Edition)