UML(Unified Modeling Language)是一種統(tǒng)一建模語言,為面向?qū)ο箝_發(fā)系統(tǒng)的產(chǎn)品進(jìn)行說明、可視化、和編制文檔的一種標(biāo)準(zhǔn)語言。下面將對UML的九種圖+包圖的基本概念進(jìn)行介紹以及各個(gè)圖的使用場景。
一、基本概念
如下圖所示,UML圖分為用例視圖、設(shè)計(jì)視圖、進(jìn)程視圖、實(shí)現(xiàn)視圖和拓?fù)湟晥D,又可以靜動分為靜態(tài)視圖和動態(tài)視圖。靜態(tài)圖分為:用例圖,類圖,對象圖,包圖,構(gòu)件圖,部署圖。動態(tài)圖分為:狀態(tài)圖,活動圖,協(xié)作圖,序列圖。

1、用例圖(UseCase Diagrams):
用例圖主要回答了兩個(gè)問題:1、是誰用軟件。2、軟件的功能。從用戶的角度描述了系統(tǒng)的功能,并指出各個(gè)功能的執(zhí)行者,強(qiáng)調(diào)用戶的使用者,系統(tǒng)為執(zhí)行者完成哪些功能。

2、類圖(Class Diagrams):
用戶根據(jù)用例圖抽象成類,描述類的內(nèi)部結(jié)構(gòu)和類與類之間的關(guān)系,是一種靜態(tài)結(jié)構(gòu)圖。 在UML類圖中,常見的有以下幾種關(guān)系: 泛化(Generalization), 實(shí)現(xiàn)(Realization),關(guān)聯(lián)(Association),聚合(Aggregation),組合(Composition),依賴(Dependency)。
各種關(guān)系的強(qiáng)弱順序: 泛化 = 實(shí)現(xiàn) > 組合 > 聚合 > 關(guān)聯(lián) > 依賴
2.1.泛化
【泛化關(guān)系】:是一種繼承關(guān)系,表示一般與特殊的關(guān)系,它指定了子類如何繼承父類的所有特征和行為。例如:老虎是動物的一種,即有老虎的特性也有動物的共性。

2.2.實(shí)現(xiàn)
【實(shí)現(xiàn)關(guān)系】:是一種類與接口的關(guān)系,表示類是接口所有特征和行為的實(shí)現(xiàn)。

2.3.關(guān)聯(lián)
【關(guān)聯(lián)關(guān)系】:是一種擁有的關(guān)系,它使一個(gè)類知道另一個(gè)類的屬性和方法;如:老師與學(xué)生,丈夫與妻子關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。
【代碼體現(xiàn)】:成員變量

2.4.聚合
【聚合關(guān)系】:是整體與部分的關(guān)系,且部分可以離開整體而單獨(dú)存在。如車和輪胎是整體和部分的關(guān)系,輪胎離開車仍然可以存在。
聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系;關(guān)聯(lián)和聚合在語法上無法區(qū)分,必須考察具體的邏輯關(guān)系。
【代碼體現(xiàn)】:成員變量

2.5.組合
【組合關(guān)系】:是整體與部分的關(guān)系,但部分不能離開整體而單獨(dú)存在。如公司和部門是整體和部分的關(guān)系,沒有公司就不存在部門。
組合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系,它要求普通的聚合關(guān)系中代表整體的對象負(fù)責(zé)代表部分的對象的生命周期。
【代碼體現(xiàn)】:成員變量
【箭頭及指向】:帶實(shí)心菱形的實(shí)線,菱形指向整體

2.6.依賴
【依賴關(guān)系】:是一種使用的關(guān)系,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助,所以要盡量不使用雙向的互相依賴.
【代碼表現(xiàn)】:局部變量、方法的參數(shù)或者對靜態(tài)方法的調(diào)用
【箭頭及指向】:帶箭頭的虛線,指向被使用者

2.7 各種類圖關(guān)系

3、對象圖(Object Diagrams):
描述的是參與交互的各個(gè)對象在交互過程中某一時(shí)刻的狀態(tài)。對象圖可以被看作是類圖在某一時(shí)刻的實(shí)例。

4、狀態(tài)圖(Statechart Diagrams):
是一種由狀態(tài)、變遷、事件和活動組成的狀態(tài)機(jī),用來描述類的對象所有可能的狀態(tài)以及時(shí)間發(fā)生時(shí)狀態(tài)的轉(zhuǎn)移條件。

5、活動圖(Activity Diagrams):
是狀態(tài)圖的一種特殊情況,這些狀態(tài)大都處于活動狀態(tài)。本質(zhì)是一種流程圖,它描述了活動到活動的控制流。
交互圖強(qiáng)調(diào)的是對象到對象的控制流,而活動圖則強(qiáng)調(diào)的是從活動到活動的控制流。
活動圖是一種表述過程基理、業(yè)務(wù)過程以及工作流的技術(shù)。
它可以用來對業(yè)務(wù)過程、工作流建模,也可以對用例實(shí)現(xiàn)甚至是程序?qū)崿F(xiàn)來建模。

5.1 帶泳道的活動圖
泳道表明每個(gè)活動是由哪些人或哪些部門負(fù)責(zé)完成。

5.2 帶對象流的活動圖
用活動圖描述某個(gè)對象時(shí),可以把涉及到的對象放置在活動圖中,并用一個(gè)依賴將其連接到進(jìn)行創(chuàng)建、修改和撤銷的動作狀態(tài)或者活動狀態(tài)上,對象的這種使用方法就構(gòu)成了對象流。對象流用帶有箭頭的虛線表示。

6、序列圖-時(shí)序圖(Sequence Diagrams):
交互圖的一種,描述了對象之間消息發(fā)送的先后順序,強(qiáng)調(diào)時(shí)間順序。
序列圖的主要用途是把用例表達(dá)的需求,轉(zhuǎn)化為進(jìn)一步、更加正式層次的精細(xì)表達(dá)。用例常常被細(xì)化為一個(gè)或者更多的序列圖。同時(shí)序列圖更有效地描述如何分配各個(gè)類的職責(zé)以及各類具有相應(yīng)職責(zé)的原因。

消息用從一個(gè)對象的生命線到另一個(gè)對象生命線的箭頭表示。箭頭以時(shí)間順序在圖中從上到下排列。
序列圖中涉及的元素:
6.1 生命線
生命線名稱可帶下劃線。當(dāng)使用下劃線時(shí),意味著序列圖中的生命線代表一個(gè)類的特定實(shí)例。

6.2 同步消息
同步等待消息

6.3 異步消息
異步發(fā)送消息,不需等待

6.4 注釋

6.5 約束

6.6 組合
組合片段用來解決交互執(zhí)行的條件及方式。它允許在序列圖中直接表示邏輯組件,用于通過指定條件或子進(jìn)程的應(yīng)用區(qū)域,為任何生命線的任何部分定義特殊條件和子進(jìn)程。常用的組合片段有:抉擇、選項(xiàng)、循環(huán)、并行。
7、協(xié)作圖(Collaboration Diagrams):
交互圖的一種,描述了收發(fā)消息的對象的組織關(guān)系,強(qiáng)調(diào)對象之間的合作關(guān)系。時(shí)序圖按照時(shí)間順序布圖,而寫作圖按照空間結(jié)構(gòu)布圖

8、構(gòu)件圖(Component Diagrams):
構(gòu)件圖是用來表示系統(tǒng)中構(gòu)件與構(gòu)件之間,類或接口與構(gòu)件之間的關(guān)系圖。其中,構(gòu)建圖之間的關(guān)系表現(xiàn)為依賴關(guān)系,定義的類或接口與類之間的關(guān)系表現(xiàn)為依賴關(guān)系或?qū)崿F(xiàn)關(guān)系。

9、部署圖(Deployment Diagrams):
描述了系統(tǒng)運(yùn)行時(shí)進(jìn)行處理的結(jié)點(diǎn)以及在結(jié)點(diǎn)上活動的構(gòu)件的配置。強(qiáng)調(diào)了物理設(shè)備以及之間的連接關(guān)系。
部署模型的目的:
描述一個(gè)具體應(yīng)用的主要部署結(jié)構(gòu),通過對各種硬件,在硬件中的軟件以及各種連接協(xié)議的顯示,可以很好的描述系統(tǒng)是如何部署的;平衡系統(tǒng)運(yùn)行時(shí)的計(jì)算資源分布;可以通過連接描述組織的硬件網(wǎng)絡(luò)結(jié)構(gòu)或者是嵌入式系統(tǒng)等具有多種硬件和軟件相關(guān)的系統(tǒng)運(yùn)行模型。

二、圖的差異比較
1.序列圖(時(shí)序圖)VS協(xié)作圖
序列圖和協(xié)作圖都是交互圖。二者在語義上等價(jià),可以相互轉(zhuǎn)化。但是側(cè)重點(diǎn)不同:序列圖側(cè)重時(shí)間順序,協(xié)作圖側(cè)重對象間的關(guān)系。
共同點(diǎn):時(shí)序圖與協(xié)作圖均顯示了對象間的交互。
不同點(diǎn):時(shí)序圖強(qiáng)調(diào)交互的時(shí)間次序。
協(xié)作圖強(qiáng)調(diào)交互的空間結(jié)構(gòu)。
2.狀態(tài)圖VS活動圖
狀態(tài)圖和活動圖都是行為圖。狀態(tài)圖側(cè)重從行為的結(jié)果來描述,活動圖側(cè)重從行為的動作來描述。狀態(tài)圖描述了一個(gè)具體對象的可能狀態(tài)以及他們之間的轉(zhuǎn)換。在實(shí)際的項(xiàng)目中,活動圖并不是必須的,需要滿足以下條件:
1、出現(xiàn)并行過程&行為;
2、描述算法;
3、跨越多個(gè)用例的活動圖。
3.活動圖VS交互圖
二者都涉及到對象和他們之間傳遞的關(guān)系。區(qū)別在于交互圖觀察的是傳送消息的對象,而活動圖觀察的是對象之間傳遞的消息??此普Z義相同,但是他們是從不同的角度來觀察整個(gè)系統(tǒng)的。
三、UML與軟件工程
UML圖是軟件工程的組成部分,軟件工程從宏觀的角度保證了軟件開發(fā)的各個(gè)過程的質(zhì)量。而UML作為一種建模語言,更加有效的實(shí)現(xiàn)了軟件工程的要求。
如下圖,在軟件的各個(gè)開發(fā)階段需要的UML圖。

下表是UML使用人員圖示:
