一、UML語言概述
1997年,OMG組織(Object Management Group,對象管理組織)發(fā)布了統(tǒng)一建模語言(Unified Modeling Language,UML)。
UML的目標(biāo)之一就是為開發(fā)團(tuán)隊(duì)提供標(biāo)準(zhǔn)的通用的面向?qū)ο笤O(shè)計(jì)語言。
UML提供了一套IT專業(yè)人員期待多年的統(tǒng)一的標(biāo)準(zhǔn)建模符號。通過使用UML,這些人員能夠閱讀和交流系統(tǒng)架構(gòu)圖和設(shè)計(jì)規(guī)劃圖,就像建筑工人多年來使用建筑設(shè)計(jì)圖一樣。
二、UML中的各種圖例
2.1 用例圖(Use Case Diagram)
從用戶角度描述系統(tǒng)功能。用例圖的主要目的是幫助開發(fā)團(tuán)隊(duì)以一種可視化的方式來理解系統(tǒng)的功能需求。
用例圖中包含以下內(nèi)容:
- 角色:角色是系統(tǒng)的邊界,即使用系統(tǒng)特定功能的用戶,用人形符號表示。
- 用例:表示系統(tǒng)的某個功能,用橢圓符號表示。
- 角色和用例的關(guān)系:角色和用例之間是使用關(guān)系,用帶實(shí)線的箭頭符號來表示。
- 用例之間的關(guān)系:用例之間可存在包含關(guān)系和擴(kuò)展關(guān)系。包含關(guān)系是指一個用例包含另一個用例的功能,擴(kuò)展關(guān)系是指一個用例繼承了另一個用例的功能。

2.2 類圖(Class Diagram)
描述對象模型中類以及類之間的關(guān)系。類圖顯示了系統(tǒng)的靜態(tài)結(jié)構(gòu),它包括以下內(nèi)容:
類:類是類圖中的主要元素,用矩形表示,矩形的上層表示類名,中層表示屬性,下層表示行為(方法)。抽象類的類名用斜體字表示,抽象方法也用斜體字表示。
類之間的關(guān)系:包括關(guān)聯(lián)、依賴、聚集、組合、泛化、實(shí)現(xiàn)這六種關(guān)系。

2.2.1 類之間的關(guān)系
1、關(guān)聯(lián):類A與類B的實(shí)例之間存在特定的對應(yīng)關(guān)系。belong a
2、依賴:類A訪問類B提供的服務(wù)。use a
3、聚集:類A為整體類,類B為局部類,類A的對象由類B的對象組合而成。has a
4、組合:整體與部分的關(guān)系。 Contain a
5、泛化:類A繼承類B。is kind of a
6、實(shí)現(xiàn):類A實(shí)現(xiàn)了B接口。do a
2.2.2 關(guān)聯(lián)關(guān)系(Association)
關(guān)聯(lián)指的是類之間的特定對應(yīng)關(guān)系,在UML中用帶實(shí)線的箭頭表示。按照類之間的數(shù)量對比,關(guān)聯(lián)可分為以下三種:一對一關(guān)聯(lián)、一對多關(guān)聯(lián)、多對多關(guān)聯(lián)。
舉例:公司和員工;銀行和客戶。
2.2.3 依賴關(guān)系(Dependency)
依賴指的是類之間的調(diào)用關(guān)系,在UML中用帶虛線的箭頭表示。如果類A訪問類B的屬性或方法,或者類A負(fù)責(zé)實(shí)例化類B,那么可以說類A依賴類B。
舉例:人依賴食物;電視機(jī)依賴電;理發(fā)師依賴剪刀和吹風(fēng)機(jī);魚依賴水。
2.2.4 聚集關(guān)系(Aggregation)
聚集指的是整體與部分之間的關(guān)系,在UML中用帶實(shí)線的菱形箭頭表示。例如臺燈和燈泡之間就是聚集關(guān)系。
舉例:汽車的輪胎系統(tǒng)由四個輪胎聚合而成。
2.2.5 組合關(guān)系
整體與部分的關(guān)系,Contain a
舉例:汽車是由發(fā)動機(jī)、離合器、車身、輪胎等組合而成。
2.2.6 泛化關(guān)系(Generalization)
泛化指的是類之間的繼承關(guān)系。
2.2.7 實(shí)現(xiàn)關(guān)系(Realization)
實(shí)現(xiàn)指的是類與接口之間的關(guān)系。
在UML中用帶虛線的三角形箭頭表示,這里的接口指的是接口類型,接口名字用斜體字表示,接口中的方法都是抽象方法,也采用斜體字表示。
2.2.8 類圖示例

關(guān)系強(qiáng)弱順序:實(shí)現(xiàn)≈泛化>組合>聚合>關(guān)聯(lián)>依賴
2.3 狀態(tài)轉(zhuǎn)換圖(State Transition Diagram)
描述對象所有可能的狀態(tài)以及導(dǎo)致狀態(tài)轉(zhuǎn)換的轉(zhuǎn)移條件。只需要為個別具有復(fù)雜的狀態(tài)轉(zhuǎn)換過程的類提供狀態(tài)轉(zhuǎn)換圖。
狀態(tài)圖表示對象在它的生命周期中所處的不同狀態(tài),以及狀態(tài)之間的轉(zhuǎn)換過程。狀態(tài)圖包括以下基本元素:
- 初始點(diǎn):用實(shí)心圓來表示。
- 狀態(tài)之間的轉(zhuǎn)換:用箭頭來表示。
- 狀態(tài):用圓角矩形來表示。
- 終止點(diǎn):用內(nèi)部包含實(shí)心圓的圓來表示。

2.4 時序圖(Sequence Diagram)
描述對象間的動態(tài)協(xié)作關(guān)系,強(qiáng)調(diào)對象之間消息發(fā)送的時間順序,同時顯示對象之間的交互。
時序圖顯示用例(或者是用例的一部分)的詳細(xì)流程。時序圖有兩個維度:
- 水平維度:顯示對象之間發(fā)送消息的過程。
- 垂直維度:顯示發(fā)送消息的時間順序。


2.5 協(xié)作圖(Cooperation Diagram)
協(xié)作圖能直觀地顯示對象間的協(xié)作關(guān)系。時序圖和協(xié)作圖合稱為交互圖。協(xié)作圖與時序圖包含的信息相同,UML工具(如Rational Rose)能夠根據(jù)時序圖自動生成協(xié)作圖,反之亦然。
協(xié)作圖與時序圖的區(qū)別:
時序圖演示的是對象與角色隨著時間的變化進(jìn)行的交互,而協(xié)作圖則不參照時間,直接顯示對象與角色之間的交互過程。
協(xié)作圖能更加直觀地顯示對象之間的協(xié)作過程,設(shè)計(jì)師可以根據(jù)協(xié)作圖來分析和調(diào)節(jié)對象之間的功能分布。

時序圖按照時間順序布圖,而寫作圖按照空間結(jié)構(gòu)布圖。
2.6 組件圖(Component Diagram)
描述系統(tǒng)中各個軟件組件之間的依賴關(guān)系,還可以描述軟件組件的源代碼的組織結(jié)構(gòu)。
組件圖的主要用途是顯示軟件系統(tǒng)中組件之間的依賴關(guān)系,以及和其他第三方組件(例如類庫)的依賴關(guān)系,此外,它還能顯示包含軟件的源程序代碼的文件的物理組織結(jié)構(gòu)。組件圖既可以在一個非常高的層次上僅顯示粗粒度的組件,也可以在較低的層次上展示某個組件的組成結(jié)構(gòu)。

2.7 部署圖(Deployment Diagram)
定義系統(tǒng)中軟硬件的物理體系結(jié)構(gòu)。它可以顯示實(shí)際的計(jì)算機(jī)和設(shè)備(用節(jié)點(diǎn)表示)以及他們之間的連接關(guān)系,在節(jié)點(diǎn)中,還可以顯示軟件組件在硬件環(huán)境中的布局。
部署圖中最主要的元素是節(jié)點(diǎn),一個節(jié)點(diǎn)可以代表一臺物理機(jī)器,或代表一個虛擬機(jī)器節(jié)點(diǎn),節(jié)點(diǎn)用三維立方體表示,在每個節(jié)點(diǎn)下方可以表明在此節(jié)點(diǎn)上運(yùn)行的可執(zhí)行程序。

2.8 對象圖(Object Diagram)
對象圖顯示某時刻對象和對象之間的關(guān)系。一個UML對象圖可看成一個類圖的特殊用例,實(shí)例和類可在其中顯示。
對象圖的目的與類圖類似。不同的是,一個類圖代表一個抽象的模型,包括類和它們之間的關(guān)系。但是,由于對象存在生命周期,因此UML對象圖只能在系統(tǒng)某一時間段存在。這意味著對象圖是更接近實(shí)際的系統(tǒng)行為。目的是在一個特定的時刻捕捉到靜態(tài)的系統(tǒng)視圖。
對象圖的目的概述如下:
- 正向和逆向工程
- 一個系統(tǒng)的對象間的關(guān)系
- 一個交互的靜態(tài)視圖
- 了解對象的行為和他們的關(guān)系從實(shí)用的角度來看


2.9 活動圖
2.9.1 活動圖概覽
活動圖是狀態(tài)機(jī)的一個特殊例子,它強(qiáng)調(diào)計(jì)算過程中的順序和并發(fā)步驟?;顒訄D所有或多數(shù)狀態(tài)都是活動狀態(tài)或動作狀態(tài),所有或大部分的轉(zhuǎn)換都由原狀態(tài)中完成的活動觸發(fā)。
2.9.2 活動圖的含義
活動圖是一種用于描述系統(tǒng)行為的模型視圖,它可用來描述動作和動作導(dǎo)致對象狀態(tài)改變的結(jié)果,而不用考慮引發(fā)狀態(tài)改變的事件。通常,活動圖記錄單個操作或方法的邏輯、單個用例或商業(yè)過程的邏輯流程。
在UML中,活動圖的起點(diǎn)用來描述活動圖的開始狀態(tài),用黑的實(shí)心圓表示?;顒訄D的中止點(diǎn)描述活動圖的終止?fàn)顟B(tài),用一個含有實(shí)心圓的空心圓表示?;顒訄D中的活動既可以是手動執(zhí)行的任務(wù),也可以是自動執(zhí)行的任務(wù)。

2.9.3 活動圖與狀態(tài)圖的區(qū)別
活動圖可以算是狀態(tài)圖的一個變種,并且活動圖的符號與狀態(tài)圖的符號非常相似,有時會讓人混淆。活動圖的主要目的是描述動作及對象的改變結(jié)果,而狀態(tài)圖則是以狀態(tài)的概念描述對象、子系統(tǒng)、系統(tǒng)在生命周期中的各種行為?;顒訄D中的狀態(tài)轉(zhuǎn)換不需要任何觸發(fā)事件?;顒訄D中的動作可以放在泳道中,而狀態(tài)圖則不可以。
2.9.4 活動圖的作用
活動圖是模型中的完整單元,表示一個程序或工作流,常用于計(jì)算流程和工作流程的建模。活動圖著重描述用例實(shí)例或?qū)ο蟮幕顒?,以及操作?shí)現(xiàn)中所完成的工作?;顒訄D通常出現(xiàn)在設(shè)計(jì)的前期,即在所有實(shí)現(xiàn)決定前出現(xiàn),特別是在對象被指定執(zhí)行所有活動前。
活動圖的作用主要體現(xiàn)在以下幾點(diǎn):
描述一個操作執(zhí)行過程中所完成的工作。說明角色、工作流、組織和對象是如何工作的。
活動圖對用例描述尤其有用,它可對用例的工作流建模,顯示用例內(nèi)部和用例之間的路徑。它可以說明用例的實(shí)例是如何執(zhí)行動作以及如何改變對象狀態(tài)的。
顯示如何執(zhí)行一組相關(guān)的動作,以及這些動作如何影響它們周圍的對象。
活動圖對理解業(yè)務(wù)處理過程十分有用?;顒訄D可以畫出工作流用以描述業(yè)務(wù),有利于領(lǐng)域?qū)<疫M(jìn)行交流。通過活動圖可以明確業(yè)務(wù)處理操作是如何進(jìn)行的,以及可能產(chǎn)生的變化。
描繪復(fù)雜過程的算法,在這種情況下使用的活動圖和傳統(tǒng)的程序流程圖的功能是差不多的。
2.9.5 泳道
為了對活動圖的職責(zé)進(jìn)行組織而在活動圖中將活動狀態(tài)分為不同的組,成為泳道(Swimlane)。每個泳道代表了特定含義的狀態(tài)職責(zé)的部分。在活動圖中,每個活動只能明確的屬于一個泳道,泳道明確地表示了哪些活動是由哪些對象進(jìn)行的。每個泳道都有一個與其它泳道不同的名稱。
每個泳道都可能由一個或者多個類實(shí)施,類所執(zhí)行的動作或擁有的狀態(tài)按照發(fā)生的事件順序自上而下排列在泳道內(nèi)。
在活動圖中,每個泳道通過垂直實(shí)線與他的鄰居泳道相分離。泳道的上方是名稱,不同泳道中的活動既可以順序進(jìn)行,也可以并發(fā)進(jìn)行。雖然每個活動狀態(tài)都指派了一條泳道,但是轉(zhuǎn)移則可能跨越數(shù)條泳道。

2.10 UML圖行符號匯總
