簡單理解 UML 類別圖

Sunny Cheng
Feb 22, 2021

Class Diagram

在物件導向的實作中,UML 類別圖可幫助釐清各類別的描述、擁有的屬性、可使用的方法與各物件間的相互關聯,能清楚表示實作的 Design Pattern。

因目前嘗試閱讀第三方套件的設計模式以及準備產出技術文件,網路上有相當多的說明資源,所以將閱讀的多方資料統整做個筆記,只概括常見的用法。若有理解錯誤的地方,歡迎留言告知~

描述類別

類別範例

三個區域由上而下分別代表

  1. Name — 必填的名稱(粗體置中且首字大寫,若表示抽象類別則使用斜體)
  2. Attributes — 屬性,冒號後表示型別(置左且首字小寫)
  3. 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 後,指示哪些類別會負責實作它。
Boxer 要實作 Boxing 定義的技能

實體間的關係(使用與擁有)

  • 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 的關聯符合其他關聯定義,則使用其他關聯表示較為妥當。
居住地址與住戶有所關聯

SDWebImage Class Diagram

--

--

Sunny Cheng

礦冶工程碩士,職涯第一個轉彎為新加坡市場的業務經理,自學後又轉彎成 OTT 產業的 iOS 工程師。