分類

展開全部 | 收合全部

分類

展開全部 | 收合全部

【UML #2】class diagram, 最常用於理解程式中有哪些重要物件 (class, 類別), 與他們之間的相互關係

前言

UML 中的 class diagram 真的超常用,
然後用到後來,箭頭、符號都亂用…
趁這個機會來整理一下 class diagram.

箭頭的方向

箭頭的方向其實有明確的定義,
簡單來說我們可以理解為「被箭頭指向方,通常都是比較大的角色

例如: (這裡的箭頭只有示意用)

  • 子 -> 父
  • 個人 -> 群體
  • 貓 -> 動物

箭頭的種類

箭頭種類一共用六種,然後我相信讀者可能跟我一樣只看英文或中文也完全看不懂差別 ? _ ?,
所以我下面再來舉例,經典表格還是要上。

我們先稍微給予一個讀者一個大概念,
基本上箭頭的種類不同,只有「概念上強弱」的差別,並不一定錯誤

聽不懂意思我這邊舉例:
我可以說:

  • 我跟父親有關係
  • 我跟父親有父子關係

上面兩種,上面的類似圖上的「關聯」,
而下面就是類似圖上的「繼承」,
強化了雙方的關係,但沒有表示用比較不強烈的表示法是錯誤的

弄懂後,當然如果可以我們一定是希望雙方的關係越明確越好,
如果全部都是箭頭也是對的,不過表現起來,就好像「差了那麼一點細節」

上面圖中的藍色箭頭也是在表示這樣的意思,「組合」、「聚合」為「關聯」的子集,
並不代表其他剩下的箭頭沒有類似關係。

最普通的箭頭 – 「關聯 —〉」與「依賴 – -〉」

關聯就是最普通的表示兩人之間有關係的表示,箭頭也是最普通的實線箭頭,
而如果有更弱的關係 (沒有也沒差),我們則用虛線箭頭表示。

只靠敘述太難懂了不如我們直接看例子吧。

  • 「關聯」:農作物 —> 天氣
    • 想要種植出農作物,必須要有好的天氣,但兩者之間沒有什麼特別的直接關聯。
  • 「依賴」:我 – -> 股票
    • 我擁有股票,但我也可以沒有,也不會怎麼樣。(沒有也沒差的關係)

可能是最好懂的兩個箭頭 – 「繼承—▷」與「實作 – -▷」

這裡就不多解釋了,有一定程式基礎的一定都知道什麼是「繼承」,
這樣子特別的關係,我們就會用「—▷」表示,

而相對繼承關係。另外就會有介面的實作,我們就會用「- -▷」表示。

舉例: mycat – -▷ cat —▷ animal

  • cat 是 animal 底下的一種,這個就是一種繼承關係
  • cat, animal 都是集合名詞,不一定有非常「個體化的」定義,真正的有個體化「實作」是 Mycat

題外話一些專有名詞: (中文翻譯不知道是翻什麼)
generalization: 繼承關係中,從底部往上看 (我的貓 -> 貓 -> 動物),有種越來越 general 一般般(?) 的感覺,我的記法…
specialization: 繼承關係中,從上看往底部看 (動物 -> 貓 -> 我的貓),有種越來越 special (?) 的感覺,我的記法啦…

跟「合」有關係的兩個箭頭 – 「組合一⬥」與「聚合 一◇」

既然都是跟「合」有關係的,想必有存在一種組合的概念,
只是文字上實在是太難懂了,一樣也直接看例子吧。

  • 「聚合」:人 —◇ 團體 、 學生 —◇ 教室
    • (大者不存在,小者也可獨立存在)
    • 人聚集起來成為了團體
    • 就算沒有了團體,人還是可以各自生存
  • 「組合」:房間 —⬥ 房子 、 心臟 —⬥ 人
    • (大者不存在,小者也不會存在)
    • 房子裡面有很多房間
    • 但如果沒有了房子,也會沒有房間

Reference

Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「?只寫到一半?」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好?

文章: 889

★留個言吧!內容有誤或想要補充也歡迎與我討論!