我的雲端生活網 - Life+

Tuesday, March 17, 2009

工具系列:UML類別圖

本文介紹UML的類別圖。類別圖是從類別觀點看系統的結構;物件圖則顯示系統結構在某個時間的實例。二種圖式有一部份是大同小異、並互通有無。以下段落依序介紹類別圖的圖示與示範。另一篇將介紹物件圖。類別圖描述系統的基本結構,並且模型建構符合當前的物件導向程式語言模型,例如Java;於是,類別圖非常適合當做在系統分析階段對程式人員解說的文件。

  • 類別:(Class) 主要用四個長方形從上向下層疊、其中以文字標明各段內容,依序表示類別名稱、屬性、操作方法、以及責任。屬性和操作方法可以用 + 或 - 等前綴符號表示存取能力是公開或私有,另外,或者可用 # 標示保護屬性、以及用 ~ 標示包裝(即若干個類別的集合)。屬性的主體包含屬性名稱、和屬性的資料型態或類別。操作方法的主體包含方法名稱、括弧標示的參數項目、和方法的資料型態或類別。操作方法的參數要寫上參數名稱、和參數的資料型態或類別。如果操作方法有許多參數,要用逗點(,)分隔。第四個長方形要寫物件的責任,並且第四個長方形可以按需要而省略。

    有時為了省略細節、而使表達較簡單又清楚,可以將類別屬性和操作方法的描述文字省略。或者,也可以把第二個長方形和第三個長方形省略,只用一個帶有類別名稱的長方形表示類別。

  • 關聯:(Association) 在一個類別和另一個類別之間拉出連接線、並在上方標示關聯詞(動詞)、二端視需求可標示參與數目和介面名稱,表示二個類別之間的關聯。例如,一或多個「數字」「標記」一種「物品」。參與數目(multiplicity or cardinality)可能標示為數字、表示多項的代用符號(*) 、或是像 "0..1" 的數字區段。可以在關聯詞旁邊以實心三角形標示方向。


  • 彙總:(Aggregation) 在連接線的一端加上空心菱形,表示一項類別(菱形端)對另一項類別有「整體與部份」的關聯。彙總的意思是 has-a ,通常是強調一項類別(菱形端)的包含了另一項類別的集合:例如,讀卡機可以讀一組卡片。

  • 組合:(Composition) 在連接線的一端加上實心菱形,表示一項類別(菱形端)除了對另一項類別有「整體與部份」的關聯之外、而且是由另一項類別組成。組合的關聯力比彙總強,組合隱含了:如果一項類別(菱形端)的實例毀壞,它包含的另一項類別組成物也都毀壞。例如,讀卡機內含晶片。此外,組合的菱形端參與數目必須是 0..1 或 1 。

  • 一般化/特殊化:(Generalization/specialization) 在連接線的一端加上空心三角形,表示一項類別(三角形端)是另一項類別的一般樣式;相對地,另一項類別是該類別的特殊樣式。一般化的意思是 is-a ,也是繼承的關係:例如,MT180/FP 是一種讀卡機。MT180/FPMP-602MUSx是Reader的子型(subtype),而Reader是母型(supertype) 。

    可注意,一般化也可以用在使用案例圖,用來處理案例或參與者的從屬層次。

  • 實現:(Realization) 用帶箭頭的虛線從一項類別拉到另一項類別、並在上方標示用雙角括號 « » 包含的關聯詞(動詞),表示一項類別實現了另一項類別的行為:例如,讀卡機實作天線的用途。

  • 依賴:(Dependency) 從一項類別拉出一條帶箭頭的虛線到另一項類別、不帶標示文字,表示一項類別依賴另一項類別提供的功能。
  • 端口:(Port) 從一項類別拉出一條線、另一端以小空心圓結尾並附帶端口名稱,表示一個輸入端。而另一端以小半圓弧結尾,則表示一個輸出端。端口的圖示也出現在UML元件圖,另一篇將再介紹。
  • 介面:(Interface) 從一項類別拉出一條虛線到另一項類別、並在另一端加上空心三角形,表示一項類別實作另一項類別(三角形端)的介面定義。介面類別要在類別名稱上方標示«Interface»文字 。介面的定義必須反映實作語言的限制。


No comments: