类的组合与聚合

还有一个类似的概念“组成(Composition,又译“组合”、“合成”)”,与聚合的区别就是部分类不能脱离整体类而存在。

对c++,形如:
classB1;
classB2;
classB3;
classA
{
B1b1;
B2&b2;
B3*b3;
};
B1,B2,B3都是部分类
B1与A的关系是组成关系。
B2、B3与A的关系是聚合还是组成要根据这一条:部分类是否能脱离整体类而存在。
在这里可以理解他们的生命周期是否同步。
如果b2,b3是通过外部传入的,形如:
public:
A(B3*b3)
m_b3=b3);
}
private:
B3*m_b3;
main()
B2bbb;
Aa(&bbb);
bbb并不会因为a的消亡而消亡。那么就是聚合关系。
反之,如果
m_b3是在A的构造函数new,在A的析构函数delete,两者生命周期一样,那么就是组成关系。
引用的情况类似。
个人感觉uml为了满足所谓通用性,使得对模型的描述很粗糙,并没有吹嘘的那么好。
仅供参考。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...