UML 實務手冊

認識UML

統一建模語言

UML(Unified Modeling Language)是建構模式(model)的專用語言。
在編寫程式碼前,開發人員會先經過分析設計的思考,並繪製一些圖形,再搭配一些文字,作為分析設計的產出,這份產出可稱之為軟體模式模型。

UML 圖

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 多 |
    ​​​​​​  | *      | 多      |
    

image class diagram

循序圖

循序圖(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]

UML 工具

StarUML

IBM RSA

Case Complete