UML 初級篇 Class 2
修改記錄 : 2010/06/06 15:30
一、關係
類別圖中, 各類別用線來串連相互的關係, 而關係我們先從3種來探討
- 結合關係
- 聚合
- 組合
結合關係可以是一種多元性的結合 (實務上比較少用),
箭頭代表Source 跟 Target間的航向性.
聚合與組合關係透過一些現實案例來輔助記憶, 我就用人體的器官來做案例(正常人-器官) :
心臟、肝臟:正常的人一定有,若人死亡,則可透過手術取出後,移植到其它人身上,繼續使用。(聚合)
大腦:正常的人一定有,若人死亡,無法移植到其它人身上,該器官會一同失去效用。(組合)
圖二
二、能見度
所謂的能見度是說類別間有什麼關係,才能看到什麼(屬性、操作),
相對OO的特徵: 封裝、繼承
三、個體數目(multiplicity element)
有點像賭桌上的籌碼, 我有多少, 你有多少. 圖三請自行解釋.
幾個範例:
| Sample | Right ? | Reason |
| 1 | V | only 1 |
| 1..5 | V | 1~5 |
| -1..2 | X | 不得為負數 |
| 3..1 | X | 下限不得大於上限 |
| 1,,5 | X | 不可用雙逗號 |
| 1,5 | V | 1 and 5 |
四、一般化(generalization)
亦即OO的繼承(inheritance), 子類別(subclass) 繼承 父類別(superclass)的語意、限制、結構及行為.
既然是連語意都繼承, 故在Coding時, 我們常常會為了某種功能, 而使用繼承, 以減少程式撰寫, 其實是錯誤的. (It is "is or have" issue.)
它的圖型是大三角形箭頭的實線,故可以知道它是有可航性,
Source是子類別,Target是父類別,
也呼應了物件導向設計時的觀念,父類別不知道有多少子類別,但子類別一定為父類別。
另外需特別注意的是在UML中是可多重繼承的,實務上應儘量避免,因為實作的語言往往沒有支援。
五、依賴關係(dependency)
(supplier <--- client) ,它的圖型是帶箭頭虛線,故可知它是有可航性,依賴者(client) 依賴支援者(supplier),
支援者不知道有多少依賴者,但依賴者需要支援者提供的規格,
虛線代表:用完即丟,為動態關係。
兩個元素間不可有雙向依賴,可能會出現無窮迴圈或過高的耦合。
實務上較少在類別圖中使用,因為實在太多了,如每個類別都會用到String,那每個都拉這層關係,不就沒完沒了。