c++组合 聚合 关联
組合和聚合區別(不能脫離整體 能脫離整體)
組合:(表示兩個對象之間是整體和部分的強關系,部分的生命周期不能超越整體。如人和腦袋)
比如A類中包含B類的一個引用b,當A類的一個對象消亡時,b這個引用所指向的對象也同時消亡(沒有任何一個引用指向它,成了垃圾對象)
聚合:(表示兩個對象之間是整體和部分的弱關系,部分的生命周期可以超越整體。如電腦和鼠標)
反之b所指向的對象還會有另外的引用指向它,這種情況叫聚合。
組合方式一般代碼會這樣寫:
A類的構造方法里創建B類的對象,也就是說,當A類的一個對象產生時,B類的對象隨之產生,當A類的這個對象消亡時,它所包含的B類的對象也隨之消亡。
聚合方式一般代碼會這樣寫:
A類的對象在創建時不會立即創建B類的對象,而是等待一個外界的對象傳給它
--------------------------------------------------------------------
對c++,形如:
class?B1;
class?B2;
class?B3;
class?A
{
B1?b1;
B2&?b2;
B3*?b3;
};
B1,B2,B3都是部分類。
B1與A的關系是組成關系。
B2、B3與A的關系是聚合還是組成要根據這一條:部分類是否能脫離整體類而存在。
在這里可以理解他們的生命周期是否同步。
如果b2,b3是通過外部傳入的,形如:
class?A
{
public:
???A(B3*?b3)
???{
??????m_b3?=?b3);
???}
private:
???B3*?m_b3;
};
main()
{
???B2?bbb;
???A?a(&bbb);
}
bbb并不會因為a的消亡而消亡。那么就是聚合關系。
反之,如果
m_b3是在A的構造函數new,在A的析構函數delete,兩者生命周期一樣,那么就是組成關系。
引用的情況類似。
個人感覺uml為了滿足所謂通用性,使得對模型的描述很粗糙,并沒有吹噓的那么好。
僅供參考。
?
--------------------------------------
關聯:簡單的可以認為,如果一個類作為了另外一個類的屬性,那一定是關聯關系。但你要知道,聚合是一種特殊的關聯,而組合又是一種特殊的聚合。一般的關聯我們認為是平級的、無整體部分關系的,如朋友關系。
依賴:對象之間的臨時關系,臨時性體現在不超越方法的周期。簡單的說,在方法使用到的,如參數類,就一定是依賴關系。
------ 完.不對之處請指正!------
總結
以上是生活随笔為你收集整理的c++组合 聚合 关联的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC的Win32控制台程序中使用MFC库
- 下一篇: C++ 类成员引用变量的使用