黑马程序员技术交流社区

标题: 一个小知识点,聚合和组合到底咋区分?那些情况用? [打印本页]

作者: 杨海波    时间: 2012-6-4 23:46
标题: 一个小知识点,聚合和组合到底咋区分?那些情况用?
看毕老师的视频,觉得这个东西老师没详讲一直不懂,聚合和组合到底咋区分?那些情况用?
作者: 杨天皓    时间: 2012-6-5 00:00
聚合是关联关系的一种特例,他体现的是整体与部分 拥有的关系。他们可以具有各自的生命周期,是可以分离的
比如学校与学员,公司和员工。

组合也是关联关系的一种特例,同样体现的也是整体与部分。但是它们是不可以分离的。整体的声明周期结束也就意味着部分的声明周期结束。
比如人和人的脑袋。
作者: 杜俊彪    时间: 2012-6-5 00:02
杨天皓 发表于 2012-6-5 00:00
聚合是关联关系的一种特例,他体现的是整体与部分 拥有的关系。他们可以具有各自的生命周期,是可以分离的
...

我也想问下,   这个有什么作用??   也就是我们怎么去用它;   
作者: 杨天皓    时间: 2012-6-5 00:12
杜俊彪 发表于 2012-6-5 00:02
我也想问下,   这个有什么作用??   也就是我们怎么去用它;

在实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。

聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。

作者: 曹操    时间: 2012-6-5 00:46
聚合就是组合的加强

作者: 张洁    时间: 2012-6-5 11:18
本帖最后由 张洁 于 2012-6-5 11:21 编辑

虽然都有合,但是还是有区别的哈~
定义上有区别:
聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体。
           如电脑和鼠标的关系。
组合:表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在。组合关系的“部分”,是不能在整体之间进行共享的。
           如人和眼睛的关系

组合是聚合的变种,加入了一些重要的语义。也就是说,在一个组合关系中,一个对象一次就只是一个组合的一部分,“整体”负责“部分”的创建和破坏,当“整体”被破坏时,“部分”也随之

当然名字这么像肯定有联系:
组合是聚合的变种,加入了一些重要的语义。
也就是说,在一个组合关系中,一个对象一次就只是一个组合的一部分,“整体”负责“部分”的创建和破坏,当“整体”被破坏时,“部分”也随之消失~

作者: 杨雪    时间: 2012-6-5 23:58
1:组合和聚合,毕老师没讲是因为现在还用不到。
上学期讲统一建模语言,在Rational Rose下用了不少。不过这个在初级使用中是不会用到的,据师兄说,一般做到架构会用得比较多。

2:聚合的UML表示法是  空心菱形+实线条+箭头,关系是  owns a ... (用英文好理解得多,个人认为,记住英文就行了)
   聚合是强版本的关联,被聚合的对象可以再被别的对象关联,所以聚合对象是可以共享的。
   百度解释:我的家和我之间具有一种强烈所属关系,我的家是可以分享的,而这里的分享又可以有两种,其一是聚合键的分享,比如你和你弟弟对
   这个家有着同样的强烈关联,二是聚合与关联的分享,如果你朋友来家里吃个便饭,估计也不会给他配一把钥匙。
3:组合:UML表示:实心菱形+实线+箭头, 关系  is a part of...   (例子就不举了,英文本身含义就是最好的解释。)

初级阶段,不必掌握,稍微知道一下就好,如果对统一建模语言感兴趣,你可以去看看相关的书。(张孝祥老师在交通灯里有画过类图,所以你看看书也行)
作者: 徐炯    时间: 2012-6-6 13:04
杨天皓 发表于 2012-6-5 00:12
在实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时 ...

内部类是不是组合的一种方式?组合还有其它的方式吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2