本章是 UML 快速入門,為 C# 程式設計師介紹最常用的 UML 圖型。重點不在窮盡 UML 所有細節,而是讓讀者能在白板上畫出足以溝通設計想法的基本圖形。

重點: UML 有三種使用層次:概念層級(Conceptual)、規格層級(Specification)與實作層級(Implementation)。本書主要在規格與實作層級使用 UML——也就是直接對應到程式碼的層級。

類別圖(Class Diagrams)#

類別圖是 UML 中最常見的圖型,用來描述系統中類別之間的靜態關係。

  • 矩形代表類別,可分為三個區間:類別名稱、屬性、方法
  • 箭頭表示關聯(Association):一個類別持有另一個類別的參考
  • 三角箭頭表示繼承(Inheritance):箭頭指向父類別

Figure 13.1: Conceptual UML diagram

Figure 13.2: Class diagram of treeMap

TreeMap 為例,類別圖可以清楚呈現 TreeMap 實作了哪些介面、內含哪些節點類別,以及這些類別之間的繼承與組合關係。

物件圖(Object Diagrams)#

物件圖是系統在某一時刻的記憶體快照,顯示的是物件實例而非類別定義。

  • 物件名稱以底線標示,格式為 物件名:類別名
  • 物件之間的連線稱為 link,代表實際的參考關係

Figure 13.3: treeMap object diagram

技巧: 物件圖特別適合用在系統的執行期結構是動態建構的場景——當類別圖無法充分表達物件之間的實際關係時,物件圖能補足這個缺口。

序列圖(Sequence Diagrams)#

序列圖用來描述一組物件之間的訊息傳遞順序,呈現方法呼叫的時間流程。

  • 生命線(Lifeline):從物件向下延伸的虛線,代表物件的存在時間
  • 訊息(Message):物件之間的水平箭頭,對應方法呼叫
  • 啟動框(Activation):生命線上的窄長方形,表示方法正在執行

Figure 13.4: treeMap.add

序列圖可以清楚呈現 TreeMap.Add 方法的內部流程——先取得根節點的 topNode,然後呼叫節點的 Add 方法。

協作圖(Collaboration Diagrams)#

協作圖與序列圖呈現相同的資訊,但強調的是物件之間的關係結構而非時間順序。

  • 訊息以編號標示呼叫順序
  • 物件之間的連線同時顯示關聯方向與訊息名稱

Figure 13.5: Collaboration diagram of one case of treeMap.Add

補充: 實務上,序列圖比協作圖更常被使用。兩者的選擇取決於你想強調「時間流程」還是「物件關係」。

狀態圖(State Diagrams)#

狀態圖使用有限狀態機(Finite State Machine, FSM)的符號來描述系統的行為。

  • 圓角矩形代表狀態(State)
  • 箭頭代表轉換(Transition),標示觸發事件與相應動作
  • 格式為 event / action

Figure 13.6: State machine of a subway turnstile

以地鐵旋轉門為例:投幣(coin)事件觸發解鎖(unlock)動作,從 Locked 狀態轉換到 Unlocked 狀態;通過(pass)事件觸發上鎖(lock)動作,回到 Locked 狀態。

本章小結#

本章涵蓋了 UML 中對 C# 程式設計師最實用的五種圖型。這些基礎知識已足以應付絕大多數的設計溝通需求。後續章節將分別深入探討每一種圖型的細節與使用時機。

注意: 不要試圖學習 UML 的所有符號與細節。UML 是一個龐大的語言,但日常開發中真正需要用到的只是其中很小的子集。學會基礎就好,其餘的等到真正需要時再查閱。