第 9 章

9.3 UML類別圖與類別的基本表示

物件導向分析與領域建模

9.3.1 類別、物件與實例

類別描述一組具有共同特徵、責任與行為的事物;物件則是某個類別的具體實例。例如,「團隊」是類別,「智慧校園隊」是某一個團隊物件。每個物件通常具有可區辨的身分、會隨業務事件改變的狀態,以及在協作中承擔的責任。類別圖(Class Diagram)主要表達類別層級的結構,不列出所有實際物件。

UML通常以矩形表示類別,並可分成三個區域:

  1. 類別名稱。
  2. 屬性。
  3. 操作。

分析層級的領域模型可以只列類別名稱,或加入理解需求所需的重要屬性。物件的責任可先用文字、關聯與使用情境加以說明;若操作尚未獲得需求支持,可以暫時省略,避免把領域模型過早轉成程式設計圖。

9.3.2 類別與屬性的命名

類別名稱應使用具體且能被領域人員理解的名詞,例如「團隊」「報名」及「評審分派」。屬性名稱應清楚表達業務資訊,例如「報名時間」「檔案格式」及「正式送出時間」。如果使用英文,請使用單數。

良好的命名應符合下列原則:

  • 採用需求文件已確認的用語。
  • 避免同一概念使用多個名稱,以免讀者誤以為它們代表不同事物。
  • 避免使用意義過廣的「資料」「項目」或「內容」。
  • 不將畫面名稱或資料庫欄位縮寫直接當成領域名稱。
  • 需要中英文對照時,應維持全章一致。

舉例來說,Case M01的正式名稱是「專題競賽報名與審查系統」,案例內容應一致使用「專題」,避免以不同名詞指稱同一概念,造成讀者誤以為它們代表不同事物。

9.3.3 屬性與資料型態

屬性描述類別實例需要保存或推導的資訊。UML可用屬性名稱:資料型態表示,例如:

text
classDiagram
  class Registration {
    RegistrationId: String
    SubmittedAt: DateTime
    Status: RegistrationStatus
  }
Mermaid 圖形預覽Mermaid 11.12
查看並複製 Mermaid 程式碼
mermaid
classDiagram
  class Registration {
    RegistrationId: String
    SubmittedAt: DateTime
    Status: RegistrationStatus
  }

在這個例子中,Registration類別有三個屬性:RegistrationId、SubmittedAt與Status。RegistrationId的資料型態為字串(String),SubmittedAt的資料型態為日期時間(DateTime),Status則表示目前的報名狀態,其資料型態為RegistrationStatus。屬性名稱採大寫字母開頭,以維持本章類別圖的一致格式。

屬性還可分為:

  • 必要屬性: 每個實例都必須具有的資訊。
  • 選擇性屬性: 在特定狀況下才有值的資訊。
  • 衍生屬性: 可由其他資訊計算而得,例如評分總分。

是否必要、是否唯一及是否可修改,都應由需求或業務規則支持。

9.3.4 屬性或類別的判斷

屬性與類別都是名詞。如何分辨屬性與類別呢?一項資訊若只有簡單值,且不具有自己的關係與生命週期,通常可建為屬性;若它具有多個屬性、獨立識別、狀態變化或與其他概念的關係,則較適合建為類別。

例如,「檔案格式」通常是專題文件的屬性,因為它只是描述文件的一個值,不具有獨立識別、關係或生命週期,因此不需另建類別。相較之下,「指導教師」具有自己的身分,會與團隊建立指導關係,也涉及BR-05的利益衝突判斷,因此適合建為類別。判斷關鍵不在於某個名詞看起來是否重要,而在於系統是否必須獨立識別它、保存它,或描述它與其他概念的關係。

9.3.5 分析類別圖與設計類別圖

本書依建模目的,將類別圖區分為分析類別圖與設計類別圖。兩者可能使用相同的UML符號,但回答的問題與詳細程度不同。

  • 分析類別圖著重業務語意。
  • 設計類別圖則進一步描述軟體責任、方法、可見性、介面及實作方式。
比較面向分析類別圖設計類別圖
核心問題領域中有哪些重要概念軟體如何實現需求
主要讀者使用者、系統分析人員、領域專家程式設計人員、開發人員
類別來源業務概念與需求軟體責任與技術架構
屬性詳細度重要業務資訊可實作的型態與限制
操作可省略或僅列重要領域行為通常需要較完整定義

分析類別圖只需表達業務上的識別需求,不必立即決定技術實作。以Case M01的報名(Registration)為例,分析人員可以確認每筆報名都需要可區別的報名編號(RegistrationId),因為團隊名稱可能重複,不能穩定識別一筆報名。至於資料庫採用何種主鍵、編號如何產生及欄位長度為何,則應留待設計階段決定。這項區分能避免分析模型太早受特定技術限制,也能確保後續設計仍有清楚的業務依據。