还有一个类似的概念“组成(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为了满足所谓通用性,使得对模型的描述很粗糙,并没有吹嘘的那么好。
仅供参考。 原文链接:https://www.f2er.com/javaschema/285069.html