UML 初級篇 Class 2

UML 初級篇 Class 2

修改記錄 : 2010/06/06 15:30

一、關係

類別圖中, 各類別用線來串連相互的關係, 而關係我們先從3種來探討

  • 結合關係
  • 聚合
  • 組合

classes 圖一

 

結合關係可以是一種多元性的結合 (實務上比較少用),

箭頭代表Source 跟 Target間的航向性.

聚合與組合關係透過一些現實案例來輔助記憶, 我就用人體的器官來做案例(正常人-器官) :

心臟、肝臟:正常的人一定有,若人死亡,則可透過手術取出後,移植到其它人身上,繼續使用。(聚合)

大腦:正常的人一定有,若人死亡,無法移植到其它人身上,該器官會一同失去效用。(組合)

 圖二

 

 

二、能見度

所謂的能見度是說類別間有什麼關係,才能看到什麼(屬性、操作),

相對OO的特徵: 封裝、繼承

 

三、個體數目(multiplicity element)

有點像賭桌上的籌碼, 我有多少, 你有多少. 圖三請自行解釋.

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中是可多重繼承的,實務上應儘量避免,因為實作的語言往往沒有支援。

generalization 圖四

 

五、依賴關係(dependency)

(supplier <--- client) ,它的圖型是帶箭頭虛線,故可知它是有可航性,依賴者(client) 依賴支援者(supplier),

支援者不知道有多少依賴者,但依賴者需要支援者提供的規格,

虛線代表:用完即丟,為動態關係。

兩個元素間不可有雙向依賴,可能會出現無窮迴圈或過高的耦合。

實務上較少在類別圖中使用,因為實在太多了,如每個類別都會用到String,那每個都拉這層關係,不就沒完沒了。

dependency