wwlhp@jdon.com
2003-07-04 08:17
我想举个通俗的例子。

你和你的心脏之间是composition关系

你和你买的书之间是aggregation关系

你和你的朋友之间是association关系

不知大家是否同意这个比方。

frenzieddragon
2003-07-04 15:13
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。

tomfan
2003-07-11 18:36
看来大家对组合的理解没有意义,因为他们直接有共同的lifetime ,

甚至,被component的对象是否能够被其他类所见需要component 对象的同意。

association 代表引用服务,但不会永久保存引用的入口,比如,仅仅是参数引用,用完就丢弃,是最弱连接。

aggregation 聚合代表永久引用或强引用,也许对象生成的时候就获得了该引用。

虽然他们直接没有生命期的约束。但是引用对象必须处理被引用对象义务消失的意外处理。

abcdhy
2003-07-12 23:21
我理解的不知对不对,请大家多多指点

例子是以 A 为主控类,B 为受控类.

组合是最紧密的关系,A 要处理 B 的生死,一般是一个对外不可见的内部对象.

聚合和组合差不多,但A 不要处理 B 的生死,一般是一个使用外部的一个数据,或者是一个可以让外部可见的内部对象.

关联就最松散了,可以用"知道"来理解,就是 A 知道 B,就是关联了.比如:参数,或者返回值类型等等.

abcdhy
2003-07-12 23:26
举一个简单的例子.

一个人和他的手的关系就是组合

一个人和他的衣服的关系就是聚合

一个人和他的邻居的关系就关联

不知道对不对?

猜你喜欢
6Go 上一页 1 2 3 4 5 6 下一页