類別圖
參考資料:(https://zh.wikipedia.org/wiki/%E9%A1%9E%E5%88%A5%E5%9C%96)
參考資料:(http://www.codedata.com.tw/java/umltutorial-02/)
類別名稱區隔
圖型都是長方形(有些比較特別的,介面會用圓形代替)
類別 直接呈現
抽象類別 右下角 {abstract}
介面 上方 << interface >>
UML制定了許多 Stereotypes "<< >>",EX: << interface >>
屬性區隔
< 存取範圍 > < 屬性名稱 > [ [ < 數量 > ] [ < 順序性 > ] ] : < 型態 > [ = < 初始值 > ]
可見性、存取範圍
屬性名稱
使用Java程式語言中合法的識別字
數量和順序性
數字 : 確定的數量
: 0到多個
0..* : 0到多個
0..1 : 0到1個
1..* : 1到多個
n..m : 最少n個,最多m個
當屬性的數量是一個以上的時候,你可以使用順序性的宣告來表示這個屬性的值是否需要排序
Unordered : 不需要排序 Ordered : 需要排序
型態
屬性的資料型態,使用八種基本資料型態或類別名稱
初始值
可選擇性地宣告,為屬性宣告一個合法的初始值。
底線 => static
全大寫 + "_" => final
UML中並沒有關於 final 的表示方法,你可以依照 java 的命名慣例來判斷是否要加上 final 的宣告。
字母全大寫,字和字之間用 "_" 連接。
想表達特別的屬性 << Stereotypes >>
<< primary key >> -customerID : String
方法區隔
< 存取範圍 > < 方法名稱 > ( [ < 參數 > ] ) : < 回傳型態 >
存取範圍
同屬性存取範圍
方法名稱
同屬性名稱
參數
可選擇性地宣告,是一個使用逗號分隔的清單,使用下列的語法來宣告方法的參數 :
[ 種類 ] < 參數名稱 > : < 參數型態 >
種類 : 可選擇的宣告,在 java 實作上通常會省略,但如果特別加上 in 的宣告,則要宣告為 final 。
參數名稱 : 同屬性名稱
參數型態 : 同屬性型態
回傳型態
同屬性型態
有加上底線,但方法名稱同類別名稱 => 建構式
斜體字 => abstract
關係
外部連結
物件之間的基本關係。
泛化 (繼承 extends)
空心三角形 + 實線
Generalization
繼承的反方向,指父類別 具有 子類別 的共有功能。
子類別可視為父類別的特例,並可以增加新功能。
實現 (實作 implements)
空心三角形 + 虛線
指一個class 實現 interface 的功能。
依賴
燕尾箭頭 + 虛線
簡單理解為 A 使用了 B " ... uses a ..."
被依賴的物件只是被當作工具使用,並不持有對它的參照。
而這種使用關係是非常弱的,其具有偶然性、臨時性,但是B的變化會影響到A。
在程式碼方面,B會作為參數 放在 A 的某個 method。
關聯 (結合)
燕尾箭頭 + 實線
Association
在語意上指兩個 class、class & port 之間有一種強依賴關係。 "... has a ..."
關聯關係是指一個 class 之類知道另外一個類別的屬性、方法。 通常含有「知道」、「了解」的含意。
在程式碼層面,被關聯類別 以類別屬性的形式 出現在關聯類別中,也可能是關聯類別參照了一個 類別型為 被關聯類別 的全域變數。
範例: 上方 : 結合數量、結合關係 下方 : 結合角色
數量: 同屬性數量
Java 在結合數量上的實作,可以使用下列幾種方法 : 0個 代表可以為 null 確定的數量可以使用陣列 or Collection 不確定的數量可以使用 Collection
<< local >>
生命週期只在區塊哩,彼此之間沒有直接關係。
<< parameter >>
透過參數來取得 ClassB,建立物件的責任在於呼叫 method 的類別。 這種情況有另外一種表示方式 將關聯的實線改成虛線,這樣就不用標記 << parameter >> 了。
<< create >>
由 ClassA 來負責建立 ClassB,這種方法稱為 << Factory method >> 這是一種常見的 設計模式(Design Pattern)
<< delegate >>
Delegate 是代理的意思,ClassA 扮演代理者,由ClassA 負責將方法的呼叫,轉為 ClassB 的method 呼叫。
聚合
空心菱形 + 實線
Aggregate
聚合 是表示 整體 與 部分 的特殊關聯關係。 是「弱」的包含(... own a ...) 成分類別不依靠聚合類別也可以單獨存在,聚合和成分各自具有生命週期。 部分 可以屬於多個整體物件,也可以為多個整體物件共用(sharable)。
EX:池塘&鴨子
聚合在 java 實作時,跟結合差不多,但要注意 "被擁有者" 一定會被建立
組成(組合)
實心菱形 + 實線
Composition 組成 是「強」的 整體與部分 的包含關係(... is a part of ...) 成分類別必須依靠合成類別而存在 整體和部分是不可分的,整體 的生命週期 就等同於 部分 的生命週期。
EX:汽車&化油器
是一種特殊情況的聚合關係,它跟聚合的差別在於方向的角度。 你可以 "把聚合視為 單向、把組合視為 雙向" 的結合關係。
因為組合的特性,另外有兩個狀況要注意
一個成員物件不能同時被兩個擁有者擁有
擁有者要負責成員的生命週期
在 java 技術中,物件的解構 deconstruct 是透過 GC Garbage collection 來完成。 但在一些特殊情況下,你可能需要覆寫 Object 類別中的 finalize 方法。
巢狀類別 Nested class
巢狀類別中有一個比較特別的情形是 匿名類別 Anonymous class,UML 並沒有特別制定的表示方法。
結合類別 - 表示集合容器型態
在討論聚合時使用的範例圖型,它所顯示的資訊還不夠詳細。
如果想要在圖型中顯示容器的種類,可以在兩個物件關聯的實線上,接出一條虛線,放容器的型態 (可參考詳細資料)
限定結合
最常見的情況是在使用 Map 的時候。
類別層級的關係
概括
空心箭頭 + 實線
實現
空心箭頭 + 虛線
一般關係
依賴
多重
Last updated