UML科普文,一篇文章掌握14種UML圖
前言
上一篇文章寫了一篇建造者模式,其中有幾個(gè)UML類圖,有的讀者反饋看不懂了,我們今天就來(lái)解決一哈。
什么是UML?
UML
是Unified Model Language
的縮寫,中文是統(tǒng)一建模語(yǔ)言
,是由一整套圖表組成的標(biāo)準(zhǔn)化建模語(yǔ)言。
為什么要用UML?
通過(guò)使用UML使得在軟件開(kāi)發(fā)之前, 對(duì)整個(gè)軟件設(shè)計(jì)有更好的可讀性,可理解性,從而降低開(kāi)發(fā)風(fēng)險(xiǎn)。同時(shí),也能方便各個(gè)開(kāi)發(fā)人員之間的交流。
UML提供了極富表達(dá)能力的建模語(yǔ)言,可以讓軟件開(kāi)發(fā)過(guò)程中的不同人員分別得到自己感興趣的信息。
Page-Jones
在《Fundamental Object-Oriented Design in UML》 一書中總結(jié)了UML的主要目的,如下:
-
為用戶提供現(xiàn)成的、有表現(xiàn)力的可視化建模語(yǔ)言,以便他們開(kāi)發(fā)和交換有意義的模型。 -
為核心概念提供可擴(kuò)展性 (Extensibility) 和特殊化 (Specialization) 機(jī)制。 -
獨(dú)立于特定的編程語(yǔ)言和開(kāi)發(fā)過(guò)程。 -
為了解建模語(yǔ)言提供一個(gè)正式的基礎(chǔ)。 -
鼓勵(lì)面向?qū)ο蠊ぞ呤袌?chǎng)的發(fā)展。 -
支持更高層次的開(kāi)發(fā)概念,如協(xié)作,框架,模式和組件。 -
整合最佳的工作方法 (Best Practices)。
UML圖有哪些?
-
UML圖分為結(jié)構(gòu)圖和行為圖。 -
結(jié)構(gòu)圖分為類圖、輪廓圖、組件圖、組合結(jié)構(gòu)圖、對(duì)象圖、部署圖、包圖。 -
行為圖又分活動(dòng)圖、用例圖、狀態(tài)機(jī)圖和交互圖。 -
交互圖又分為序列圖、時(shí)序圖、通訊圖、交互概覽圖。
UML圖概覽
什么是類圖?
-
【概念】 類圖是一切面向?qū)ο蠓椒ǖ暮诵慕9ぞ摺n悎D描述了系統(tǒng)中對(duì)象的類型以及它們之間存在的各種靜態(tài)關(guān)系。 -
【目的】用來(lái)表示類、接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系。
在類圖中,常見(jiàn)的有以下幾種關(guān)系。
泛化(Generalization)
-
【泛化關(guān)系】是一種繼承關(guān)系,表示子類繼承父類的所有特征和行為。 -
【箭頭指向】帶三角箭頭的實(shí)線,箭頭指向父類。
實(shí)現(xiàn)(Realization)
-
【實(shí)現(xiàn)關(guān)系】是一種類與接口的關(guān)系,表示類是接口所有特征和行為的實(shí)現(xiàn)。 -
【箭頭指向】帶三角箭頭的虛線,箭頭指向接口。
關(guān)聯(lián)(Association)
-
【關(guān)聯(lián)關(guān)系】是一種擁有關(guān)系,它使得一個(gè)類知道另一個(gè)類的屬性和方法。 -
【代碼體現(xiàn)】成員變量 -
【箭頭指向】帶普通箭頭的實(shí)線,指向被擁有者。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭,或者沒(méi)有箭頭。單向的關(guān)聯(lián)有一個(gè)箭頭。
自己買的車,想什么時(shí)候開(kāi)就開(kāi)。但是車是車,人是人,沒(méi)有整體與部分的關(guān)系。
聚合(Aggregation)
-
【聚合關(guān)系】是一種整體與部分的關(guān)系。且部分可以離開(kāi)整體而單獨(dú)存在。聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系;關(guān)聯(lián)和聚合在語(yǔ)法上無(wú)法區(qū)分,必須考察具體的邏輯關(guān)系。 -
【代碼體現(xiàn)】成員變量 -
【箭頭指向】帶空心菱形的實(shí)線,空心菱形指向整體。
電腦有鍵盤才能輸入信息,電腦是整體,鍵盤是部分,鍵盤也可以離開(kāi)電腦,單純的拿去敲。所以是聚合。
組合(Composition)
-
【組合關(guān)系】是一種整體與部分的關(guān)系。但部分不能離開(kāi)整體而單獨(dú)存在,組合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系。 -
【代碼體現(xiàn)】成員變量 -
【箭頭指向】帶實(shí)心菱形和普通箭頭的實(shí)線,實(shí)心菱形指向整體。
鳥是整體,翅膀是部分。鳥死了,翅膀也就不能飛了。所以是組合。我們?cè)倏匆幌?,下面的一組經(jīng)典的聚合組合關(guān)系的例子。
一個(gè)公司擁有多個(gè)部門,公司和部門之間是組合關(guān)系,公司破產(chǎn)了,部門就不復(fù)存在了。部門和員工是聚合關(guān)系,部門被裁掉,員工就換下家了。
依賴(Dependency)
-
【依賴關(guān)系】是一種使用關(guān)系,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助。 -
【箭頭指向】帶普通箭頭的虛線,普通箭頭指向被使用者。
老司機(jī)只管開(kāi)車,車是誰(shuí)的不重要,給什么車開(kāi)什么車。
什么是組件圖?
-
【概念】描繪了系統(tǒng)中組件提供的、需要的接口、端口等,以及它們之間的關(guān)系。 -
【目的】用來(lái)展示各個(gè)組件之間的依賴關(guān)系。
訂單系統(tǒng)組件依賴于客戶資源庫(kù)和庫(kù)存系統(tǒng)組件。中間的虛線箭頭表示依賴關(guān)系。另外兩個(gè)符號(hào),表示組件連接器,一個(gè)提供接口,一個(gè)需要接口。
什么是部署圖?
-
【概念】描述了系統(tǒng)內(nèi)部的軟件如何分布在不同的節(jié)點(diǎn)上。 -
【目的】用來(lái)表示軟件和硬件的映射關(guān)系。
圖中簡(jiǎn)單的表示,不同機(jī)器上面部署的不同軟件。
什么是對(duì)象圖?
-
【概念】對(duì)象圖是類圖的一個(gè)實(shí)例,是系統(tǒng)在某個(gè)時(shí)間點(diǎn)的詳細(xì)狀態(tài)的快照。 -
【目的】用來(lái)表示兩個(gè)或者多個(gè)對(duì)象之間在某一時(shí)刻之間的關(guān)系。
圖中就是描述的,某時(shí)間點(diǎn)
bat
這個(gè)公司有一個(gè)研發(fā)部,一個(gè)銷售部,兩個(gè)部門只有一個(gè)人iisheng
。
什么是包圖?
-
【概念】描繪了系統(tǒng)在包層面上的結(jié)構(gòu)設(shè)計(jì)。 -
【目的】用來(lái)表示包和包之間的依賴關(guān)系。
-
《Use》關(guān)系表示使用依賴, Web Shopping
依賴Payment
-
《Merge》關(guān)系表示合并, Web Shopping
合并了Shopping Cart
就擁有了Shopping Cart
的功能 -
《Access》關(guān)系表示私有引入,比如代碼中的指定包名類名 -
《Import》關(guān)系表示公共引入,比如Java中的 import
之后,就可以直接使用import
包中的類了。
什么是組合結(jié)構(gòu)圖?
-
【概念】描述了一個(gè)"組合結(jié)構(gòu)"的內(nèi)部結(jié)構(gòu),以及他們之間的關(guān)系。這個(gè)"組合結(jié)構(gòu)"可以是系統(tǒng)的一部分,或者一個(gè)整體。 -
【目的】用來(lái)表示系統(tǒng)中邏輯上的"組合結(jié)構(gòu)"。
圖中描述了
Car
是由車軸連接著的兩個(gè)前面輪子、兩個(gè)后面輪子,和引擎組合的。
什么是輪廓圖?
-
【概念】輪廓圖提供了一種通用的擴(kuò)展機(jī)制,用于為特定域和平臺(tái)定制UML模型。 -
【目的】用于在特定領(lǐng)域中構(gòu)建UML模型。
圖中我們定義了一個(gè)簡(jiǎn)易的
EJB
的概要圖。Bean
是從Component
擴(kuò)展來(lái)的。Entity Bean
和Session Bean
繼承了Bean
。EJB
擁有Remote
和Home
接口,和JAR
包。
什么是用例圖?
-
【概念】用例圖是指由參與者、用例,邊界以及它們之間的關(guān)系構(gòu)成的用于描述系統(tǒng)功能的視圖。 -
【目的】用來(lái)描述整個(gè)系統(tǒng)的功能。
用例圖中包含以下三種關(guān)系:
-
包含關(guān)系使用符號(hào)《include》,想要查看訂單列表,前提是需要先登錄。 -
擴(kuò)展關(guān)系使用符號(hào)《extend》,基于查詢訂單列表的功能,可以增加一個(gè)導(dǎo)出數(shù)據(jù)的功能 -
泛化關(guān)系,子用例繼承父用例所有結(jié)構(gòu)、行為和關(guān)系。
什么是活動(dòng)圖?
-
【概念】描述了具體業(yè)務(wù)用例的實(shí)現(xiàn)流程。 -
【目的】用來(lái)表示用例實(shí)現(xiàn)的工作流程。
圖中簡(jiǎn)單描述了,從開(kāi)始到登錄到查看訂單列表,或者登錄失敗直接結(jié)束。
什么是狀態(tài)機(jī)圖?
-
【概念】狀態(tài)機(jī)圖對(duì)一個(gè)單獨(dú)對(duì)象的行為建模,指明對(duì)象在它的整個(gè)生命周期里,響應(yīng)不同事件時(shí),執(zhí)行相關(guān)事件的順序。 -
【目的】用來(lái)表示指定對(duì)象,在整個(gè)生命周期,響應(yīng)不同事件的不同狀態(tài)。
圖中描述了,門在其生命周期內(nèi)所經(jīng)歷的狀態(tài)。
什么是序列圖?
-
【概念】序列圖根據(jù)時(shí)間序列展示對(duì)象如何進(jìn)行協(xié)作。它展示了在用例的特定場(chǎng)景中,對(duì)象如何與其他對(duì)象交互。 -
【目的】通過(guò)描述對(duì)象之間發(fā)送消息的時(shí)間順序顯示多個(gè)對(duì)象之間的動(dòng)態(tài)協(xié)作。
圖中展示的是支付寶條碼支付場(chǎng)景的序列圖。其中,
loop
是循環(huán),alt
是選擇,序列圖的其他關(guān)系這里就不介紹了。
什么是通訊圖?
-
【概念】描述了收發(fā)消息的對(duì)象的組織關(guān)系,強(qiáng)調(diào)對(duì)象之間的合作關(guān)系而不是時(shí)間順序。 -
【目的】用來(lái)顯示不同對(duì)象的關(guān)系。
圖中展示了一個(gè)線上書店的通訊圖,方框和小人表示生命線,不同生命線之間可以傳遞消息,消息前面的數(shù)字可以表達(dá)序列順序。
什么是交互概覽圖?
-
【概念】交互概覽圖與活動(dòng)圖類似,但是它的節(jié)點(diǎn)是交互圖。 -
【目的】提供了控制流的概述。
圖中表示一個(gè)調(diào)度系統(tǒng)的交互概覽圖,跟活動(dòng)圖很像。其中
sd
的框代表具體的交互流程,ref
框代表使用交互。
什么是時(shí)序圖?
-
【概念】時(shí)序圖被用來(lái)顯示隨時(shí)間變化,一個(gè)或多個(gè)元素的值或狀態(tài)的更改。也顯示時(shí)控事件之間的交互和管理它們的時(shí)間和期限約束。 -
【目的】用來(lái)表示元素狀態(tài)或者值隨時(shí)間的變化而變化的視圖。
圖中展示了老年癡呆病人隨著時(shí)間的變化病情的變化。
總結(jié)
學(xué)習(xí)UML,我們沒(méi)必要糾結(jié)比如像聚合關(guān)系是帶箭頭還是不帶箭頭,這樣的問(wèn)題。更重要的是UML圖所給我們帶來(lái)的畫圖思想,讓我們畫UML圖或者其他圖能讓其他人更好的理解我們的設(shè)計(jì)思想。
當(dāng)然,你要是明確知道帶箭頭或者不帶箭頭哪個(gè)是錯(cuò)誤的,歡迎留言告訴我。
參考文獻(xiàn):
[1]:《Learning UML 2.0》
[2]: https://www.uml-diagrams.org/
[3]: https://www.visual-paradigm.com/guide/
[4]: https://sparxsystems.com/resources/tutorials/
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!