在軟體工程中,一個統一建模語言(UML)類圖是一種靜態結構圖用以透過顯示系統的類別、其屬性、操作(或方法)以及物件之間的關係來描述系統的結構。

類圖的目的
- 顯示系統中分類器的靜態結構
- 為其他 UML 結構圖提供基礎的符號表示法
- 對開發人員和其他團隊成員極為有用
- 業務分析師可以使用類圖從業務角度來建模系統
UML 類圖由以下組成:
- 一組類別
- 類別之間的一組關係
什麼是類別?
一組具有相似角色的物件的描述,包括:
- 結構特性(屬性):定義類別的物件「知道」什麼
- 代表物件的狀態
- 描述類別的結構或靜態特徵
- 行為特性(操作):定義類別的物件「能做」什麼
- 定義物件之間如何互動
- 描述類別的行為或動態特徵
類別符號
類別符號由三個部分組成:
- 類別名稱
- 類別名稱出現在第一個區段中。
- 類別屬性
- 屬性顯示在第二個區段中。
- 類型在冒號後顯示。
- 屬性對應到程式碼中的成員變數(資料成員)。
- 類別作業(方法)
- 作業顯示在第三個區段中。它們代表類別所提供的服務。
- 傳回類型出現在方法簽章末尾的冒號後。
- 參數類型出現在參數名稱後的冒號後。
- 作業對應到程式碼中的類別方法。

類別的圖形表示MyClass如上所示:
- MyClass 有 3 個屬性和 3 個作業
- op2 的參數 p3 類型為 int
- op2 傳回一個 float
- op3 傳回指向 Class6 的指標(以 * 表示)
類別關係
一個類別可能與其他類別建立一個或多個關係。關係可分為以下幾種類型:(請參閱右側圖示以了解圖形表示)。
| 關係類型 | 圖示 |
|---|---|
繼承(或泛化):
|
![]() |
簡單關聯:
|
![]() |
聚合:
|
![]() |
組合:
|
![]() |
依賴:
|
![]() |
關係名稱
- 關係名稱寫在關聯線的中間。
- 良好的關係名稱在朗讀時具有意義:
-
- 「每個試算表 包含 一些單元格」
<li>「表示式 求值為 一個值」
-
- 它們通常有一個小箭頭表示閱讀方向,例如:表示式求值為值,但值不會求值為表示式。小箭頭表示閱讀方向,例如:表示式求值為值,但值不會求值為表示式。

關係 – 角色
- 角色定義了關聯方向的目的。
- 角色寫在關聯線的末端,描述類在該關係中所扮演的角色。
- 例如,單元格與表達式相關。這種關係的性質是表達式是單元格的公式單元格的公式。
類成員的可見性
在物件導向設計中,屬性和操作的可見性會被表示出來。UML 定義了四種可見性類型:公開, 受保護, 私有,以及包.
屬性和操作名稱前的符號 +、-、# 和 ~ 表示可見性:
- + 表示公開屬性或操作
- – 表示私有屬性或操作
- # 表示受保護屬性或操作
- ~ 表示包屬性或操作
類可見性範例

在上述範例中:
- MyClassName 的 attribute1 和 op1 是公開的
- attribute3 和 op3 是受保護的
- attribute2 和 op2 是私有的
不同類別成員的存取權限如下所示:
| 存取層級 | 公開 (+) | 私有 (-) | 受保護 (#) | 套件 (~) |
|---|---|---|---|---|
| 同一類別的成員 | 是 | 是 | 是 | 是 |
| 衍生類別的成員 | 是 | 否 | 是 | 是 |
| 任何其他類別的成員 | 是 | 否 | 否 | 僅限同一套件 |
多重性
多重性表示一個類別中有多少個物件參與關係。它可以表示為:
- 恰好 1 – 1
- 零或一個 – 0..1
- 多個 – 0..* 或 *
- 一個或多個 – 1..*
- 精確數量 – 例如:3..4 或 6
- 複雜關係 – 例如:0..1、3..4、6* 表示除了 2 或 5 以外的任何數量
多重性範例
- 需求:一名學生可以註冊多門課程,而多名學生也可以註冊同一門課程。
- 在下面的範例中,類圖(左側)描述了上述需求的靜態模型,而物件圖(右側)則顯示了軟體工程與資料庫管理課程的課程註冊(類圖的實例)的快照。

聚合範例 – 電腦與元件
- 聚合是關聯的一種特殊情況,代表「包含」的層級結構。
- 聚合是父類別,元件是子類別。

繼承範例 – 細胞分類
- 繼承是另一種關聯的特殊情況,代表「種類」的層級結構。
- 繼承透過引入分類法來簡化分析模型。
- 子類別從超類別繼承屬性和操作。

類圖 – 圖示工具範例
類圖可以包含附加到類別或關係上的註解。註解以灰色顯示。

從上述範例中,我們可以將圖示解讀如下:
- Shape 是一個抽象類別。以斜體顯示。
- Shape 是一個超類別。圓形、矩形和多邊形皆繼承自 Shape。換句話說,一個圓形就是一個形狀。這是一種泛化/繼承關係。
- 對話方塊與資料控制器之間存在關聯。
- 形狀是視窗的一部分。這是一種聚合關係。形狀可以在沒有視窗的情況下存在。
- 點是圓形的一部分。這是一種組合關係。點無法在沒有圓形的情況下存在。
- 視窗依賴事件。但事件不依賴視窗。
- 圓形的屬性為半徑和中心。它是一個具體類別。
- 圓形的方法包括 area()、circum()、setCenter() 和 setRadius()。
- 圓形中的參數 radius 為 float 類型。
- 圓形中的方法 area() 傳回一個 double 值。
- 矩形的屬性和方法被隱藏。圖中其他一些類別也隱藏了它們的屬性和方法。
處理複雜系統 – 使用多個還是單一類圖?
在建模大型系統或大型商業領域時,必須考慮許多實體。我們應該使用多個還是單一類圖?答案是:
- 使用多個類圖比在單一圖中建模每個實體及其關係要好。
- 將系統分解為多個類圖,使其更容易理解,特別是當每個圖都是系統特定部分的視覺表示時。
軟體開發生命週期中類圖的觀點
類圖可以在軟體開發生命週期的不同階段使用,軟體開發生命週期(SDLC),通常會逐步建模三種不同層次的細節(觀點):
概念觀點:圖表被解釋為描述現實世界中的事物。因此,如果你從概念觀點出發,你會繪製一個代表所研究領域中概念的圖表。這些概念自然與實現它們的類相關。這種觀點被認為是語言無關的.
規格觀點:圖表被解釋為描述具有規格和介面的軟體抽象或組件,而不承諾特定的實現方式。因此,如果你從規格觀點出發,你會研究軟體介面而非實現.
實現觀點:圖表被解釋為描述特定技術和語言的軟體實現。因此,如果你從實現觀點出發,你會研究軟體實現.
現在就試著繪製一個 UML 類圖
免費下載




