全面的UML類圖教程:透過範例掌握物件導向設計

🎯 UML類圖入門

UML(統一建模語言)類圖是物件導向軟體設計的基石。它是一種靜態結構圖,可視化地呈現系統的系統結構,透過建模:

Class Diagram Example: Order System

  • 類別

  • 屬性(狀態)

  • 操作(方法)

  • 類別之間的關係

本指南將帶您了解每個重要概念、符號與實用範例——從基本的類別結構到複雜的關係,例如組合與依賴關係——並搭配清晰的說明與現實世界的範例。


✅ 1. 什麼是類別?

一個類別是用來建立物件的藍圖範本,用來建立物件。它定義了該類別物件所具備的資料(屬性)行為(方法),這些物件將具備的特性。

🔹 物件 = 一個 實例 類別的
🔹 類別 = 定義; 不是 物件本身

🐶 範例:狗類別

概念 描述
類別名稱
屬性 名稱:字串顏色:字串品種:字串
操作 吠叫():void搖尾巴():void吃():void

💡 每一個  物件(例如, 夥伴麥克斯) 是根據此藍圖建立的,具有相同的結構但不同的值。


🧩 2. UML 類別符號

UML 中的類別被分為三個區塊:


🔹 語法規則

  • 名稱:置中、粗體、第一個字母大寫。

  • 屬性名稱:類型— 例如年齡:整數

  • 運算運算名稱(參數):傳回類型— 例如取得年齡():整數

🔹 可見性符號

符號 意義 描述
+ 公開 隨時隨地可存取
- 私有 僅限於類別內部
# 受保護 在類別及子類別中

🔹 範例:人員類別


✅ 在程式碼中:這對應到一個public class Person具有私有欄位和公開的存取器/設定器。


🔍 3. 類別圖的觀點

細節層級與關注重點取決於開發階段以及模型的目的模型的用途。

觀點 焦點 何時使用
概念性 領域概念(例如:「顧客」、「訂單」) 早期階段 – 領域建模
規格 介面、抽象類型、合約 分析階段 – 定義系統的功能
實作 具體類別、方法細節、資料類型 設計與編碼階段 – 如何構建

📌 小技巧:從 開始概念性,逐步演變為 實現在設計過程中逐步完成。


🔗 4. 類別之間的關係

UML 支援 五種核心關係 用來定義類別之間如何互動。理解這些關係可確保你的設計反映現實世界的邏輯。


🔹 1. 繼承(泛化)

「是-一種」關係

代表 繼承,其中子類別從父類別繼承行為與屬性。

  • 箭頭:空心三角形(指向父類別)

  • 抽象類別:斜體名稱(例如 Shape)

  • 子類別 更為具體(例如 CircleRectangle)

✅ 範例:形狀層次結構

💬 圓形 是一種 形狀。它繼承了draw()以及顏色.

🧠 使用案例:多型性 — 呼叫draw()在不知道其類型的情況下,對任何形狀進行呼叫。


🔹 2. 關聯

「擁有」關係 — 兩個類別之間的結構性連結。

  • 以一條實線連接兩個類別。

  • 通常以動詞命名(例如管理擁有互動).

  • 可以是雙向的單向.

✅ 範例:學生與課程

🔄 雙向:A 學生註冊了 課程,且一個 課程有許多 學生.

📌 注意:關聯在每一端都可以具有 多重性(基數)在每一端。


🔹 3. 聚合

「部分-整體」關係 — 權屬關係較弱

  • 代表 鬆散耦合 — 部分可以獨立於整體存在。

  • 空心菱形(空心)位於 整體 端。

✅ 範例:大學與系所

🟨 未填滿的菱形 在 大學 側邊 → 系所 可以獨立存在而不依賴 大學.

🧩 如果大學關閉,系所可能會遷往其他地方。


🔹 4. 組成

「整體-部分」關係 — 強烈的所有權

  • 該 部分無法獨立存在 整體的。

  • 填滿的菱形 (實心)位於 整體 端點。

  • 當整體被摧毀時,部分也會一同被摧毀。

✅ 範例:房屋與房間

🔴 填滿的菱形 在 房屋 → 房間 當 房屋被拆除。

🛠️ 用於組合模式——例如一個文件包含段落圖片等等


🔹 5. 依賴

「使用」關係——暫時或間接使用

  • 虛線搭配開口箭頭從依賴方指向供應方。

  • 當一個類別使用在方法中使用另一個類別(例如作為參數、傳回值或區域變數)。

  • 未儲存為欄位 →無長期關係.

✅ 範例:Person 和 Book

📌 Person使用Book暫時 在 hasRead() 方法 — 不作為欄位儲存。

✅ 這是一個 依賴,不是關聯。


🔹 6. 實作(介面實作)

「實作」關係

  • 連接一個 介面 至一個 類別 實作它的類別。

  • 虛線搭配開放三角形 指向介面。

✅ 範例:Owner 介面與 Person

✅ Person 實作 這個 Owner 介面 → 必須實作 acquire() 以及 dispose().

💡 這不是 不是 繼承 — 而是 介面實現.

🔄 多個類別可以實現相同的介面(例如 公司 也實現了 所有者).


🧱 5. 類圖範例:訂單系統

讓我們設計一個簡單的 訂單管理系統 使用 UML。

📌 涉及的實體:

  • 顧客

  • 訂單

  • 訂單項目

  • 產品

  • 付款

🎯 設計目標:

  • 一個 顧客 下一個或多個 訂單.

  • 每個 訂單 包含多個 訂單項目.

  • 每個 訂單項目指的是產品.

  • 每個訂單有一個付款.

🖼️ UML 類別圖(文字表示)


📌 關係:

  • 關聯客戶 → 訂單(一對多)

  • 組合訂單 → 訂單項目(整體-部分)

  • 聚合訂單 → 付款(可獨立存在)

  • 關聯訂單項目 → 產品 (多對一)

✅ 此模型支援:

  • 建立訂單

  • 新增項目

  • 計算總金額

  • 處理付款


🖼️ 6. 類圖範例:GUI 應用程式(MVC 模式)

讓我們建立一個 簡單的 GUI 登入表單 使用 MVC(模型-視圖-控制器) 架構。

📌 元件:

  • 登入控制器 (處理邏輯)

  • 登入檢視 (顯示使用者介面)

  • 使用者模型 (儲存使用者資料)

🎯 關係:

  • 登入控制器 使用 登入檢視 來顯示資料。

  • 登入控制器 使用 UserModel 用於檢索/儲存使用者資訊。

  • LoginView 顯示來自 UserModel.

🖼️ UML 類別圖(文字)


🔗 關係:

  • 依賴LoginController → LoginView (在方法中使用)

  • 依賴LoginController → UserModel (在方法中使用)

  • 關聯LoginController 擁有對 LoginView 和 UserModel (作為欄位)

✅ 這反映了 MVC: 控制器在檢視和模型之間進行協調。


🛠️ 7. 創建UML類圖的工具

✅ Visual Paradigm 社區版(免費且強大)

  • 支援所有UML圖表

  • 直覺的拖放介面

  • AI驅動的協助以加快學習與設計

 

 

🚀 立即試用:下載 Visual Paradigm CE

🔧 AI 驅動功能

工具 使用案例
AI 類圖精靈 透過 AI 建議逐步建立類別
使用案例工作室 從使用案例描述中提取類別與關係
Agilien 從敏捷使用者故事生成類圖
DB Modeler AI 將類圖轉換為資料庫結構
MVC 架構 為網頁應用程式生成控制器與檢視圖

🎓 總結:重點概念一覽

概念 符號 含義 範例
類別 類別 物件的藍圖 顧客產品
繼承 空心三角形 「是-一種」  → 動物
關聯 實線 「有-一個」 顧客 → 訂單
聚合 空心菱形 「部分-整體」(弱) 大學 → 系所
組成 實心菱形 「整體-部分」(強) 房屋 → 房間
依賴 虛線 + 箭頭 「使用」 人物 → 書籍
實現 虛線 + 三角形 「實作」 人物 → 所有者

🧠 成功最終建議

  1. 從簡單開始:在深入實作之前,先從概念模型開始。

  2. 使用有意義的名稱客戶訂單付款 — 不是 物件1物件2.

  3. 在可見性方面保持一致: 使用 + 表示公開, - 表示私有, # 表示受保護。

  4. 使用 AI 工具 以驗證並從描述中自動生成圖表。

  5. 仔細審查關係: 問題:「這個部分能否在沒有整體的情況下存在?」→ 如果不能 → 組成.


📚 相關連結與資源


✅ 現在輪到你了!

🧩 挑戰: 繪製一個 UML 類圖,針對一個圖書館管理系統,包含:

  • 書籍會員借閱圖書館員

  • 使用組合借閱書籍

  • 使用聚合圖書館員圖書館

  • 使用相依性用於圖書館員 → 書籍(檢查可用性時)

💬 使用Visual Paradigm CE或任何UML工具來草圖繪製!


🎁 加碼:用AI更快掌握UML

🧠 使用AI立即產生、驗證並解釋您的類別圖。
無論你是學生、開發人員或架構師——AI讓學習UML更快、更簡單,也更直覺。

🔗 從今天開始,打造您的第一個AI輔助類別圖!


🌟 現在您已具備使用UML類別圖設計乾淨、專業且可維護的物件導向系統所需的一切。
持續練習、持續設計,並持續編碼!


✅ 愉快的建模! 🎨💻
— 您通往UML精通之路,從此開始