你和你的心脏之间是composition关系
你和你买的书之间是aggregation关系
你和你的朋友之间是association关系
不知大家是否同意这个比方。
不知大家是否同意这个比方。
例子是以 A 为主控类,B 为受控类.
组合是最紧密的关系,A 要处理 B 的生死,一般是一个对外不可见的内部对象.
聚合和组合差不多,但A 不要处理 B 的生死,一般是一个使用外部的一个数据,或者是一个可以让外部可见的内部对象.
关联就最松散了,可以用"知道"来理解,就是 A 知道 B,就是关联了.比如:参数,或者返回值类型等等.
一个人和他的手的关系就是组合
一个人和他的衣服的关系就是聚合
一个人和他的邻居的关系就关联
不知道对不对?
确实,他们的关系按强弱分有
关联<聚合<组合
我看大家主要分岐在聚合和组合上。说白一点,聚合这种关系是被包含的对象的个数是 0..* 而组合是 1..*
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系
举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合
一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。
但轮子没有了,车就没有了。 也就是部分消失了,整体也就消失了
tomfan写道“association 代表引用服务,但不会永久保存引用的入口,比如,仅仅是参数引用,用完就丢弃,是最弱连接。
aggregation 聚合代表永久引用或强引用,也许对象生成的时候就获得了该引用。虽然他们直接没有生命期的约束。但是引用对象必须处理被引用对象义务消失的意外处理。”
这也很有意思,这样实现的确很明确的体现了语义。当然不那样实现也没有问题,tomfan不也用了“也许”“直接”等词么!呵呵