UML(Unified Modeling Language)是建構模式(model)的專用語言。
在編寫程式碼前,開發人員會先經過分析設計的思考,並繪製一些圖形,再搭配一些文字,作為分析設計的產出,這份產出可稱之為軟體模式模型。
UML推出了十多款圖,不過並非每款圖都實用,在開發商用資訊系統時,最常用到的UML圖,包含有: 類別圖、循序圖、使用案例圖、狀態圖(state machine diagram)和活動圖(activity diagram)。
類別圖(class diagram)是最重要的UML圖。
主要功能:
用來呈現系統內部的靜態結構,而這樣的靜態結構通常可以用直接對應程式碼,因此,從程式設計師的角度來看,類別圖是最被關注的UML圖。
類別圖描述了系統的類別集合,類別的屬性和類別之間的關係。
矩形代表類別(class)、類別內部記載屬性(attribute)與操作(operation)。
類別之間有代表結合關係(association relationship)的實線、組合關係(composition relationship)的實心菱形實線、一般化關係(generalization relationship)的三角形實線。
類別圖符號分成兩種:
物件本身
+ : public
- : private
# : protected
物件間的關係
association relationship 結合關係
# 使一個類別知道另一個類別屬性和方法。 // 通常含有「知道」、「了解」的含義。
(A knows B)
dependency relationship 依賴關係
# 指在參數或回傳時有用到
(A uses B)
Implementation relationship 實作關係
# 指的是一個 class 類別實現 interface 介面
(A implements B)
generalization relationship 一般化關係
# 指的是父類別擁有子類別的共用功能,子類別可以視作父類別的特例。
# 描述 is-a 關係。
(A is a type of B)
aggregation relationship 聚合關係
# 整體與部分的「弱」包含關係,部分類別可以單獨存在,也可以屬於多個整體物件。
# 描述 has-a 關係。
(A owns B)
composition relationship 組合關係
# 整體與部分的「強」包含關係,部分類別無法單獨存在,其生命週期與整體相同。
# 描述 contains-a 關係。
(B is part of A)
多重性(Multiplicity)
| 指示符 | 意思 |
| ------ | ------- |
| 0...1 | 0 or 1 |
| 1 | 1 |
| 0...* | 0 or 多 |
| 1...* | 1 or 多 |
| * | 多 |
循序圖(sequence diagram)將類別圖部分更細節。
主要功能:
呈現類別圖操作之實作方法。
在類別圖中,未能提出操作之實作方法,這部分的細節設計,可藉由循序圖來呈現。雖然,我們可以從類別圖對應到程式中的類別、屬性、關係及操作之宣告,但也僅止於此,對於操作的實作方法,還要搭配循序圖才能獲得。
除了表達實作方法外,更重要的是,循序圖還能夠表達執行期間的一群物件,為了合力完成某一個目的,呼叫操作之互動情況。
![image sequence diagram][reference link]
使用案例圖(use case diagram)是最與眾不同的UML圖。
主要功能:
獨特之處在於它適合用來表達系統的「外部」行為,其餘的UML圖都適用於呈現系統內部結構或行為。其餘的UML圖都是用於呈現系統的「內部」結構或行為。
橢圓形的使用案例圖示位於系統內部,代表系統將提供且支援這些使用案例,而參與者位於系統外部,代表使用案例的啟動者或支援者。
![image use case diagram][reference link]
狀態圖(state machine diagram)
主要功能:
狀態圖可以讓我們聚焦在單一種類的物件本身,表達物件一生中可以出現的狀態(state)變化。
相較之下,狀態圖的觀點與循序圖的觀點全然不同,循序圖表達某一種物件與其他種物件之間的互動情況。
簡而言之,循序圖用以表達物件外部互動行為,而狀態圖表達物件內部的狀態變化。
![image use case diagram][reference link]
活動圖(activity diagram)
主要功能:
活動圖非常適合用來表達一連串的行動。
活動圖相當容易理解與使用,它跟我們隨手繪製的流程圖沒什麼不同,唯一需要講究的只有它特定的圖示。
橢圓形的使用案例圖示位於系統內部,代表系統將提供且支援這些使用案例,而參與者位於系統外部,代表使用案例的啟動者或支援者。
![image use case diagram][reference link]