[問題] 有關Association,Aggregation 及 Comp …
最近在把之前寫好的程式轉成UML
順便看一下架構有沒有需要改變的地方
不過有幾個地方比較模糊
希望有經驗的大大可以解答一下
謝謝。
Association (關聯)
|A|────────>|B|
例1
class A
{
private:
B* itsB;
};
Aggregation (聚合)
例2
|Node|◇──────────>|Node|
class Node
{
private:
vector<Node*> itsNodes;
};
例3
|B|◇──────────>|A|
class A{…};
class B{ A* theA;…};
Composition (合成)
例4
|Car|◆─────────>|Carburetor|
class Car
{
public:
virtual ~Car() {delete itsCarb;}
private:
Carburetor* itsCarb
};
例5
|B|◆─────────>|A|
class A{…};
class B{A theA;…};
上述的例子都是在網路上找到的
比較有疑問的地方是
我覺的 例3 跟 例1 蠻像的
但一個卻分到Association,另一個卻是Aggregation
而 例4 跟 例3及例1 只差了一個 delete 的動作,就被分到 Composition
感覺上程式好像沒什麼差別,但圖示就有差
這個就是我有疑問的地方
該怎麼正確的分辦這三種 Association,Aggregation 及 Composition
一般我的寫法是以例3居多
另外以例3來說
main()
{
B* b = new B;
delete b;
}
這樣裡面的 theA 不也一樣被 delete 了(還是我的認知有誤)
還是說,其實 theA 還是佔著記憶體空間?
不然感覺跟 例4 一樣 @@
--
http://blog.pixnet.net/brian6724
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.188.59
推
06/02 21:53, , 1F
06/02 21:53, 1F
→
06/02 21:54, , 2F
06/02 21:54, 2F
→
06/02 21:55, , 3F
06/02 21:55, 3F
→
06/02 21:56, , 4F
06/02 21:56, 4F
→
06/02 21:57, , 5F
06/02 21:57, 5F
→
06/02 21:59, , 6F
06/02 21:59, 6F
→
06/02 21:59, , 7F
06/02 21:59, 7F
→
06/02 22:04, , 8F
06/02 22:04, 8F
→
06/02 22:05, , 9F
06/02 22:05, 9F
→
06/03 05:40, , 10F
06/03 05:40, 10F
→
06/03 05:41, , 11F
06/03 05:41, 11F
→
06/03 05:42, , 12F
06/03 05:42, 12F
→
06/03 05:43, , 13F
06/03 05:43, 13F
→
06/03 05:44, , 14F
06/03 05:44, 14F
所以我可以大致上下一個結論
你們看看對不對
Association 包含 Aggregation 及 Composition
所以如果懶一點,有關 Aggregation 及 Composition 的線都可以用
Association 來代替
如果要細分到 Aggregation 及 Composition 的話
Aggregation 是不會跟著物件消失而消失,也就是沒被 delete
(可能其它的地方還要用)
所以他們的宣告通常是
A* theA
用法有可能是會這樣用
B(A* aaa)
{theA = aaa;}
~B(){}
Composition 是會跟著物件消失而消失
所以他們的宣告通常會是
A theA
或是
A* theA 但在 ~b() 時會 delete theA
不知道這樣說對不對
:)
※ 編輯: aagogo 來自: 59.120.188.59 (06/03 10:04)
→
06/03 15:37, , 15F
06/03 15:37, 15F
→
06/03 15:37, , 16F
06/03 15:37, 16F
→
06/03 15:38, , 17F
06/03 15:38, 17F
→
06/03 15:39, , 18F
06/03 15:39, 18F
→
06/03 15:39, , 19F
06/03 15:39, 19F
→
06/03 15:40, , 20F
06/03 15:40, 20F
→
06/03 15:40, , 21F
06/03 15:40, 21F
→
06/03 16:08, , 22F
06/03 16:08, 22F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章