在軟體工程與物件導向設計(OOD)領域中,UML類圖是系統建模的骨幹。它是一種靜態結構圖,透過顯示系統的類、屬性、操作(方法)以及物件之間的複雜關係來描述系統架構。無論您是在建立領域模型還是詳細說明軟體規格,理解類圖對於將概念藍圖轉換為功能代碼至功能代碼至關重要。

理解類的結構
圖表的核心是類,它作為物件的藍圖。雖然物件是可使用的實例,包含資料與行為,而類則定義了這些物件的規則。在UML符號中,類以被分成三個特定區段的矩形來表示:
- 類名:位於第一(頂部)區段。這是必填項目。抽象類通常以斜體字書寫。
- 屬性:位於第二區段。這些代表類的狀態或結構特徵(成員變數)。
- 操作(方法):位於第三區段。這些定義了類所提供的行為特徵或服務。
可見性和存取控制
為了定義封裝,UML 在屬性和操作名稱前使用特定符號來表示可見性。這決定了哪些其他類可以存取這些成員。

| 符號 |
可見性類型 |
描述 |
| + |
公開 |
任何其他類均可存取。 |
| – |
僅可在類本身內存取。 |
僅可在類本身內存取。 |
| # |
可由類及其子類(衍生類)存取。 |
可由類及其子類(衍生類)存取。 |
| ~ |
可由同一套件中的任何類存取。 |
可由同一套件中的任何類存取。 |
解讀類別關係
UML 類圖的威力在於它如何呈現類別之間的互動正如程式實作依賴邏輯,UML 依賴特定的連接器來傳達意圖。以下是主要的關係類型:

1. 繼承(泛化)
繼承代表一種「是」關係。這是一種分類關係,其中特定的分類器(子類)從一般的分類器(父類)繼承特性。例如,一個圓形是一種形狀.
- 符號: 一條實線,箭頭頭為空心,從子類指向父類。
- 用法: 透過在超類中引入共通性,用以簡化分析模型。
2. 關聯
這是在同級類之間的結構性連結,通常以動詞描述(例如「教師教授學生」)。它表示兩個類相關,但會產生鬆散耦合。
- 符號: 一條實線連接兩個類。
- 多重性: 表示有多少個物件參與(例如
1, 0..1, 1..*).
3. 聚合
聚合是一種特殊的關聯,表示「部分-整體」關係。然而,它暗示了一種較弱的所有權。部分可以獨立於整體而存在。例如,一個汽車擁有輪胎,但如果汽車被摧毀,輪胎仍然可以存在。
- 符號表示:一條實線,末端連接一個空心菱形,連接到聚合(父類)類別。
4. 組合
組合是聚合的一種更嚴格形式。它表示強所有權,其中部分無法獨立存在 沒有整體。如果父物件被銷毀,子物件也會被銷毀。一個例子是房屋 和它的房間.
- 符號表示: 一條實線,末端帶有實心菱形 連接到組合(父類)類別。
5. 依賴
這代表一種「使用」關係。當一個類別在方法參數或區域變數中與另一個類別互動時,就會存在這種關係,而不是作為欄位。供應者類別的定義變更可能會影響客戶類別。
- 符號表示: 一條虛線,末端帶有開口箭頭,指向依賴關係。

有效類圖的指南
建立清晰且準確的圖表,需要遵守特定的指南。
- 使用標準命名慣例: 類別名稱應為名詞(例如客戶, 訂單),通常以大寫字母表示。關聯名稱應為動詞(例如,放置, 包含).
- 識別視角: 畫圖之前,請決定您要建模的是概念 視圖(領域概念),一個規格 視圖(介面),或一個實作 視圖(特定程式碼)。
- 管理複雜性: 不要試圖在單一圖表中建模整個系統。將系統劃分為多個圖表,專注於特定模組或業務領域。
- 明確標示多重性: 始終明確說明關係是一對一、一對多,還是多對多,以確保資料庫或程式碼邏輯能反映業務需求。
實際範例:訂單處理系統
考慮一個標準的電子商務情境,涉及客戶、訂單和產品。以下是這些關係如何轉化為類圖結構:
- 客戶與訂單(關聯): 一位客戶 下訂單 一筆訂單。多重性為
1 客戶對0..* 訂單。
- 訂單與明細項目(組成): 訂單由明細項目組成。如果刪除訂單,明細項目將失去意義並被銷毀。這是一個指向訂單的實心菱形。
- 明細項目與產品(關聯/聚合): 明細項目指向一個產品。然而,產品獨立於明細項目存在(它會留在庫存中)。這是一種標準關聯或弱聚合。
- 付款(實作): 一個命名為IPayment 的介面可能由類別實作信用卡付款 和 PayPal付款.
優化技巧與提示
應用這些技巧,將您的圖表從簡單的繪圖提升為專業的技術作品:
- 「朗讀測試」: 將您的關係朗讀出來。「汽車由輪子組成。」如果聽起來不自然,請檢查您是否使用了正確的箭頭方向或關係類型。
- 參數方向性: 在操作區段中,您可以使用
in, out,或 inout 在參數名稱之前,以明確資料流。
- 抽象斜體: 如果一個類別無法直接實例化(它是抽象的),請確保其名稱以斜體顯示。這是一個微妙但至關重要的開發者信號。
- 避免線條交叉: 雖然現代工具如 Visual Paradigm 妥善處理路由,盡量手動排列類別以減少線路交叉,這能顯著提升可讀性。
類別圖審核清單
在最終確定您的UML類別圖之前,請透過此可執行的清單進行檢核:
- [ ] 完整性: 該模組所需的必要類別是否都已存在?
- [ ] 可見性: 屬性和操作是否使用正確的可見性符號標示(+、-、#)?
- [ ] 關係準確性: 您是否正確區分了聚合(空心菱形)與組合(實心菱形)?
- [ ] 多重性: 關聯的兩端是否都定義了基數(例如 1..*)?
- [ ] 可導航性: 箭頭是否清楚標示出哪個類別可以存取另一個類別?
- [ ] 命名: 類別名稱是否為名詞且唯一?關係動詞是否清晰?
- [ ] 一般化: 繼承層次是否合理(Is-A關係)?