java组合和聚合的区别和联系
发布网友
发布时间:2022-05-16 23:58
我来回答
共1个回答
热心网友
时间:2023-09-15 12:20
聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分
组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
以上关系的耦合度依次增强(关于耦合度的概念将在以后具体讨论,这里可以暂时理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强)。由定义我们已经知道,依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,而组合则是一种更强的关联,所以笼统的来区分的话,实际上这四种关系、都是关联关系。
聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中
class Driver {
//使用成员变量形式实现聚合关系
Car mycar;
public void drive(){
mycar.run();
}
}
假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。
假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法 public Driver(Car car){
mycar = car;
}
所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
java 聚合和组合的区别?
由定义我们已经知道,依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,而组合则是一种更强的关联,所以笼统的来区分的话,实际上这四种关系、都是关联关系。 聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中 class Driver {...
java 聚合和组合的区别?
组合:部分与整体是与生俱来的,部分的存在依赖于整体。比如人与人的某个器官,人一出生,器官就在,人死亡,器官也就没了意义。聚合:你与你的电脑(或者其它物品),电脑是属于你的吧,但是你是一出生就拥有了电脑吗,电脑是某个厂商生产出来的,然后你买过来才成为了你的一部分。你死了以后,电...
JAVA中什么是对象间的组合和聚合,两者有什么区别?
聚合和组合只有概念上的区别,在Java中的代码实现上没有区别。聚合:指的是整体与部分的关系 组合:表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期,即整体对象不存在,部分对象也将不存在
UML中聚合和组合的区别
由定义我们已经知道,依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,而组合则是一种更强的关联,所以笼统的来区分的话,实际上这四种关系、都是关联关系。 聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中 class Driver {...
组合和聚合关系是不是都可以看作 has-a??
「聚合」呢,在代码上和普通「关联」是一样的,只能从「业务含义」上区分,比如:汽车对象和轮胎对象,轮胎是汽车的构成部分,但可以脱离汽车单独存在,可以简单理解为:“没有生命的对象”,局部零件聚合成整体,局部可以脱离整体单独存在,是 has a 的关系,汽车有n个轮胎。「组合」呢,同样的,在...
Java如何实现动态的组合, Thinking in Java 这本书中 说过 动态的组合...
聚合和组合都属于关联,很难区分,但是只要记住一点,区分它们就容易多了:处于聚合关系的两个类生命周期不同步,则是聚合关系;处于组合关系的两个类的生命周期同步;eg:聚合关系,当A创建的时候,B不一定创建;当A消亡时,B不一定消亡。class A{ private B;} class B{ ...} 组合关系,当创建一...
java web 中什么是聚合工程
聚合就是由很多节点合到一起的一个工程,但是每个节点不能独立存在。有一个相对的概念叫组合,组合也有很多节点组成,但是它的每个节点可以独立存在。
谁能给我讲讲java语言继承?
如果没有继承,我们就必须在不同的派生类中重复定义相同的部分。什么时候使用继承? 什么时候使用组合、聚合?继承使用来描述不同类之间相似性的概念,当两个类之间存在“是一种”关系时,才可以使用继承。 组合和聚合是用来描述“整体、部分”关系,当两个类之间存在这种关系时,使用组合、聚合。
rxjava zip和merge的区别
跟merge的区别是:1.方法的参数不一样,zip有一个合并函数,merge没有,所以zip发射数据是合并函数的返回值,merge则是交错排列多个源Observable发射的数据。2.merge的终止不会受任何一个Observable的发射完成而终止,zip则只要有一个Observable的发射完成而终止发射 (merge和zip中只要有一个错误通知终止,...
一次讲清UML类图中的六大关系
类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合。3.2类图—依赖关系只要在类中用到对方,那么他们之间就存在依赖关系,如果没有对方,连编译都通过不了。类中用到对方的地方:类的成员属性 方法的返回类型 方法接收的参数类型 方法中使用到 依赖使用虚线箭头,箭头指向依赖者 3.3类图—泛化...