1. 簡(jiǎn)介
UML(Unified Modeling Language),即統(tǒng)一建模語(yǔ)言,適用于描述以用例為驅(qū)動(dòng),以體系結(jié)構(gòu)為中心的軟件設(shè)計(jì)的全過(guò)程。為面向?qū)ο筌浖O(shè)計(jì)提供統(tǒng)一的、標(biāo)準(zhǔn)的、可視化的建模語(yǔ)言。系統(tǒng)的建模有時(shí)候很難通過(guò)文字來(lái)表達(dá)(比如說(shuō)一些復(fù)雜的過(guò)程等等),用圖來(lái)說(shuō)明是最好的辦法。
UML的構(gòu)造塊包含3種:
- 事物(4種):結(jié)構(gòu)事物,行為事物,分組事物,注釋事物
- 關(guān)系(4種):泛化關(guān)系,實(shí)現(xiàn)關(guān)系,依賴(lài)關(guān)系,關(guān)聯(lián)關(guān)系(特例:聚合關(guān)系、組合關(guān)系) (強(qiáng)度排序:組合>聚合>關(guān)聯(lián)>依賴(lài))
- 圖(10種):用例圖,類(lèi)圖,對(duì)象圖,包圖,組件圖,部署圖,狀態(tài)圖,活動(dòng)圖,序列圖,協(xié)作圖 (常用:用例圖,類(lèi)圖,對(duì)象圖)
注意:事物是對(duì)模型中最具代表性的成分的抽象;關(guān)系把事物結(jié)合在一起;圖聚集了相關(guān)的事物。
2. UML事物(4種)
UML包含4種事物:
-
構(gòu)件事物:UML模型的靜態(tài)部分,描述概念或物理元素。它包括以下幾種:
- 類(lèi):具有相同屬性相同操作 相同關(guān)系相同語(yǔ)義的對(duì)象的描述
- 接口:描述元素的外部可見(jiàn)行為,即服務(wù)集合的定義說(shuō)明
- 協(xié)作:描述了一組事物間的相互作用的集合
- 用例:代表一個(gè)系統(tǒng)或系統(tǒng)的一部分行為,是一組動(dòng)作序列的集合
- 構(gòu)件:系統(tǒng)中物理存在,可替換的部件
- 節(jié)點(diǎn):運(yùn)行時(shí)存在的物理元素
- 另外,參與者、信號(hào)應(yīng)用、文檔庫(kù)、頁(yè)表等都是上述基本事物的變體
-
行為事物:UML模型圖的動(dòng)態(tài)部分,描述跨越空間和時(shí)間的行為。它包括以下幾種:
- 交互:實(shí)現(xiàn)某功能的一組構(gòu)件事物之間的消息的集合,涉及消息、動(dòng)作序列、鏈接
- 狀態(tài)機(jī):描述事物或交互在生命周期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列
-
分組事物:UML模型圖的組織部分,描述事物的組織結(jié)構(gòu)
- 包:把元素組織成組的機(jī)制
-
注釋事物:UML模型的解釋部分,用來(lái)對(duì)模型中的元素進(jìn)行說(shuō)明,解釋
- 注解:對(duì)元素進(jìn)行約束或解釋的簡(jiǎn)單符號(hào)
3. UML關(guān)系
3.1 泛化(generalization)關(guān)系
- 說(shuō)白了就是繼承關(guān)系。是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力。
- 繼承是類(lèi)與類(lèi)或者接口與接口之間最常見(jiàn)的關(guān)系。
- 在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性。

泛化關(guān)系
3.2 實(shí)現(xiàn)(realization)關(guān)系
- 說(shuō)白了就是接口關(guān)系。指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能;實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系;
- 在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性;

實(shí)現(xiàn)關(guān)系
3.3 依賴(lài)(dependency)關(guān)系
- 依賴(lài)關(guān)系也是類(lèi)與類(lèi)之間的連接。表示一個(gè)類(lèi)依賴(lài)于另一個(gè)類(lèi)的定義。
- 依賴(lài)關(guān)系總是單向的。
- 可以簡(jiǎn)單的理解,就是一個(gè)類(lèi)A使用到了另一個(gè)類(lèi)B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類(lèi)的變化會(huì)影響到A;比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴(lài);
- 表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)被類(lèi)A在某個(gè)method方法中使用。在java中,依賴(lài)關(guān)系體現(xiàn)為: 局部變量, 方法中的參數(shù), 和對(duì)靜態(tài)方法的調(diào)用。

依賴(lài)關(guān)系
3.4 關(guān)聯(lián)(association)關(guān)系
- 關(guān)聯(lián)關(guān)系: 表示類(lèi)與類(lèi)之間的聯(lián)接, 它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法。
- 關(guān)聯(lián)可以使用單箭頭表示單向關(guān)聯(lián), 使用雙箭頭或不使用箭頭表示雙向關(guān)聯(lián), 不建議使用雙向關(guān)聯(lián)。
- 關(guān)聯(lián)有兩個(gè)端點(diǎn), 在每個(gè)端點(diǎn)可以有一個(gè)基數(shù), 表示這個(gè)關(guān)聯(lián)的類(lèi)可以有幾個(gè)實(shí)例。
- 關(guān)聯(lián)關(guān)系體現(xiàn)的是兩個(gè)類(lèi)、或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴(lài)關(guān)系,比如我和我的朋友;這種關(guān)系比依賴(lài)更強(qiáng)、不存在依賴(lài)關(guān)系的偶然性、關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的。
- 表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián)類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量;在java語(yǔ)言中關(guān)聯(lián)關(guān)系是使用實(shí)例變量實(shí)現(xiàn)的。
常見(jiàn)的基數(shù)及含義:
- 0..1:0 或1 個(gè)實(shí)例
- 0..*: 對(duì)實(shí)例的數(shù)目沒(méi)有限制
- 1: 只能有一個(gè)實(shí)例
- 1..*: 至少有一個(gè)實(shí)例

關(guān)聯(lián)關(guān)系
3.4.1 聚合(aggregation)關(guān)系
- 聚合關(guān)系: 關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系。
- 聚合是整體和個(gè)體之間的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享;
- 比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等;
- 表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分;聚合關(guān)系也是使用實(shí)例變量實(shí)現(xiàn)的。從java語(yǔ)法上是分不出關(guān)聯(lián)和聚合的。
- 關(guān)聯(lián)關(guān)系中兩個(gè)類(lèi)是處于相同的層次, 而聚合關(guān)系中兩不類(lèi)是處于不平等的層次, 一個(gè)表示整體, 一個(gè)表示部分。

聚合關(guān)系
3.4.2 組合(合成)關(guān)系(composition)
- 組合關(guān)系:也是關(guān)聯(lián)關(guān)系的一種特例,關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系。
- 他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱(chēng)為強(qiáng)聚合。
- 他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你的大腦;
- 組合關(guān)系不能共享。
- 表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分。

組合關(guān)系
4 用例圖(Use Case Diagram )
- 用例圖是從用戶(hù)角度描述系統(tǒng)功能,是用戶(hù)所能觀察到的系統(tǒng)功能的模型圖,用例是系統(tǒng)中的一個(gè)功能單元。
- 例如下圖就描述了用戶(hù)的購(gòu)物功能的模型:

用例圖
5. 類(lèi)圖(Class Diagram)
- 類(lèi)圖描述系統(tǒng)中類(lèi)的靜態(tài)結(jié)構(gòu)。不僅定義系統(tǒng)中的類(lèi),表示類(lèi)之間的聯(lián)系如關(guān)聯(lián)、依賴(lài)、聚合等,也包括類(lèi)的內(nèi)部結(jié)構(gòu)(類(lèi)的屬性和操作)。
- 例如下面的單例模式的類(lèi)圖:

單例模式
需要注意:
- 每一行分別表示:類(lèi)型、成員屬性、函數(shù)(操作)
- 類(lèi)名斜體表示為抽象
- 下劃線(xiàn)表示靜態(tài)
- 訪(fǎng)問(wèn)權(quán)限控制:+表示public;#表示protect;-表示private;~表示package
6. 時(shí)序圖(Sequence Diagram)
- 順序圖顯示對(duì)象之間的動(dòng)態(tài)合作關(guān)系,它強(qiáng)調(diào)對(duì)象之間消息發(fā)送的順序,同時(shí)顯示對(duì)象之間的交互。
- 順序圖的一個(gè)用途是用來(lái)表示用例中的行為順序。當(dāng)執(zhí)行一個(gè)用例行為時(shí),順序圖中的每條消息對(duì)應(yīng)了一個(gè)類(lèi)操作或引起狀態(tài)轉(zhuǎn)換的觸發(fā)事件。
- 例如下面的是支付寶的支付流程:

時(shí)序圖
需要注意:
- 實(shí)線(xiàn)表示同步消息
- 虛線(xiàn)表示異步消息