今天python提出一个问题,组合和聚合之间存在什么样的区别。虽然很早前我就看过,但是毕竟是三四年前的事情了。经过上网查找资料,大部分的说法如下:
组合和聚合都是整体和部分的关系,不同点在于是否控制从属对象的生命期。比如人和鞋子的关系,如果一个人死了,但是他穿的鞋子还在,这就是一种聚合关系。人和跳动的心脏的关系,如果一个人死了,那么心脏不再跳动,这就是组合的关系。虽然都是一种从属关系,组合控制从属对象的生命期。但是他们的实现形式都是相同的,组合是一种特殊的聚合关系。
下面的代码为python所写,经过我们的讨论,基本上就是组合和聚合的体现:
组合:
class B
{
};
class A
{
B _b;
};
当A的对象析构的时候,B的对象同时也被析构掉,因此A的生命期影响着B的生命期。
聚合:
class A
{
private:
B* _ptrB;
public:
void SetByPtr(B* b)
{
_ptrB=b;
}
};
这样,在B的对象析构掉的时候,可能删除掉指针_ptrB,但是此指针指向的对象并未被析构,也就是B的对象的生命期对A对象的生命期没有影响