類別圖是一種 UML (Unified Modeling Language) 中的靜態結構圖,主要用於呈現系統中的類別的靜態結構。類別圖中包含了該系統的類別、類別的屬性與方法以及類別的交互關係等資訊,能夠快速地展現一個系統的樣貌,協助開發人員進行分析與設計。
上圖是一張非常簡易的交通工具類別圖,圖中包含交通工具類別、汽車類別以及飛行器類別。從圖中可以看出汽車類別和飛行器類別都繼承自交通工具類別,交通工具類別負責提供交通工具的通用屬性與方法,汽車類別與飛行器類別則擁有特定的屬性與行為。
接著來看看類別圖中包含哪些元素:
一個類別包含名稱、屬性與方法。
可見性 (Visibility)
類別圖使用以下四種符號來標註類別成員如何被存取。
+
- 公開:可供任何人存取-
- 私有:只供該類別存取#
- 保護:可供類別與子類別存取~
- 套件:可供套件中的類別存取類別圖使用關係線來表示類別與類別之間的關係。
關聯 (Association)
表示一個類別持有另一個類別的參照,能夠存取另一類別的屬性與方法。兩個類別可以動態地建立、解除關聯關係,一個物件可以同時與多個對象建立關聯。
依賴 (Dependency)
依賴關係是一種使用關係,當 A 類別使用 B 類別時,我們稱 A 類別依賴於 B 類別。與其他關係不同,依賴關係不涉及控制或持有等行為,但是 B 類別的改變可能會連帶使 A 類別發生改變。
繼承 (Inheritance)
以既有類別為基礎建立一個新類別。新類別為基礎類別的子類別,繼承了基礎類別的屬性與方法,還能擴展或複寫基礎類別的屬性與方法。
實現 (Implementation)
表示類別滿足了介面的定義,實現了介面中的屬性與方法。
聚合 (Aggregation)
表示整體與部分的關係。部分類別是獨立的個體,可以在不依賴於整體類別的情況下存在,並能同時屬於多個整體對象。
組成 (Composition)
表示整體與部分的關係,是聚合關係的強化版。整體類別控制部分類別的生命週期,負責創造和銷毀部分類別。部分類別無法獨立於整體類別存在,當整體類別銷毀時,部分類別的生命週期也隨之結束。
類別圖能夠清楚地呈現系統中的元素,因此非常適合用來展示軟體架構。本系列會在每個設計模式的章節中提供相關的類別圖,讓讀者更加清楚地了解這些模式的組成與定義。