UML的基本結(jié)構
通過對UML的學習,整理出了上面這幅UML概要結(jié)構圖,主要是UML事物,UML關系和UML圖,還有很多規(guī)格說明,符號,修飾,擴展機制等等元素沒有體現(xiàn),其實,圖中的三大塊加上那么多邊邊角角的元素,高度濃縮概括起來,可以把UML這門課的主要內(nèi)容描述為:
在軟件生命周期中,準確地把 UML事物和UML關系通過一定規(guī)則組合,利用Rose繪制成UML的9種圖,以幫助我們開發(fā)出高質(zhì)量的軟件。
簡略來說,UML的9種圖在軟件生命周期中各個階段的應用主要體現(xiàn)在:
1、在需求分析階段:主要采用用例圖來描述需求(角色、功能、外部交互等);
2、在分析階段:明確解決問題的細節(jié),主要采用類圖來描述靜態(tài)結(jié)構,采用順序圖,協(xié)作圖,活動圖,狀態(tài)圖來描述系統(tǒng)動態(tài)行為;
3、在設計階段:給出解決方案,主要采用類圖、包,對類的接口進行設計;
4、在實現(xiàn)階段:將類用一種面向?qū)ο笳Z言實現(xiàn);
5、測試階段:單元測試使用類圖和類的規(guī)格說明書。集成測試使用類圖,包,構件圖和協(xié)作圖。系統(tǒng)測試使用用例圖來測試系統(tǒng)的功能;6、集成和交付階段:主要采用構件圖、包、部署圖;
以上只是很簡略地說明了UML的應用,在下面的博客中,我們將介紹充分利用UML,面向?qū)ο蟮能浖_發(fā)過程,即RUP(Rational Unified Process)
補(欠了一點東西,終于補全了):什么是RUP——http://blog.csdn.net/shan9liang/article/details/6723229
UML中幾種類間關系:繼承、實現(xiàn)、依賴、關聯(lián)、聚合、組合的聯(lián)系與區(qū)別
一、表示符號上的區(qū)別
二、具體區(qū)別與聯(lián)系
繼承(泛化)
指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最常見的關系,可分單重繼承,多重繼承(java不支持);在Java中此類關系通過關鍵字extends明確標識。
實現(xiàn)
指的是一個class類實現(xiàn)interface接口(可以是多個)的功能;實現(xiàn)是類與接口之間最常見的關系;在Java中此類關系通過關鍵字implements明確標識
依賴
可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A;比如某個老師要授課,則需要有這么一門課讓他教授,此時老師與課之間的關系就是依賴;表現(xiàn)在代碼層面,為類Course作為參數(shù)被類Professor在Teach方法中使用;
關聯(lián)
它體現(xiàn)的是兩個類、或者類與接口之間語義級別的一種強依賴關系,普通關聯(lián)關系的兩個類處于同一層次上,關聯(lián)可以是單向(只有一個類知道另外一個類的公共屬性和操作)的也可以是雙向(兩個類都知道另一個類的公共屬性和操作)的;大多數(shù)關聯(lián)應該是單向的,單向關系更容易建立和維護,有助于尋找可服用的類。
雙向關聯(lián):
單向關聯(lián):
聚合
聚合是關聯(lián)關系的一種特例,他體現(xiàn)的是整體與部分、擁有的關系,即has-a的關系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享;比如書本與暑假、公司與員工的關系等;具體表現(xiàn)為,如果A由B聚合成,表現(xiàn)為A包含有B的全局對象,但是B對象可以不在A創(chuàng)建的時刻創(chuàng)建。
組合
組合也是關聯(lián)關系的一種特例,他體現(xiàn)的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;他同樣體現(xiàn)整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束,也可以理解為如果A由B組成,表現(xiàn)為A包含有B的全局對象,并且B對象在A創(chuàng)建的時刻創(chuàng)建。比如你和你的大腦或一本書和它的書頁。
綜上所述,對于繼承、實現(xiàn)這兩種關系比較簡單,他們體現(xiàn)的是一種類與類、或者類與接口間的縱向關系;其他的四者關系則體現(xiàn)的是類與類、或者類與接口間的引用、橫向關系,這幾種關系都是語義級別的,所以從代碼層面并不能完全區(qū)分各種關系;從后幾種關系所表現(xiàn)的強弱程度來看,依次為:組合>聚合>關聯(lián)>依賴。在面向?qū)ο蟮脑O計過程中,能采取強度較大的關系,決不能采取強度小的關系。
隨著學習深入,會加上代碼實現(xiàn)!
從上面的用例圖模型,我們可以大致了解用例圖所描述的是什么。下面進行詳細介紹。
用例圖,即用來描述什么角色通過某某系統(tǒng)能做什么事情的圖,用例圖關注的是系統(tǒng)的外在表現(xiàn),系統(tǒng)與人的交互,系統(tǒng)與其它系統(tǒng)的交互。
用例圖有三種構成元素,分別是:角色,用例,關系
1、角色(Actor):即使用本系統(tǒng)的有哪些角色,不同的角色使用的系統(tǒng)功能部分是不同的,在用例圖中用小人表示。
值得注意的是,角色可能是人,也可能不是人,而是另外的一個系統(tǒng),本系統(tǒng)與另外一個系統(tǒng)交互的話,可以將另外一個系統(tǒng)畫成某某角色。
分析得到角色的原則,也可以看做是我們在獲得角色時,需要思考的內(nèi)容:
1)有哪些直接使用系統(tǒng)的人
2)涉及到哪些維護人員
3)使用哪些外設
4)相連的其他系統(tǒng)
5)還有哪些人和事物對這個系統(tǒng)產(chǎn)生的結(jié)果感興趣。
2、用例:即系統(tǒng)具有的功能,在用例圖中用橢圓圈表示,圈里用文字描述該用例,一般為動賓短語。
值得注意的是,某個用例不一定是只屬于一個角色的,有些用例是同時屬于多個角色的,即被多個角色“共享”。
在這里圖書館信息系統(tǒng)說明一下,用例的粒度與范圍
概述級
用戶目標級
子功能級
3、關系:即角色與用例之間的關系,在用例圖中用線條表示,
線條是指角色與用例之間的線條,這些線條是用來聯(lián)系角色(小人)和用例(圈圈)的,表示某某角色能“做”什么用例。
線條有兩種:無箭頭的,有箭頭的。
有箭頭的線條,表示角色與系統(tǒng)交互的過程中,數(shù)據(jù)的流向,如果箭頭指向用例,就說明角色需要往系統(tǒng)輸入數(shù)據(jù),如果箭頭指向角色,說明系統(tǒng)往角色輸出數(shù)據(jù)。沒有箭頭的線條,則沒有明確表示數(shù)據(jù)的流向。
有的時候,用例圖在細化到子功能級別時,還會出現(xiàn)虛線箭頭,如上圖所示。
綜上所述,并結(jié)合繪制用例圖需要注意的一些細節(jié),整理出以下這張圖來更加形象的說明用例圖。
類圖(Class Diagram)是描述類、接口、協(xié)作以及它們之間關系的圖。
類圖是系統(tǒng)中靜態(tài)視圖的一部分,靜態(tài)視圖可以包括許多的類圖。
靜態(tài)視圖用于為軟件系統(tǒng)進行結(jié)構建模,它構造系統(tǒng)的詞匯和關系,而結(jié)構模型的可視化就是通過類圖來實現(xiàn)的。
類圖由以下基本元素構成:類;接口;協(xié)作;關系(依賴、泛化、實現(xiàn)和關聯(lián))。
如果對類圖中的關系模糊,可以看我的另一篇博客:
http://blog.csdn.net/shan9liang/article/details/6705728
下面用一張圖來概括類圖的基本內(nèi)容:
通常以下述3種方法之一使用類圖:
1、對系統(tǒng)的詞匯建模
用UML構建系統(tǒng)通常是從構造系統(tǒng)的基本詞匯開始,用于描述系統(tǒng)的邊界,也就是說用來決定哪些抽象是要建模系統(tǒng)中的一部分,哪些抽象是處于要建模系統(tǒng)之外。這是非常重要的一項工作,因為系統(tǒng)最基本的元素在這里被確定。可以用類圖描述抽象和它們的職責。
2、對簡單協(xié)作建模
現(xiàn)實世界中的事物大多是相互聯(lián)系、相互影響的,將這些事物抽象成類后,情況也是如此。所要構造的軟件系統(tǒng)中的類很少有孤立存在的。它們總是和其他類協(xié)同工作,以實現(xiàn)強于單個類的語義。因此,在抽象了系統(tǒng)詞匯后,系統(tǒng)分析師還必須將這些詞匯中是事物協(xié)同工作的方式可視化和詳述。
3、對邏輯數(shù)據(jù)庫模式建模
在設計一個數(shù)據(jù)庫是,通常使用數(shù)據(jù)庫模式來描述數(shù)據(jù)庫的概念設計。數(shù)據(jù)庫模式建模是對數(shù)據(jù)庫概念設計的藍本,可以使用類圖對這些數(shù)據(jù)庫的模式進行建模。
一、用一張圖來介紹一下對象圖的基本內(nèi)容
二、對象圖與類圖的基本區(qū)別
三、對象圖實例
“活動圖”可通過一系列操作將業(yè)務流程或軟件進程以工作流的形式顯示出來。這些操作可以由人、軟件組件或計算機來執(zhí)行。
使用活動圖可以描述多種類型的流程,如下:
1、用戶和您的系統(tǒng)之間的業(yè)務流程或工作流。
2、某一用例中執(zhí)行的步驟。
3、軟件協(xié)議,即允許在組件間進行的交互序列。
4、軟件算法。
下面用一張圖來介紹活動圖的基本內(nèi)容
下面是用rose 和 onenote結(jié)合畫的一張活動圖的實例,基本囊括了活動圖的重要元素。
狀態(tài)圖用來描述一個特定的對象的所有可能的狀態(tài)以及由于各種事件的發(fā)生而引起的狀態(tài)之間的轉(zhuǎn)移。與活動圖的主要區(qū)別體現(xiàn)在:狀態(tài)圖側(cè)重從行為的結(jié)果來描述,而活動圖側(cè)重從行為的動作來描述?;顒訄D可能涉及多個對象,而狀態(tài)圖只涉及一個特定的對象。
下面,通過一張圖來描述狀態(tài)圖的基本內(nèi)容。
下面是一張狀態(tài)圖的實例圖,描述了一個溫度控制器的狀態(tài)圖。
時序圖(Sequence Diagram)是顯示對象之間交互的圖,這些對象是按時間順序排列的。時序圖中顯示的是參與交互的對象及其對象之間消息交互的順序。
下面這張圖介紹了時序圖的基本內(nèi)容:
下面這張圖是時序圖的實例,創(chuàng)建課程時序圖:
協(xié)作圖(Collaboration Diagram)—UML圖(七)
協(xié)作圖(Collaboration Diagram /Communication Diagram,也叫合作圖)是一種交互圖(interaction diagram),強調(diào)的是發(fā)送和接收消息的對象之間的組織結(jié)構。一個協(xié)作圖顯示了一系列的對象和在這些對象之間的聯(lián)系以及對象間發(fā)送和接收的消息。對象通常是命名或匿名的類的實例,也可以代表其他事物的實例,例如協(xié)作、組件和節(jié)點。使用協(xié)作圖來說明系統(tǒng)的動態(tài)情況。
下面這張圖介紹協(xié)作圖的基本內(nèi)容:
下面一張圖是一個協(xié)作圖的實例,創(chuàng)建課程的協(xié)作圖:
由于協(xié)作圖和時序圖在語意上是相通的,所以可以互相轉(zhuǎn)換,下面是利用ROSE把上面的協(xié)作圖轉(zhuǎn)換成的時序圖的實例:
構件圖(Component Diagram)—UML圖(八)
構件圖是顯示代碼自身結(jié)構的實現(xiàn)級別的圖表。構件圖由諸如源代碼文件、二進制代碼文件、可執(zhí)行文件或動態(tài)鏈接庫 (DLL) 這樣的構件構成,并通過依賴關系相連接
下面這張圖介紹了構件圖的基本內(nèi)容:
下面這張圖是個構件圖的實例:
部署圖(Deployment Diagram)—UML圖(九)
UML部署圖描述了一個運行時的硬件結(jié)點,以及在這些結(jié)點上運行的軟件組件的靜態(tài)視圖。 部署圖顯示了系統(tǒng)的硬件,安裝在硬件上的軟件,以及用于連接異構的機器之間的中間件。
下面這張圖介紹了部署圖的基本內(nèi)容:
下面這張圖是一個部署圖的實例:
補充一點,節(jié)點和構件的聯(lián)系與區(qū)別:
節(jié)點的概念和構件有許多相同之處,例如二者有多名稱,都可以參與依賴、泛化和關聯(lián)關系,都可以被嵌套,都可以有實例,都可以參與交互。
但它們之間也存在明顯的區(qū)別:構件是參與系統(tǒng)執(zhí)行的事物,而節(jié)點是執(zhí)行構件的事物;構件表示邏輯元素的物理打包,而節(jié)點表示構件的物理部署