簡單理解 UML 類別圖
Feb 22, 2021
Class Diagram
在物件導向的實作中,UML 類別圖可幫助釐清各類別的描述、擁有的屬性、可使用的方法與各物件間的相互關聯,能清楚表示實作的 Design Pattern。
因目前嘗試閱讀第三方套件的設計模式以及準備產出技術文件,網路上有相當多的說明資源,所以將閱讀的多方資料統整做個筆記,只概括常見的用法。若有理解錯誤的地方,歡迎留言告知~
描述類別
三個區域由上而下分別代表
- Name — 必填的名稱(粗體置中且首字大寫,若表示抽象類別則使用斜體)
- Attributes — 屬性,冒號後表示型別(置左且首字小寫)
- Methods— 方法,冒號後表示回傳值(置左且首字小寫)
其中屬性與方法可以在前面加上前綴符號,表示其封裝層級
+ Public, 公共
- Private, 私有
# Protected, 保護(即對子類可見)
~ Package, 包(即對包內的其他成員可見)
/ Derived, 推導(即由其他屬性推導得出,不需要直接給定其值)
加底線 Static, 靜態(其屬性對任何實體來說都是相同的)Wiki說明
描述關係
在描述關係上,可分成兩個部分
- 描述類別間的關係:Inheritance / Implementation
- 描述實體間的關係:Aggregation / Composition / Dependency / Association
類別間的關係(擴展與實施)
- Inheritance:A 繼承自 B(A is a type of B),也就是說 A 根據 B 的特性再擴展。常見描述子類別基於父類別又額外擴充了什麼功能。
- Implementation:A 實行 B 所定義的方法,B 為介面(A implements B)。常見定義 protocol 後,指示哪些類別會負責實作它。
實體間的關係(使用與擁有)
- Aggregation:A 擁有 B,但為弱擁有,A 與 B 有各自的生命週期。常見用來描述 A 類別擁有 B 的實體,A 與 B 彼此協作,但又可各自單獨存在。
- Composition:B 為 A 的一部分,若 A 消失則 B 也不會繼續存在。用來描述強烈的相依關係,A 與 B 同時存在也同時消滅。
- Dependency:A 使用 B,B 的變化有可能會影響到 A。常見描述 A 在使用某些方法時,會將 B 作為參數傳入,但並不持有 B。
- Association:A 與 B 有直接關聯,是個通用定義,若 A 與 B 的關聯符合其他關聯定義,則使用其他關聯表示較為妥當。