转载:http://blog.csdn.net/ocean181/article/details/6117369

UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别

三者描述对象的附属[也就是依赖]关系: 关联<聚合<组合, 依赖关系是逐渐加强的.

inheritance: "a kind of": 猫是一种动物,说明猫从动物继承;

association: 两者之间存在某种关联即可,很弱的关系,如student and course, 每个学生可以选不同的课,每门课上有不同学生;

aggregation: "consist of":整体与部分之间的关系,但这里部分可以脱离整体单独存在,如MP3上所插的耳机,MP3包含耳机,但这个耳机也可以单独存在,或者插在其他电脑上。

composition: 更强的aggregation,这里部分不能脱离整体而存在,这个部分是整体的私有财产。比如Apple Itouch上的电池,原则不能拆下来单独使用。

关联

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

class A
{
private:
B* itsB;
};

聚合

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

class Node
{
private:
vector<Node*> itsNodes;
};

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

从实现的角度讲,聚合可以表示为:

class A {...} class B { A* a; .....}

组合

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

class Car
{
public:
virtual ~Car() {delete itsCarb;}
private:
Carburetor* itsCarb
};
从实现的角度讲,组合实现的形式是: 

class A{...} class B{ A a; ...}

最新文章

  1. doT.js
  2. spring.net (3)依赖注入基础2
  3. Java程序员的日常 —— 多进程开发
  4. iOS Xcodebuild
  5. Xml文件操作的其中一个使用方法:
  6. Twisted网络编程入门
  7. 关于启明星系统(OA系统,预定系统,请假系统等)安全性的说明
  8. HTML 5 Web 存储-localStorage
  9. Android核心分析之十九电话系统之GSMCallTacker
  10. amoeba-mysql配置安装(收集整理)
  11. 插入排序之python实现源码
  12. PHP 注意问题
  13. Core Data数据持久性存储基础教程-备用
  14. 微信小程序简单入门2
  15. hibernate 基本配置文件及CRDU的操作和基本的HQL查询
  16. java1.8新特性
  17. python错误和调试
  18. linux中的set -e 与set -o pipefail
  19. UI自动化(六)js
  20. S2T40,第四章,简答4

热门文章

  1. 高阶组件(Higher-Order Components)
  2. AJPFX总结java InputStream读取数据问题
  3. CG Shader常用函数
  4. iOS圆形图片裁剪,原型图片外面加一个圆环
  5. MVVM没你想象的那么的好
  6. tomcat https协议
  7. error C2143: 语法错误 : 缺少“;”(在“&amp;”的前面)
  8. Vickers Vane Pump - Hydraulic Vane Pump Failure: Cavitation, Mechanical Damage
  9. PHP09 字符串和正则表达式
  10. C++变量和基本类型