关联、组合和聚合 - 用 java 实现

sha*_*Hwk 5 java uml associations composition aggregation

我有点困惑Association, Aggregation and Composition。尽管大量的网站和论坛讨论了这个主题,但在阅读其中一些内容后我变得更加困惑。

我想知道以下是否正确:

1.) 聚合——如果整体被破坏,聚合就会存在。例如, anEngine可以有或没有 a 存在Car

2.) 组合 - 如果对象被破坏,组合将不存在。例如,Room没有 a 就不可能存在House

3.) 关联 - 我不确定在什么情况下我们应该使用它。有人可以对此发表评论吗?

当涉及到为聚合、组合和关联编写 Java 代码时

4.)聚合

Class Car {

    private Engine engine;

    public void setEngine(Engine engine){
     this.engine=engine;
    }  

    public Engine getEngine(){
     return engine;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为如果是聚合关联,那么就应该accessors and mutators定义。它是否正确 ?

根据我对聚合的定义,我提到如果Car对象被销毁,则Engine可以访问。但是,我在上面的代码中没有看到这种情况发生。如果 Car 对象被销毁,将无法像car.getEngine(). 那么这是怎么发生的呢?

作品

Public House {
   private Room room;
   Public House (){
      room = new Room (int noRooms, String nameOfHouse);

   }
}
Run Code Online (Sandbox Code Playgroud)

我认为如果它是 a C0mposition,那么就不应该有任何accessor mutator函数。并且对象Room只能在构造函数内部创建。并且保存该对象的实例方法room必须是Private?我对么 ?

注意:我再次用谷歌搜索,并访问了许多网站/论坛试图消除我的疑虑。许多论坛中都发布了类似的问题,但我对此感到更加困惑。有人可以帮我解答我的疑惑吗?谢谢你!

JB *_*zet 2

关联的类型对实现它的方式几乎没有影响。它是聚合还是组合这一事实只是语义上的差异。

如果对象保存在某个数据库中,就会出现差异。在这种情况下,如果从数据库中删除容器对象,则包含的对象也会被删除或不删除,具体取决于关联的类型。