考慮以下對象類之間的差異和相似之處:寵物、狗、尾巴、主人。
我們可以看到以下關係:
主人餵寵物,寵物感謝主人(關聯)
尾巴是狗和貓的一部分(聚集/組成)
貓是一種寵物(遺傳/概括)
下圖顯示了三種類型的關聯連接器:關聯、聚合和組合。我們將在這個UML指南中複習它們。
下圖顯示了一個概括。我們將在稍後的UML指南中討論它。
關聯
如果一個模型中的兩個類需要彼此通信,那麼它們之間必須有一個連結,並且可以通過一個關聯(連接器)來表示。
關聯可以用這些類之間的一條線表示,該線帶有指示導航方向的箭頭。如果兩邊都有箭頭,則這種關聯稱為雙向關聯。
我們可以通過在表示關聯的行中添加多重裝飾來表示關聯的多重性。該示例表明,一個學生有一個或多個導師:
一個學生可以與多個老師關聯:
這個例子表明每個老師都有一個或多個學生:
我們還可以使用角色名指示關聯中對象的行為(例如,對象的角色)。
關聯vs聚合vs組合
「關聯、聚合和組合之間的區別是什麼」這個問題最近經常被問到。
聚合和組合是關聯的子集,意味著它們是特定的關聯案例。在聚合和組合中,一個類的對象「擁有」另一個類的對象。但有一個微妙的區別:
聚合意味著子組件可以獨立於父組件而存在。示例:班級(父類)和學生(子類)。刪除類,學生仍然存在。
組合意味著子元素不能獨立於父元素而存在的關係。例子:房子(父母)和房間(孩子)。房間不能與房子分開。
組合的例子:
除了類A和類B之間的部分關係之外,我們還應該更具體地使用composition連結——這兩個類之間存在很強的生命周期依賴關係,也就是說,當類A被刪除時,類B也會被刪除
聚合的例子:
值得注意的是,聚合連結沒有以任何方式聲明類A擁有類B,也沒有聲明兩者之間存在父子關係(當父類刪除時,其所有的子類也因此被刪除)。事實上,恰恰相反!聚合連結通常用於強調類A實例不是類B實例的獨佔容器,因為實際上同一個類B實例擁有另一個容器/s。
加起來-
總而言之,關聯是一個非常通用的術語,用於表示一個類使用另一個類提供的功能時的情況。如果一個父類對象擁有另一個子類對象,並且如果沒有父類對象,這個子類對象就不能有意義地存在,那麼我們稱它為複合。如果可以,就稱為聚合。
泛化和專業化
泛化是一種機制,用於將類似的對象類組合成一個更一般化的類。泛化標識一組實體之間的共性。共性可以是屬性、行為,或者兩者都有。換句話說,超類擁有最通用的屬性、操作和可以與子類共享的關係。子類可能有更專門化的屬性和操作。
專門化是泛化的反向過程,泛化意味著從現有的類創建新的子類。
例如,銀行帳戶有兩種類型——儲蓄帳戶和信用卡帳戶。儲蓄帳戶和信用卡帳戶從銀行帳戶中繼承了常見的/廣義的屬性,比如帳戶號、帳戶餘額等,也有它們特有的屬性,比如未結算的付款等。
泛化和繼承
泛化是我們用來在UML中表示將公共屬性抽象為基類的術語。UML圖的泛化關聯也稱為繼承。當我們在程式語言中實現泛化時,它通常被稱為繼承。泛化和繼承是相同的。這些術語只是根據使用的上下文而有所不同。
本文:http://jiagoushi.pro/node/1213
謝謝大家關注,轉發,點讚和在看。