設計模式之UML類圖

hfreeman2008發表於2016-08-04

UML簡介

Unified Modeling Language (UML)又稱統一建模語言或標準建模語言。

類:

從上到下分為三部分,分別是類名、屬性和操作,其中類名是必須要有的。
類如果有屬性,則每一個屬性都必須有一個名字,另外還可以有其它的描述資訊,如可見性、資料型別、預設值等。
類如果有操作,則每一個操作也都有一個名字,其它可選的資訊包括可見性、引數的名字、引數型別、引數預設值和操作的返回值的型別等。

下面這個是Hero類的表示:
有一個private屬性name,型別為String,一個public屬性level,型別為int,一個protected屬性blood,型別為float。
有一個public方法setName(String name),一個public方法getName(),一個抽象public方法abstractOperate().

這裡寫圖片描述

介面:

介面有二種表示形式,一種是加interface關鍵字的類,一種是圓圈。
下面表示一個介面Shape,方法為public的draw():

這裡寫圖片描述

類圖關係

1.實現
指的是一個class類實現interface介面(可以是多個)的功能;實現是類與介面之間最常見的關係;在Java中此類關係通過關鍵字implements明確標識,在設計時一般沒有爭議性;

空心三角+虛線:

此例子表示為ShapeA和ShapeB實現介面Shape:

這裡寫圖片描述

2.泛化(繼承)
指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間最常見的關係;在Java中此類關係通過關鍵字extends明確標識,在設計時一般沒有爭議性

空心三角+實線:

此例子表示為子類son繼承父類father:
這裡寫圖片描述

3.關聯
他體現的是兩個類、或者類與介面之間語義級別的一種強依賴關係,比如我和我的朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,一般是長期性的,而且雙方的關係一般是平等的、關聯可以是單向、雙向的;表現在程式碼層面,為被關聯類B以類屬性的形式出現在關聯類A中,也可能是關聯類A引用了一個型別為被關聯類B的全域性變數,換句話說就是成員變數的程式碼體現。

普通箭頭+實線:

此例子表示為A類關聯B類,也就是A類有一個成員變數為B類的引用:
這裡寫圖片描述

4.聚合
聚合是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體物件,也可以為多個整體物件共享;比如計算機與CPU、公司與員工的關係等;表現在程式碼層面,和關聯關係是一致的,只能從語義級別來區分;

普通◇+實線+普通箭頭:

此例子表示為汽車類由輪胎和發動機組成,也就是汽車類由輪胎和發動機聚合而成:
這裡寫圖片描述

5.組合
組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味著部分的生命週期結束;比如你和你的大腦;表現在程式碼層面,和關聯關係是一致的,只能從語義級別來區分;

實心◇+實線+普通箭頭:

此例子表示為人是由大腦和四肢組成:
這裡寫圖片描述

6.依賴
可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、、臨時性的、非常弱的,但是B類的變化會影響到A;比如某人要過河,需要借用一條船,此時人與船之間的關係就是依賴;
表現在程式碼層面,為類B作為引數被類A在某個method方法中使用,區域性變數,方法的引數,靜態方法的呼叫;

虛線+普通箭頭:

此例子表示為A類依賴B類,B類的一個物件在A類的方法operate中作為引數呼叫:
這裡寫圖片描述

各種關係強弱順序:
泛化=實現>組合>聚合>關聯>依賴

參考:
1.UML總結4—UML九種圖關係說明
http://blog.csdn.net/chenyujing1234/article/details/8173519

相關文章