什麼是類圖?

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

Class diagram in UML diagram hierarchy

類圖的目的

  1. 顯示系統中分類器的靜態結構
  2. 為其他 UML 結構圖提供基礎的符號表示法
  3. 對開發人員和其他團隊成員極為有用
  4. 業務分析師可以使用類圖從業務角度來建模系統

UML 類圖由以下組成:

  • 一組類別
  • 類別之間的一組關係

什麼是類別?

一組具有相似角色的物件的描述,包括:

  • 結構特性(屬性):定義類別的物件「知道」什麼
    • 代表物件的狀態
    • 描述類別的結構或靜態特徵
  • 行為特性(操作):定義類別的物件「能做」什麼
    • 定義物件之間如何互動
    • 描述類別的行為或動態特徵

類別符號

類別符號由三個部分組成:

  1. 類別名稱
    • 類別名稱出現在第一個區段中。
  2. 類別屬性
    • 屬性顯示在第二個區段中。
    • 類型在冒號後顯示。
    • 屬性對應到程式碼中的成員變數(資料成員)。
  3. 類別作業(方法)
    • 作業顯示在第三個區段中。它們代表類別所提供的服務。
    • 傳回類型出現在方法簽章末尾的冒號後。
    • 參數類型出現在參數名稱後的冒號後。
    • 作業對應到程式碼中的類別方法。

Simple class

類別的圖形表示MyClass如上所示:

  • MyClass 有 3 個屬性和 3 個作業
  • op2 的參數 p3 類型為 int
  • op2 傳回一個 float
  • op3 傳回指向 Class6 的指標(以 * 表示)

類別關係

一個類別可能與其他類別建立一個或多個關係。關係可分為以下幾種類型:(請參閱右側圖示以了解圖形表示)。

關係類型 圖示
繼承(或泛化):

  • 代表「是一種」的關係。
  • 抽象類別名稱以斜體顯示。
  • SubClass1 和 SubClass2 是 SuperClass 的特殊化。
  • 實線搭配開口箭頭,由子類別指向父類別。
Inheritance
簡單關聯:

  • 兩個同等類別之間的結構性連結。
  • Class1 與 Class2 之間存在關聯。
  • 連接兩個類別的實線。
Simple association
聚合:

  • 一種特殊類型的關聯,表示「部分-整體」關係。
  • Class2 是 Class1 的一部分。
  • Class2 的多個實例(以 * 表示)可以與 Class1 關聯。
  • Class1 和 Class2 物件具有獨立的生命週期。
  • 在組合類的一端使用空心菱形。
Aggregation
組合:

  • 一種特殊的聚合,當整體被銷毀時,其部分也會被銷毀。
  • Class2 物件與 Class1 一同存在並一同消亡。
  • Class2 無法獨立存在。
  • 在組合類的一端使用實心菱形。
Composition
依賴:

  • 當一個類別的定義變更可能導致另一個類別的變更時(但反之不成立),兩者之間存在依賴關係。
  • Class1 依賴 Class2。
  • 虛線搭配開放箭頭。
Dependency

關係名稱

  • 關係名稱寫在關聯線的中間。
  • 良好的關係名稱在朗讀時具有意義:
      • 「每個試算表 包含 一些單元格」

    <li>「表示式 求值為 一個值」

  • 它們通常有一個小箭頭表示閱讀方向,例如:表示式求值為值,但值不會求值為表示式。小箭頭表示閱讀方向,例如:表示式求值為值,但值不會求值為表示式。

Relationship name

關係 – 角色

  • 角色定義了關聯方向的目的。
  • 角色寫在關聯線的末端,描述類在該關係中所扮演的角色。
    • 例如,單元格與表達式相關。這種關係的性質是表達式是單元格的公式單元格的公式。

類成員的可見性

在物件導向設計中,屬性和操作的可見性會被表示出來。UML 定義了四種可見性類型:公開, 受保護, 私有,以及.

屬性和操作名稱前的符號 +、-、# 和 ~ 表示可見性:

  • + 表示公開屬性或操作
  • – 表示私有屬性或操作
  • # 表示受保護屬性或操作
  • ~ 表示包屬性或操作

類可見性範例

Simple class

在上述範例中:

  • MyClassName 的 attribute1 和 op1 是公開的
  • attribute3 和 op3 是受保護的
  • attribute2 和 op2 是私有的

不同類別成員的存取權限如下所示:

存取層級 公開 (+) 私有 (-) 受保護 (#) 套件 (~)
同一類別的成員
衍生類別的成員
任何其他類別的成員 僅限同一套件

多重性

多重性表示一個類別中有多少個物件參與關係。它可以表示為:

  • 恰好 1 – 1
  • 零或一個 – 0..1
  • 多個 – 0..* 或 *
  • 一個或多個 – 1..*
  • 精確數量 – 例如:3..4 或 6
  • 複雜關係 – 例如:0..1、3..4、6* 表示除了 2 或 5 以外的任何數量

多重性範例

  • 需求:一名學生可以註冊多門課程,而多名學生也可以註冊同一門課程。
  • 在下面的範例中,類圖(左側)描述了上述需求的靜態模型,而物件圖(右側)則顯示了軟體工程與資料庫管理課程的課程註冊(類圖的實例)的快照。

Object diagram

聚合範例 – 電腦與元件

  • 聚合是關聯的一種特殊情況,代表「包含」的層級結構。
  • 聚合是父類別,元件是子類別。

Aggregation example

繼承範例 – 細胞分類

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

Inheritance example

類圖 – 圖示工具範例

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

Class diagram example

從上述範例中,我們可以將圖示解讀如下:

  1. Shape 是一個抽象類別。以斜體顯示。
  2. Shape 是一個超類別。圓形、矩形和多邊形皆繼承自 Shape。換句話說,一個圓形就是一個形狀。這是一種泛化/繼承關係。
  3. 對話方塊與資料控制器之間存在關聯。
  4. 形狀是視窗的一部分。這是一種聚合關係。形狀可以在沒有視窗的情況下存在。
  5. 點是圓形的一部分。這是一種組合關係。點無法在沒有圓形的情況下存在。
  6. 視窗依賴事件。但事件不依賴視窗。
  7. 圓形的屬性為半徑和中心。它是一個具體類別。
  8. 圓形的方法包括 area()、circum()、setCenter() 和 setRadius()。
  9. 圓形中的參數 radius 為 float 類型。
  10. 圓形中的方法 area() 傳回一個 double 值。
  11. 矩形的屬性和方法被隱藏。圖中其他一些類別也隱藏了它們的屬性和方法。

處理複雜系統 – 使用多個還是單一類圖?

在建模大型系統或大型商業領域時,必須考慮許多實體。我們應該使用多個還是單一類圖?答案是:

  • 使用多個類圖比在單一圖中建模每個實體及其關係要好。
  • 將系統分解為多個類圖,使其更容易理解,特別是當每個圖都是系統特定部分的視覺表示時。

軟體開發生命週期中類圖的觀點

類圖可以在軟體開發生命週期的不同階段使用,軟體開發生命週期(SDLC),通常會逐步建模三種不同層次的細節(觀點):

概念觀點:圖表被解釋為描述現實世界中的事物。因此,如果你從概念觀點出發,你會繪製一個代表所研究領域中概念的圖表。這些概念自然與實現它們的類相關。這種觀點被認為是語言無關的.
規格觀點:圖表被解釋為描述具有規格和介面的軟體抽象或組件,而不承諾特定的實現方式。因此,如果你從規格觀點出發,你會研究軟體介面而非實現.
實現觀點:圖表被解釋為描述特定技術和語言的軟體實現。因此,如果你從實現觀點出發,你會研究軟體實現.

現在就試著繪製一個 UML 類圖

你已經學會了類圖是什麼以及如何繪製它。是時候自己動手繪製了。下載 Visual Paradigm Community Edition,這是一款免費的 UML 工具,並使用免費的類圖工具來建立你的類圖。它易於使用且直覺。
免費下載

 

Leave a Reply