Unified Modeling Language (UML)又稱統(tǒng)一建模語言或標(biāo)準(zhǔn)建模語言,它是一個(gè)支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格,到構(gòu)造和配置。
- UML分類
- (1)靜態(tài)模型(系統(tǒng)結(jié)構(gòu)): 用例圖、類圖、對(duì)象圖、構(gòu)件圖、部署圖
- (2)動(dòng)態(tài)模型(系統(tǒng)行為):狀態(tài)圖、活動(dòng)圖、順序圖、協(xié)作圖
- UML中有4種事務(wù):
- (1)結(jié)構(gòu)事務(wù):名詞、靜態(tài)部分、物理元素。

- (2)行為事務(wù):動(dòng)詞、動(dòng)態(tài)部分、行為。

- (3)分組事務(wù):包。

- (4)注釋事務(wù):注解。

用例圖:
用例圖是指由參與者(Actor)、用例(Use Case),邊界以及它們之間的關(guān)系構(gòu)成的用于描述系統(tǒng)功能的視圖。用例圖(User Case)是外部用戶(被稱為參與者)所能觀察到的系統(tǒng)功能的模型圖。用例圖是系統(tǒng)的藍(lán)圖,用于需求分析階段。用例圖呈現(xiàn)了一些參與者,一些用例,以及它們之間的關(guān)系,主要用于對(duì)系統(tǒng)、子系統(tǒng)或類的功能行為進(jìn)行建模。


用例之間的關(guān)系
(1)包含 (include) 關(guān)系
父用例包含子用例,父用例執(zhí)行,子用例必然被執(zhí)行
當(dāng)兩個(gè)或多個(gè)用例中共用一組相同的動(dòng)作,這時(shí)可以將這組相同的動(dòng)作抽出來作為一個(gè)獨(dú)立的子用例,供多個(gè)基用例所共享。因?yàn)樽佑美怀槌觯美⒎且粋€(gè)完整的用例,所以include關(guān)系中的基用例必須和子用例一起使用才夠完整,子用例也必然被執(zhí)行。include關(guān)系在用例圖中使用帶箭頭的虛線表示(在線上標(biāo)注<>),箭頭從基用例指向子用例。

(2)擴(kuò)展(extend)關(guān)系
子用例擴(kuò)展父用例,復(fù)用執(zhí)行,子用例不一定執(zhí)行
是對(duì)基用例的擴(kuò)展,基用例是一個(gè)完整的用例,即使沒有子用例的參與,也可以完成一個(gè)完整的功能。 extend關(guān)系在用例圖中使用帶箭頭的虛線表示(在線上標(biāo)注<>),箭頭從子用例指向基用例。

圖例:用戶如果如期還書,則還書業(yè)務(wù)就結(jié)束了,如果超期了,才會(huì)有罰款的業(yè)務(wù),罰款不是必須,所以是擴(kuò)展關(guān)系。
類圖

類圖(Class diagram)展現(xiàn)了一組對(duì)象、接口、協(xié)作和它們之間的關(guān)系。類圖是靜態(tài)視圖。
類圖中包括:
(1)類
(2)接口
(3)協(xié)作
(4)依賴、泛化和關(guān)聯(lián)關(guān)系
使用類圖的場景:
(1)對(duì)系統(tǒng)的靜態(tài)設(shè)計(jì)建模
(2)對(duì)簡單的協(xié)作建模
(3)對(duì)邏輯數(shù)據(jù)庫模式建模
類的分類:
(1) 實(shí)體類:實(shí)體類對(duì)應(yīng)系統(tǒng)需求中的每個(gè)實(shí)體,它們通常需要保存在永久存儲(chǔ)體中,一般使用數(shù)據(jù)庫表或文件來記錄,實(shí)體類既包括存儲(chǔ)和傳遞數(shù)據(jù)的類,還包括操作數(shù)據(jù)的類。實(shí)體類來源于需求說明中的名詞,如學(xué)生、商品等。
(2) 控制類:控制類用于體現(xiàn)應(yīng)用程序的執(zhí)行邏輯,提供相應(yīng)的業(yè)務(wù)操作,將控制類抽象出來可以降低界面和數(shù)據(jù)庫之間的耦合度。控制類用于對(duì)一個(gè)或幾個(gè)用例所特有的控制行為進(jìn)行建模。控制對(duì)象(控制類的實(shí)例)通常控制其他對(duì)象,因此它們的行為具有協(xié)調(diào)性質(zhì)。控制類將用例的特有行為進(jìn)行封裝
(3) 邊界類:邊界類用于對(duì)外部用戶與系統(tǒng)之間的交互對(duì)象進(jìn)行抽象,主要包括界面類,如對(duì)話框、窗口、菜單等。
類圖中的關(guān)系:
- 依賴(Dependency)


是一種使用的關(guān)系, 即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助, 所以要盡量不使用雙向的互相依賴。可以簡單的理解,就是一個(gè)類A使用到了另一個(gè)類B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類的變化會(huì)影響到A;比如某人要過河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴。在UML中,依賴關(guān)系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
- 泛化(Generalization)


也就是繼承關(guān)系的反關(guān)系,用于描述父類與子類之間的關(guān)系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關(guān)系用帶空心三角形的直線來表示。
子類繼承自父類,父類是子類的泛化。
- 關(guān)聯(lián)(Association)


是一種擁有的關(guān)系, 它使一個(gè)類知道另一個(gè)類的屬性和方法;如:老師與學(xué)生,丈夫與妻子。
關(guān)聯(lián)是類之間的結(jié)構(gòu)關(guān)系,它描述了一組鏈,鏈?zhǔn)菍?duì)象之間的連接。兩個(gè)類之間可以有多個(gè)由不同角色標(biāo)識(shí)的關(guān)聯(lián)。關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。
(1) 雙向關(guān)聯(lián)。默認(rèn)情況下,關(guān)聯(lián)是雙向的。
(2) 單向關(guān)聯(lián)
(3)自關(guān)聯(lián)
(4)多重關(guān)聯(lián)
- 聚合(Aggregation)


- 聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享在UML中,聚合關(guān)系用帶空心菱形的直線表示。例如:汽車發(fā)動(dòng)機(jī)(Engine)是汽車(Car)的組成部分,但是汽車發(fā)動(dòng)機(jī)可以獨(dú)立存在,因此,汽車和發(fā)動(dòng)機(jī)是聚合關(guān)系,如圖所示
- 組合(Composition)


組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束。在UML中,組合關(guān)系用帶實(shí)心菱形的直線表示。
- 實(shí)現(xiàn)(Realization)


是用來規(guī)定接口和實(shí)現(xiàn)接口的類或者構(gòu)建結(jié)構(gòu)的關(guān)系,接口是操作的集合,而這些操作就用于規(guī)定類或者構(gòu)建的一種服務(wù)。
接口之間也可以有與類之間關(guān)系類似的繼承關(guān)系和依賴關(guān)系,但是接口和類之間還存在一種實(shí)現(xiàn)關(guān)系(Realization),在這種關(guān)系中,類實(shí)現(xiàn)了接口,類中的操作實(shí)現(xiàn)了接口中所 聲明的操作。在UML中,類與接口之間的實(shí)現(xiàn)關(guān)系用帶空心三角形的虛線來表示。例如:定義了一個(gè)交通工具接口Vehicle,包含一個(gè)抽象操作move(),在類Ship和類Car中都實(shí)現(xiàn)了該move()操作,不過具體的實(shí)現(xiàn)細(xì)節(jié)將會(huì)不一樣,如圖所示:
對(duì)象圖
對(duì)象圖(ObjectDiagram) 展現(xiàn)了某一時(shí)刻一組對(duì)象以及它們之間的關(guān)系,描述了在類圖中所建立的事物的實(shí)例的靜態(tài)快照。

交互圖
交互圖表現(xiàn)為序列圖、通信圖、交互概覽圖和計(jì)時(shí)圖。用于動(dòng)態(tài)建模。
序列圖
序列圖強(qiáng)調(diào)消息時(shí)間順序的交互


通信圖
通信圖(協(xié)作圖)強(qiáng)調(diào)接收和發(fā)送信息的對(duì)象的結(jié)構(gòu)組織的交互
對(duì)象:圖中的矩形元素即為對(duì)象,其中冒號(hào)前面部分為對(duì)象名,后面為類名,表示類的一個(gè)實(shí)例。
鏈接:用兩個(gè)對(duì)象之間的單一線條表示,用來在通信圖中關(guān)聯(lián)對(duì)象,目的是讓消息在不同系統(tǒng)對(duì)象之間傳遞。可以理解鏈接是公路,消息是車。
消息:通信圖中對(duì)象之間通信的方式。



交互概覽圖
交互概覽圖強(qiáng)調(diào)控制流的交互圖

計(jì)時(shí)圖
計(jì)時(shí)圖適合嵌入式系統(tǒng)建模的交互圖

狀態(tài)圖
用來描述一個(gè)特定的對(duì)象所有可能的狀態(tài),以及由于各種事件的發(fā)生而引起的狀態(tài)之間的轉(zhuǎn)移和變化。用于對(duì)系統(tǒng)的動(dòng)態(tài)方面建模。

活動(dòng)圖
將進(jìn)程或其他計(jì)算的結(jié)構(gòu)展示為計(jì)算內(nèi)部一步步的控制流和數(shù)據(jù)流,主要用來描述系統(tǒng)的動(dòng)態(tài)視圖。活動(dòng)圖在本質(zhì)上是一種流程圖。活動(dòng)圖著重表現(xiàn)從一個(gè)活動(dòng)到另一個(gè)活動(dòng)的控制流,是內(nèi)部處理驅(qū)動(dòng)的流程。
活動(dòng)圖主要描述行為的動(dòng)作,
狀態(tài)圖主要描述行為的結(jié)果。


構(gòu)件圖
使用構(gòu)件圖的思想是復(fù)用。就像是我們蓋房子,當(dāng)房子的大體框架建好之后,剩下的門和窗戶家具之類的直接拿來安裝上即可,不需要再從新制作,直接拿來復(fù)用的思想。這些門和窗戶就相當(dāng)于一個(gè)個(gè)的構(gòu)件。
構(gòu)件有一下幾種類型:
(1)部署構(gòu)件:dll文件、exe文件、com+對(duì)象、CORBA對(duì)象、EJB、動(dòng)態(tài)Web頁和數(shù)據(jù)庫表等。
(2)工作產(chǎn)品構(gòu)件:源代碼文件、數(shù)據(jù)文件等
(3)執(zhí)行構(gòu)件:系統(tǒng)執(zhí)行后得到的構(gòu)件。


部署圖
表示系統(tǒng)中軟件和硬件的物理架構(gòu)。
從部署圖中,可以了解到軟件和硬件組件之間的物理關(guān)系以及處理節(jié)點(diǎn)的組件分布情況。使用部署圖可以顯示運(yùn)行時(shí)系統(tǒng)的結(jié)構(gòu),同時(shí)還傳達(dá)構(gòu)成應(yīng)用程序的硬件和軟件元素的配置和部署方式。

包圖
在 UML 中用類似于文件夾的符號(hào)表示的模型元素的組合。包圖是一種維護(hù)和描述系統(tǒng)總體結(jié)構(gòu)的模型的重要建模工具,通過對(duì)包中各個(gè)包以及包之間關(guān)系的描述,展現(xiàn)出系統(tǒng)的模塊與模塊之間的依賴關(guān)系。
包圖的作用:包圖可以描述需求,設(shè)計(jì)的高階概況;包圖通過合理規(guī)劃自身功能反應(yīng)系統(tǒng)的高層架構(gòu),在邏輯上將系統(tǒng)進(jìn)行模塊化分解;包圖最終是組織源碼的方式。
一個(gè)包圖可以由任何一種UML圖組成,通常是UML用例圖或是UML類圖。
包被描述成文件夾,可以用于UML任何一種的圖上。
包圖只是把某些類放在一個(gè)包中,因此可以看做是類圖的一種。
