Notes — UML in C#
你有看過在球場上,教練用大喊的,把戰術完整的說出來,讓對手也知道嗎?如果真的有,那可能是心裡戰吧,真實的戰術通常只在一個手勢之間
Notes — UML in C#

你有看過在球場上,教練用大喊的,把戰術完整的說出來,讓對手也知道嗎?如果真的有,那可能是心裡戰吧,真實的戰術通常只在一個手勢之間
戰術 α (👌)
和團隊建立 共同的語言 是很重要的,不只是從口中說出的,共同的圖像語言,手勢或名詞定義,可以幫我們省下很多溝通的時間,今天要筆記的,是在做程式架構的溝通的時候,很方便使用的一個語言:UML
Unified Modeling Language
接下來我會依序用圖形搭配代碼來描述一下常使用到的符號

這邊比較直覺一點,左右對照就可以囉
補充說明:
+ : public
− : private
Attribute: 這邊你可以把它當作 variable
也可以說他是 field, property
雖然 property {get; set;} 其實是 method 的語法糖,不過寫起來還是跟變數比較像一些,所以把他歸類在這邊

這個空白三角形的箭頭符號,代表繼承
好像沒有比較好的記憶方式,因為跟下面要介紹的會剛好相反
Lion — 繼成自 — ▷Animal
Lion — extends from — ▷Animal

黃色線條這個符號代表 : Associate
其實翻譯就是 關係
這個符號我的理解就是有用到就算
而誰用誰我覺得就是用上下表示
畫在上面的就是用的人,而在下面的就是被用的
實際上我覺得這個表達不出什麼,可能是在定義還比較模糊的時候使用
或是在非程式領域的時候比較實用
網路上我有看到一個我覺得比較好的說法 :
Lion — 使用— Hat
Lion — uses — Hat

粉色菱形加上一條線代表 : Aggregation
翻譯的話是 聚合(合成)
有一個關鍵點是當 Lion 這個 class 生命週期結束時
並不代表 Hat 的生命週期結束了
網路上有查到一個滿好的說法
Lion ◇— 擁有— Hat
Lion ◇ — has — Hat
以圖片的例子,如果使用的話會像這樣:
public class Zoo{ Hat hat = new Hat(); Lion lion = new Lion(hat);}//可以看到,hat 其實是從外面傳進去的,所以他不會跟著 Zoo 的生命週期//lion 死了 hat 還存在
而這邊也可以帶出另外一個符號 :

藍灰色塗滿菱形加上線代表:Composition
翻譯的話是 組成
可以看到 Zoo 是由 Lion 跟 Hat 組成的
當 Zoo 的生命週期結束時,Lion 跟 Hat 也會一起結束
這裡可以用這樣來描述 :
Hat — 組成 — ♦Zoo
Lion — 組成—♦ Zoo
Hat — compose — ♦Zoo
Lion — compose— ♦ Zoo
public class Lion{ Hat hat = new Hat();}
public class Zoo{ Lion lion = new Lion();}//可以看到,hat 其實是在 Lion class 裡面,也就是構成 lion 的一部分//lion死亡時 hat 也會一起死亡

如果你看到有數字在上面,代表最靠近數字的物件數量
1隻獅子只能有 0–6頂帽子
1個動物園的組成最多只能有1隻獅子
數字的部分可以替換成以下:
* : 任意數字0..* : 0 到任意數字m..n : 任意數字m 到 比m大的任意數字
參考資料:
https://www.youtube.com/watch?v=UI6lqHOVHic
https://stackoverflow.com/questions/12604031/c-sharp-code-for-association-aggregation-composition
感謝大家收看,我們下次見
作者
hwchw
Writing on AI-native organization design, OD, leadership, and the future of work. Long-form essays and field notes from the intersection of human systems and machine intelligence.
hwchw 的其他文章 →