本教學提供對UML的深入比較物件圖與類圖著重於物件圖如何在執行時期捕捉系統狀態,與類圖所提供的靜態結構進行對比。內容包含詳細說明與多個範例,協助讀者理解兩種圖表類型及其實際應用。
1. UML圖表簡介
統一模型語言(UML)是一種標準化的方式,用以視覺化系統的設計與行為。在其圖表類型中,類圖與物件圖對於建模物件導向系統至關重要,但各自具有不同的用途:
- 類圖描述系統的靜態結構,定義類別、其屬性、方法與關係。
- 物件圖捕捉系統在執行時期的動態狀態,顯示特定執行時刻的實體物件及其關係。
本教學探討物件圖如何反映執行時期的狀態,與類圖所呈現的永恆且結構性的觀點進行比較,並搭配實際範例。
2. 類圖:靜態藍圖
目的與結構
類圖是物件導向設計的骨幹,提供系統架構的靜態觀點,定義:
- 類別:物件的範本,指定屬性(資料)與方法(行為)。
- 關係: 類別之間的關聯、聚合、組合、泛化與依賴關係。
- 約束條件: 管理系統結構的規則或條件。
類別圖是永恆的,表示它們在不參考執行過程中特定時刻的情況下,呈現系統的設計。它們用於系統設計、實作規劃與程式碼產生。
關鍵元素
- 類別: 以具有三個區段(名稱、屬性、方法)的矩形表示。
- 屬性: 類別的屬性或資料欄位(例如:name: String)。
- 方法: 類別可執行的操作或行為(例如:calculateTotal(): double)。
- 關係:
- 關聯: 類別之間的一般性連結(實線)。
- 聚合: 一種「擁有」關係(空菱形)。
- 組合: 一種更強的「擁有」關係(實心菱形)。
- 泛化: 繼承或「是」關係(帶空三角箭頭的箭頭)。
- 依賴: 一種較弱的關係,其中一個類別依賴於另一個類別(虛線)。
範例情境
類別圖非常適合用於:
- 設計軟體系統的架構。
- 向開發人員或利害關係人傳達系統結構。
- 在物件導向程式設計中產生程式碼骨架。
3. 物件圖:執行時快照
目的與結構
物件圖提供一個系統在執行期間特定時刻的快照,顯示實例化的物件、其屬性值以及它們之間的關係(連結)。它們是動態的,捕捉特定情境或使用案例中系統的狀態。
物件圖源自類別圖,因為物件是類別的實例,而連結是類別圖中定義的關聯的實例。
主要元素
- 物件:以矩形表示,格式為物件名稱:類別名稱,顯示特定的屬性值。
- 連結:物件之間的連接,代表類別圖中關聯的實例。
- 屬性值:物件在特定時間的屬性具體值(例如,價格 = 99.99)。
- 多重性:表示關係中涉及多少物件(例如,一對多)。
範例情境
物件圖適用於:
- 在特定使用案例或測試情境中,視覺化物件的狀態。
- 用於除錯,以了解執行時物件之間的互動。
- 驗證系統行為是否符合需求。
4. 物件圖與類別圖之間的主要差異
| 面向 |
類別圖 |
物件圖 |
| 目的 |
定義類別的靜態結構與關係。 |
顯示執行時物件及其關係的快照。 |
| 焦點 |
抽象類別及其潛在關係。 |
具體實例(物件)及其目前狀態。 |
| 時間觀點 |
超越時間,代表系統的設計。 |
時間性,捕捉執行過程中的特定時刻。 |
| 內容 |
屬性、方法以及關係(關聯、泛化)。 |
具有特定屬性值和連結的物件。 |
| 使用案例 |
系統設計、架構與程式碼產生。 |
除錯、情境驗證與執行時期狀態分析。 |
| 範例 |
一個具有 model 等屬性與 drive() 等方法的 Car 類別。 |
一個 myCar: Car 物件,其 model = “Toyota”,並連結至一個 myEngine: Engine 物件。 |
5. 實際範例
以下是三個詳細範例,比較不同系統的類別圖與物件圖。
範例 1:線上購物系統
情境
一個線上購物系統包含顧客、訂單與商品。類別圖定義結構,而物件圖則顯示顧客在結帳時的訂單。
類別圖
說明:類別圖定義:
- Customer 具有屬性與下訂單的方法。
- Order 具有屬性與計算總額的方法。
- Product 具有屬性與取得價格的方法。
- 關係:顧客可下多筆訂單(一對多),而訂單包含多項商品(一對多)。
物件圖
說明:物件圖顯示:
- 一位特定的顧客(john: Customer),具有具體的屬性值。
- 約翰下的一個特定訂單(order123:訂單),總金額為149.98美元。
- 訂單中包含兩種產品(筆記型電腦和滑鼠),並附有各自的價格。
- 顯示執行時期關係的連結(例如:約翰下訂單order123,該訂單包含筆記型電腦和滑鼠)。
範例 2:圖書館管理系統
情境
圖書館系統管理書籍、會員與借閱。類別圖描述其結構,而物件圖則顯示一位會員借閱書籍的情況。
類別圖
說明:類別圖定義:
- 會員具有屬性和借書的方法。
- 書籍具有屬性和檢查可借性的方法。
- 借閱具有屬性和延長借閱的方法。
- 關係:一位會員可以有多筆借閱,而一本書可以在多筆借閱中被借出。
物件圖
說明:物件圖顯示:
- 一位特定會員(alice:會員),具有具體的屬性值。
- 一筆特定借閱(loan001:借閱),包含借閱與歸還日期。
- 一本特定書籍(book1:書籍),為愛麗絲所借閱。
- 顯示執行時期狀態的連結(例如:愛麗絲透過 loan001 借閱 book1)。
範例 3:汽車經銷系統
情境
汽車經銷系統管理汽車、引擎與車輪。類別圖定義其結構,而物件圖則顯示特定汽車的配置。
類別圖

說明:類別圖定義:
- 汽車具有屬性和啟動引擎的方法。
- 引擎具有屬性和點火的方法。
- 車輪具有屬性和旋轉的方法。
- 關係:汽車包含一個引擎(組合)與四個車輪(組合)。
物件圖
說明:物件圖顯示:
- 一輛特定的汽車(myCar: Car),型號為「豐田凱美瑞」,年份為2023年。
- 一具特定的引擎(engine1: Engine),類型為V6。
- 四個特定的輪胎(wheel1 至 wheel4),尺寸為17。
- 連結顯示執行時期的組成(例如,myCar 包含 engine1 和四個輪胎)。
6. 各圖示的使用時機
使用類別圖的情況:
- 設計系統的架構或結構。
- 向開發人員或利害關係人傳達系統的藍圖。
- 產生程式碼骨架或資料庫結構。
- 定義物件的可重用範本。
使用物件圖的情況:
- 除錯時,用以理解執行時期的物件狀態與互動。
- 驗證特定情境或使用案例(例如,測試結帳流程)。
- 說明物件在特定情境下如何協作。
- 向非技術性利害關係人教學或解釋執行時期的行為。
7. 總結
- 類別圖提供一種靜態、抽象的視圖用以描述系統的類別、屬性、方法與關係。對於系統設計與規劃至關重要。
- 物件圖捕捉系統在執行時期的動態、具體的快照顯示特定物件、其屬性值與連結。非常適合用於除錯與情境驗證。
- 這兩種圖示相輔相成:類別圖奠定基礎,而物件圖則展示該基礎在實際執行中的表現。
透過線上購物系統、圖書館管理系統與汽車經銷系統等範例,本教程示範如何使用UML來建模系統的結構與執行時期狀態。
8. 參考資料
本教程提供了一份全面的指南,幫助您理解並應用類別圖與物件圖。透過掌握這兩種圖表類型,您將能有效設計、分析與除錯物件導向系統。