我对Association, Aggregation and Composition
感到有点困惑。尽管有大量的网站和论坛讨论了这个话题,但在阅读其中一些内容后我变得更加困惑。
我想知道以下内容是否正确:
1。)聚合 - 如果整个被销毁,则存在。例如,Engine
可以存在或不存在Car
。
2。)组合 - 如果对象被销毁则不存在。例如,如果没有Room
,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
。这是对的吗?
根据我对Aggregation的定义,我提到如果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
?我是对的吗?
注意:再一次,我用谷歌搜索,并访问了许多网站/论坛试图清除我的怀疑。在许多论坛发布了类似的问题,但我只是对此更加困惑。有人可以帮助我清除我的怀疑。谢谢!
答案 0 :(得分:2)
关联的类型对您实现它的方式影响不大。它是聚合或组合的事实只是语义差异。
如果对象在某个数据库中持久存在,则会出现差异。在这种情况下,如果从数据库中删除容器对象,则也会删除包含的对象,具体取决于关联的类型。
答案 1 :(得分: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
答案 2 :(得分:1)
除了Vishal的答案之外,你可以让一个Employee类扩展Person类,这样公司就会拥有一个Employee而不是一个Person,当公司被销毁时,Employee会随之而去(收集为垃圾)而不是Person。这只是为了与现实更加相似,而且可能没有必要。
答案 3 :(得分:0)
覆盖所有可能的关联java代码是一个难题。最好的方法是下载EclipseUML Omondo,这是一种Java到UML圣经。此工具仅适用于UML到Java映射。没有MDD但是实时同步。 Yoiu可以查看您从类图中获得的代码。
代码是从图形类图中实时同步的,因此您可以根据需要多次播放和重做,以涵盖所有可能的Java代码。
仍有30天的评估版本,即使最新版本仅保留给付费客户,也可以让您有足够的时间查看java代码。