关联、组合和聚合 - 使用 java 实现
Posted
技术标签:
【中文标题】关联、组合和聚合 - 使用 java 实现【英文标题】:Association, Composition and Aggregation - Implementation with java 【发布时间】:2012-11-14 05:57:17 【问题描述】:我对@987654322@ 有点困惑。尽管有大量的网站和论坛讨论这个话题,但在阅读了其中一些之后,我变得更加困惑。
我想知道以下是否正确:
1.) 聚合 - 如果整体被破坏,将存在。例如,Engine
可以在有或没有Car
的情况下存在。
2.) 组合 - 如果对象被销毁,则将不存在。例如,没有House
,Room
就无法存在。
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
?我说的对吗?
注意:我再次用谷歌搜索,并访问了许多网站/论坛,试图消除我的疑虑。许多论坛上都发布了类似的问题,但我对此感到更加困惑。有人可以帮我消除我的疑虑。谢谢!
【问题讨论】:
差不多:***.com/questions/9862286/… 【参考方案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 代码应该是什么,即使最新版本只保留给付费客户。
【讨论】:
以上是关于关联、组合和聚合 - 使用 java 实现的主要内容,如果未能解决你的问题,请参考以下文章