问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 聚合和组合的区别?

发布网友 发布时间:2022-04-29 10:38

我来回答

2个回答

热心网友 时间:2022-06-26 08:04

聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分

组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。

以上关系的耦合度依次增强(关于耦合度的概念将在以后具体讨论,这里可以暂时理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强)。由定义我们已经知道,依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,而组合则是一种更强的关联,所以笼统的来区分的话,实际上这四种关系、都是关联关系。 

聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中 


class Driver {   
    //使用成员变量形式实现聚合关系   
    Car mycar;   
    public void drive(){   
        mycar.run();   
    }   
}

假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。 

假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法 public Driver(Car car){   
    mycar = car;   
}

所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。

热心网友 时间:2022-06-26 08:05

组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如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(); } }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... C++中某个类聚合某个类是什么意思? C++类的聚合? C++ 类的聚集 MFC中如何实现列表视图的编辑,就是单击某一列时能修改其内容,求助高手!!急急!!希望说的详细一点! 建筑工程桩基技术人员的工作总结 市政工程个人工作总结 市政工程技术工作总结 精品 土建技术员个人工作总结 建筑施工技术员的工作总结范文,最好是基坑支护方面的 技术员的工作总结怎么写 施工技术员年度总结 建筑技术员个人总结 路桥技术员年终总结 工地技术员年度个人工作总结 《云南虫谷》8月上线,这部剧是讲述什么故事的? 《云南虫谷》究竟讲述的是一个什么故事呢? 《云南虫谷》即将上线,这部剧是讲述什么故事的? 潘粤明演的云南虫谷中,讲述了哪些故事呢? InDesign中如何批量修改文本框大小,使其符合页边距尺寸? indesign中的字体怎么批量替换?比如把缺失的字体统一替换为系统中有的字体 利用Word2010的给工具绘制图形时,可在文档的什么位置开始画起? ID软件中的字体如何变成另一个字体? 怎么使用2010版的word画图? 聚合反应的类型有哪些 C语言中,什么是聚合类型? 高分子化学中聚合反应都有哪些类型 类的聚集 聚合反应有哪几种类型? 聚合方法的分类 JAVA中什么是对象间的组合和聚合,两者有什么区别? 聚合物可分为哪几类? c#窗体中一个按钮单击修改文本框内容 另一个按钮单击时保存文本框内容 代码分别应该怎么写 欧龙龙plc编程软件怎样升级 欧姆龙编程软件9.2版本如何升级到9.3 在升级欧姆龙plc编程软件CX-Programmer出现这个怎么回事啊? 欧姆龙PLC编程软件CX-ONE 4.24可以用于WIN7 64 系统? 求欧姆龙PLC编程软件新版本,谢谢 夏普LCD-70LX850A怎么样?夏普LCD-70LX850A好吗 lcd-70lx850a屏幕通病 夏普70lx850a电源一开不用遥控就自动开机的吗 70寸液晶电视推荐,液晶电视保养方法 我是夏普安徽省总代理,夏普70寸现在也就13000多点,但是LCD-70LX850A还是得三万的 林冲人物形象分析结合事例