聚合与组合
| 组合 | 聚合 |
定义 | 几个独立部分组成的整体 | 分散的聚到一起 |
标识 | 实心菱形加实线箭头表示 | 空心菱形加实线箭头表示 |
整体和部分的关系强弱程度 | 强 | 弱 |
与生存期的关系 | 部分对象与整体对象具有统一的生存期,一旦删除了整体对象,同时也就删除了部分对象。 | 部分对象与整体对象的生存期无关,一旦删除了整体对象不一定就删除了部分对象。 |
图 |
| |
例子 | 你和你的心脏之间是组合关系 | 你和你买的书之间是聚合关系 |
总结 | 异构性,部分和主体具有生命期上的一致性 | 同构性,主体和部分不具有生命期的一致性 |
共同点 | 表示类之间整体和部分的关系,都是关联的一种特例 |
关联与依赖
| 关联 | 依赖 |
定义 | 关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。 | 依赖是类与类之间的连接,依赖关系代表一个类依赖于另一个类的定义。 |
标识 | 用一条直线表示 | 用一条带箭头的虚线表示,箭头指向被依赖的一方。 |
类之间的强弱程度 | 很强的关系 | 较弱的关系 |
类之间关系的时间角度 | 持久关系,需保存 | 临时、短暂关系,不需保持 |
方向 | 不做说明,是双向;大部分情况下,是单向。 | 总是单向 |
例子 | 我和我的朋友是关联关系 | 人要过河,需要借用一条船,此时人与船之间的关系就是依赖 |
关联与聚合
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。
总结
他们的关系按强弱分有:依赖<关联<聚合<组合
聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。