本章介紹 UML 的物件圖(Object Diagrams)——系統在某一瞬間的記憶體快照。物件圖在特定場景下非常有表達力,但在日常設計中很少需要用到。

時間中的快照#

物件圖與類別圖的關鍵差異:

  • 類別圖描述的是類別之間的靜態結構——繼承、關聯、介面實作
  • 物件圖描述的是特定時間點物件實例之間的實際參考關係

平面圖範例#

Figure 16.1: Floor plan

以一棟建築物的平面圖為例:類別圖可能顯示 Building 包含多個 Room,而 Room 之間透過 Door 相連。但這張類別圖無法告訴你實際的房間配置——哪扇門連接哪兩個房間、走廊如何串連各個空間。物件圖則能精確呈現這些執行期的具體關係。

技巧: 當系統的結構是動態建構的時候,物件圖特別有用。例如物件之間的組合關係在執行期才確定的場景,類別圖只能告訴你「可能有哪些關係」,物件圖才能告訴你「實際上是什麼關係」。

活躍物件(Active Objects)#

在 UML 中,活躍物件(Active Object)以粗邊框表示,代表該物件擁有自己的執行緒(Thread)。

SocketServer 範例#

Figure 16.4: SocketServer object diagram

SocketServer 為例:類別圖可能只顯示 SocketServerSocketService 之間的關聯。但物件圖能清楚呈現執行期的真實面貌——一個 SocketServer 實例擁有多個 SocketService 實例,每個 SocketService 運行在獨立的執行緒中,並且各自持有一個 Socket 連線。

重點: 物件圖在此案例中比類別圖更具表達力,因為它揭示了執行緒結構與物件之間的實際連接方式——這些資訊在類別圖中是看不到的。

使用時機#

  • 偶爾使用:物件圖在大多數設計討論中並不需要
  • 動態結構:當系統的物件關係在執行期才確定時最有用
  • 解釋執行期行為:向團隊展示「系統在特定情境下長什麼樣子」

補充: 物件圖的使用頻率遠低於類別圖和序列圖。不要養成習慣性繪製物件圖的慣例,只在它真正能幫助溝通時才使用。