java怎么理解组合/聚合关系给个例子最好能将细点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么理解组合/聚合关系给个例子最好能将细点相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

class Driver    
    //使用成员变量形式实现关联   
    Car mycar;   
    public void drive()   
        mycar.run();   
       
    ...   
    //使用方法参数形式实现关联   
    public void drive(Car car)   
        car.run();   
       

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

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

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

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

public Driver(Car car)   
    mycar = car;   

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

以上是关于java怎么理解组合/聚合关系给个例子最好能将细点的主要内容,如果未能解决你的问题,请参考以下文章

java 聚合和组合的区别?

面向对象——对继承关联聚合组合依赖的理解

java--依赖关联聚合和组合之间区别的理解

java--依赖关联聚合和组合之间区别的理解

Java如何实现动态的组合, Thinking in Java 这本书中 说过 动态的组合就是聚合, 谁能给我举个简单例子?

类图中的组合和聚合