4

我有点困惑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;
    }
}

我认为如果它是一个聚合关联,那么应该有accessors and mutators定义。这个对吗 ?

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

作品

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

   }
}

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

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

4

4 回答 4

2

关联的类型对您如何实现它几乎没有影响。它是聚合或组合的事实只是语义上的差异。

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

于 2012-11-26T18:53:44.670 回答
1

对于 Vishal 的回答,您可以有一个 Employee 类扩展 Person 类,以便 Company 持有一个 Employee 而不是 Person,当公司被销毁时,Employee 会随之而来(作为垃圾收集)而不是 Person。这只是为了更符合现实,可能没有必要。

于 2013-06-19T12:53:20.233 回答
1

为了定义聚合关联,我们再举一个例子......一个人和一个公司......

一个人和一个公司是两个独立的实体,但是一个人可以在公司工作,他被称为员工……所以员工作为一个人存在于外部世界。所以即使公司灭亡,但人不会灭亡......

    public class Example {

    public static void main(String[] args) {
        Person p1 = new Person("Vishal");
        Company abc = new Company(p1);
    }


}

class Person{
    String name;
    public Person(String name) {
        this.name = name;
    }
}

class Company{
    Person employee;
    public Company(Person p1) {
        employee = p1;
    }
}

我没有深入了解公司和个人的实际定义,但我认为现在可以理解了。

而组合关联是公司与部门之间的关联。公司一旦灭亡,它的部门就没有任何意义,所以它必须灭亡……

组合关联的另一个例子是订单和订单的不同项目。您从在线商店订购了几本书 (3)。在这种情况下,如果订单被取消,则必须取消 3 个订单行(项目)。所以订单行的存在只取决于订单。

经理使用刷卡进入 XYZ 场所。经理对象和刷卡对象相互使用,但它们有自己的对象生命周期。换句话说,它们可以独立存在。这种关系中最重要的一点是没有单一的所有者。

而在聚合中,一个对象拥有另一个对象......

这是这三个概念的一个很好的链接......对于关联,您可以检查第二个要求...... http://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit

于 2012-11-26T19:28:59.680 回答
0

涵盖所有可能的关联 java 代码是一个困难的问题。最好的办法是下载 EclipseUML Omondo,它是一种 Java 到 UML 的圣经。此工具仅用于 UML 到 Java 的映射。没有 MDD 但实时同步。你可以看看你从你的类图中得到了什么代码。

该代码与图形类图实时同步,因此您可以根据需要多次播放和重做,以涵盖所有可能的 Java 代码。

仍然有一个 30 天的评估副本,即使最新版本仅保留给付费客户,您也有足够的时间查看 Java 代码应该是什么。

于 2012-11-27T10:32:12.587 回答