微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UML中的联系、聚合与组合的区别

UML中的联系(association)、聚合(aggregation)和组合(composition)三个概念很相似,也很难理解。今天看到这篇文章解释得很清楚,所以在这里转一下,希望能对需要的人有所帮助。

联系

联系(association)表明某个对象可以向另一个对象通过某种方式发送消息。发送消息的方法可以通过指针成员变量,也可以是方法参数、局部变量等等。例如:

class A
{
  private:
    B* itsB;
};

聚合

聚合(aggregation)是一种特殊的联系,它表明了“部分”到“整体”的关系,显著的特点就是不能包含循环的联系(就是说,部分中不能包含整体)。如:

class Node
{
  private:
    vector<node> itsNodes;
};</node>

上述代码只有当子节点不会成为父节点的父节点时(即,必须是树结构,不能是图结构),才能称之为聚合。

组合

组合(composition)跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说, “部分”的生命期不能比“整体”还要长。例如:

 

class Car
{
  public:
    virtual ~Car() {delete itsCarb;}
  private:
    Carburetor* itsCarb
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐