2008-12-15 17 views
0

我無法區分聚合和持有的區別。這是什麼意思,讓我們說,C++?
我想當類A的對象擁有(或實例化)類B的對象時,它使用它自己執行某些功能。
例如:保持一個類的對象和聚合他們之間的區別是什麼?

class A { 
int state; 
public: 
    A(int s): state(s) {} 
    int inc() { return state++; } 
}; 
class B { 
    int app; 
    string s; 
public: 
    B(): app(0), s("") {} 
    B(int A, const string& str): app(A), s(str) {} 
    void f(int p); 
    ~B() { app = 0; s = ""; } 
}; 
void B::f(int p) 
{ 
    A mA(p); 
    app = mA.inc(); 
} 

和類A的對象的聚集會是這樣:

class B{ 
A t; 
//... 
} 

請給我一個鏈接到一個網站或一個地方的一本書,我可以從面嚮對象語言的角度找到明確的定義,即類之間的每種關係是什麼。

回答

1

握住另一類是指一類與通過父子關係的另一類相關聯。例如,Path有一個點列表。路徑是點列表的父點,它是各個點的父點。

彙總方式採取不同的類,並把他們一個接口後面,以便它們顯示爲一類。例如,一個FileDialog將有幾個按鈕類,一個文本輸入類,一個listview/treeview類等等。但是對於系統的其餘部分,它只是激活了方法,可能會分配一個默認文件名,然後檢索剩餘的文件。

它包含所有其他類別的事實是無關緊要的使用它,因爲它的工作原理是聚集所有的類來執行預期的行爲filedialog.However其他類。

0

這非常關乎所有權和知名度。有這些關係不同的名字,但你應該考慮以下兩點:

  • 是否父有過孩子嚴格的所有權,這樣,當父母去世,孩子也應該死嗎?

  • 是孩子可見,除了家長的其他實體?

回答這些問題將幫助您澄清這些關係。

1

IMO,如果我理解正確的,你所要求的成分 - 聚集的定義。聚合或持有是實體的集合。構圖有一個更嚴格的限制。考慮給予學生的平均分數:當我們計算平均分數時,我們不能排除任何項目。構成與此類似。沒有項目可以錯過。另一方面,聚合更爲鬆散。

一個有趣的比喻將是一個完整的箭頭和汽車的顫動。箭袋是箭的聚集,箭袋可以存在而沒有箭;汽車是一個組成部分(總和的部分)。並且不要爭辯說沒有車輪的汽車仍然是一輛車:)

至於參考文獻:http://www.bletchleypark.net/algorithms/software/oop.html

相關問題