黑马程序员技术交流社区

标题: 什么是聚集,聚合,组合? [打印本页]

作者: 马东华    时间: 2012-4-23 16:28
标题: 什么是聚集,聚合,组合?
请问一下大家,谁能解释一下聚集,聚合,组合,以及之间的关系,谢谢
作者: liqian    时间: 2012-4-23 16:38
聚合(聚集):指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。
组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
聚合和组合的区别在于:
    聚合关系是“has-a”关系,组合关系是“contains-a”关系;
    聚合关系表示整体与部分的关系比较弱,而组合比较强;
    聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
聚合∶分散的聚集到一起 组合∶几个独立部分组成的整体

作者: 赵嘉男    时间: 2012-4-23 16:47
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。
实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。
现实生活中:
人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。
class Hand{
}
class Computer{
}
组合:
class Person{
private Hand hand;
public Person(){
hand = new Hand();
}
}
聚合:
class Person{
private Computer computer;
public setComputer(){
computer = new Computer();
}
}
作者: 马东华    时间: 2012-4-23 16:58
liqian 发表于 2012-4-23 16:38
聚合(聚集):指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出 ...

谢谢,非常感谢
作者: 韩新凯    时间: 2012-4-23 17:01
本帖最后由 韩新凯 于 2012-4-23 17:02 编辑
liqian 发表于 2012-4-23 16:38
聚合(聚集):指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出 ...


那is a呢?聚集和聚合好像不是一个概念把?我对这部分不是很懂。
作者: 马东华    时间: 2012-4-23 17:03
赵嘉男 发表于 2012-4-23 16:47
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引 ...

谢谢,懂了




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