de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

類別與物件圖 – 何時使用實例

兩者皆為UML 類別圖 以及UML 物件圖 屬於結構圖,表示它們用來模擬系統的結構。然而,它們的用途根本不同:類別圖定義抽象的藍圖,而物件圖則捕捉某一時刻的具體現實。

了解何時使用每一種圖表,對於有效的物件導向分析與溝通至關重要。

關係與比較的依據

實例化關係:規格到實現

類別圖與物件圖維持著關鍵的實例化關係。類別圖作為抽象規格,定義允許的結構,而物件圖則提供具體實現,並符合這些定義。

  • 類別圖(規格):建立結構、屬性類型、運算,以及所有潛在關聯的多重性規則。
  • 物件圖(實現):展示必須遵循其對應類別所設定規則的特定物件,呈現實際的屬性值以及在特定執行時刻形成的特定連結(關聯的實例)。

因此,物件圖的功能是作為模型符合性驗證工具,用以驗證抽象結構是否符合特定且具體的情境。

比較的依據

需要比較這兩種結構圖的原因在於,區分抽象模型定義與具體實例狀態本身具有固有的困難:

  1. 符號上的語義模糊性: 兩種圖表都使用類似的圖形元素(矩形與線條),造成表面的視覺相似性,可能掩蓋它們語義目的的根本差異(類型定義 vs. 實例資料)。
  2. 範圍的誤用: 設計師經常混淆目的系統定義 (類圖) 與設計驗證 (物件圖),導致效率低下或不正確的文件選擇。
  3. 複雜設計驗證: 這項比較突顯了物件圖在驗證類圖複雜性方面的專門角色,特別是在展示如聚合、組合及多重性限制等複雜關係的可行性與影響。

1. 類圖:抽象藍圖

類圖是UML中最重要的結構圖。它代表定義系統的定義——類別、其屬性、方法,以及它們之間的靜態關係。

它所建模的內容:

  • 類別: 抽象類型,顯示其屬性(資料)與操作(方法)。
  • 關係: 定義潛在 連接,例如關聯(一般連結),泛化(繼承),聚合(擁有關係),以及組合(強所有權)。
  • 多重性: 指定一個類別的實例可以與另一個類別的多少個實例相關聯(例如,$1..*$ 表示一對多)。

何時使用類圖:

類圖在設計與實作階段用於:

  • 定義系統結構: 建立系統的詞彙(也就是類別)。
  • 規劃實作: 作為撰寫物件導向語言(Java、C++、Python 等)程式碼的直接輸入。
  • 模擬業務領域: 建立現實世界實體及其關係的概念地圖(領域模型)。

類比: 類圖就像房子的建築藍圖。它定義了房間數量、尺寸與建材,但房子本身尚未建造完成。

2. 物件圖:具體的快照

物件圖是類圖的一種特殊情況。它專注於實例(物件)及其在系統執行過程中某一特定時刻的具體連結。

它所模擬的內容:

  • 物件:類別的命名實例,以實際的、現實世界的.
    • 符號表示: 名稱以底線標示,格式如下:物件名稱:類別名稱(例如,order123 : Order).
  • 連結:關聯的具體實例,顯示哪個特定物件與另一個特定物件相連。
  • 狀態: 描述快照拍攝時系統的實際資料狀態。

何時使用物件圖:

物件圖用於測試、驗證和說明複雜情境:

  • 說明複雜的多重性:證明多對多關係(在類圖中定義)可以正確實例化。
  • 驗證測試案例:顯示關鍵操作前後物件的精確狀態(例如,證明結帳後購物車為空)。
  • 解釋邊界情況:以視覺方式展示物件的異常配置(例如,一個客戶物件為空的訂單)。

類比: 物件圖就像一張家具齊全且有人居住的實際房屋的照片。它顯示這棟房屋有藍色塗料,棟特定房屋有藍色塗料,棟特定屋頂,以及棟特定的家具配置。

3. 類別與物件:快速比較

特徵 類圖 物件圖
焦點 抽象結構、定義 具體實例、快照
元素 類別、關聯、多重性 物件、連結、屬性值
目的 設計、程式碼產生、領域模型 測試、驗證、情境說明
時間 靜態(適用於所有時間) 動態(適用於某一時刻)
符號 類別名稱與屬性/運算 底線實例名稱與屬性

總結:選擇合適的工具

  • 從類別圖開始: 使用它來定義您的軟體系統的完整結構。這是您的主要藍圖。
  • 使用物件圖進行驗證: 慎用它來呈現特定且關鍵的情境、測試案例或複雜的資料組態,這些內容單單從抽象的類別圖中很難理解。

透過謹慎地使用這兩種圖表,您可以有效地傳達系統靜態結構的潛力現實系統靜態結構的現實。

如需進一步了解 UML 與基於人工智慧的視覺化,請查看我們的UML 資源中心.