前言
UML 中的 class diagram 真的超常用,
然後用到後來,箭頭、符號都亂用…
趁這個機會來整理一下 class diagram.
箭頭的方向
箭頭的方向其實有明確的定義,
簡單來說我們可以理解為「被箭頭指向方,通常都是比較大的角色」
例如: (這裡的箭頭只有示意用)
- 子 -> 父
- 個人 -> 群體
- 貓 -> 動物
箭頭的種類
箭頭種類一共用六種,然後我相信讀者可能跟我一樣只看英文或中文也完全看不懂差別 ? _ ?,
所以我下面再來舉例,經典表格還是要上。
我們先稍微給予一個讀者一個大概念,
基本上箭頭的種類不同,只有「概念上強弱」的差別,並不一定錯誤
聽不懂意思我這邊舉例:
我可以說:
- 我跟父親有關係
- 我跟父親有父子關係
上面兩種,上面的類似圖上的「關聯」,
而下面就是類似圖上的「繼承」,
「強化了雙方的關係,但沒有表示用比較不強烈的表示法是錯誤的」
弄懂後,當然如果可以我們一定是希望雙方的關係越明確越好,
如果全部都是箭頭也是對的,不過表現起來,就好像「差了那麼一點細節」
上面圖中的藍色箭頭也是在表示這樣的意思,「組合」、「聚合」為「關聯」的子集,
但並不代表其他剩下的箭頭沒有類似關係。
最普通的箭頭 – 「關聯 —〉」與「依賴 – -〉」
關聯就是最普通的表示兩人之間有關係的表示,箭頭也是最普通的實線箭頭,
而如果有更弱的關係 (沒有也沒差),我們則用虛線箭頭表示。
只靠敘述太難懂了不如我們直接看例子吧。
- 「關聯」:農作物 —> 天氣
- 想要種植出農作物,必須要有好的天氣,但兩者之間沒有什麼特別的直接關聯。
- 「依賴」:我 – -> 股票
- 我擁有股票,但我也可以沒有,也不會怎麼樣。(沒有也沒差的關係)
可能是最好懂的兩個箭頭 – 「繼承—▷」與「實作 – -▷」
這裡就不多解釋了,有一定程式基礎的一定都知道什麼是「繼承」,
這樣子特別的關係,我們就會用「—▷」表示,
而相對繼承關係。另外就會有介面的實作,我們就會用「- -▷」表示。
舉例: mycat – -▷ cat —▷ animal
- cat 是 animal 底下的一種,這個就是一種繼承關係
- cat, animal 都是集合名詞,不一定有非常「個體化的」定義,真正的有個體化「實作」是 Mycat
題外話一些專有名詞: (中文翻譯不知道是翻什麼)
generalization: 繼承關係中,從底部往上看 (我的貓 -> 貓 -> 動物),有種越來越 general 一般般(?) 的感覺,我的記法…
specialization: 繼承關係中,從上看往底部看 (動物 -> 貓 -> 我的貓),有種越來越 special (?) 的感覺,我的記法啦…
跟「合」有關係的兩個箭頭 – 「組合一⬥」與「聚合 一◇」
既然都是跟「合」有關係的,想必有存在一種組合的概念,
只是文字上實在是太難懂了,一樣也直接看例子吧。
- 「聚合」:人 —◇ 團體 、 學生 —◇ 教室
- (大者不存在,小者也可獨立存在)
- 人聚集起來成為了團體
- 就算沒有了團體,人還是可以各自生存
- 「組合」:房間 —⬥ 房子 、 心臟 —⬥ 人
- (大者不存在,小者也不會存在)
- 房子裡面有很多房間
- 但如果沒有了房子,也會沒有房間