【问题标题】:Association, Composition and Aggregation - Implementation with java关联、组合和聚合 - 使用 java 实现
【发布时间】:2012-11-14 05:57:17
【问题描述】:

我对@9​​87654322@ 有点困惑。尽管有大量的网站和论坛讨论这个话题,但在阅读了其中一些之后,我变得更加困惑。

我想知道以下是否正确:

1.) 聚合 - 如果整体被破坏,将存在。例如,Engine 可以在有或没有Car 的情况下存在。

2.) 组合 - 如果对象被销毁,则将不存在。例如,没有HouseRoom 就无法存在。

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);

   }
}

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

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

【问题讨论】:

标签: java associations uml composition aggregation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

        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

    【讨论】:

    • 你能给我举个例子,比如什么时候使用Association
    • @sharonHwk 我用一个链接编辑了答案。希望它会有所帮助。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-06-27
        • 1970-01-01
        • 2012-07-01
        • 2014-11-04
        • 1970-01-01
        • 2012-08-06
        • 2013-01-28
        • 2017-01-20
        • 1970-01-01
        相关资源
        最近更新 更多