刚开始学习OOP概念,我在关系,聚合和组合方面有点困惑 我想知道以下代码是否为Composition
class Person {
String name;
Dob dob;
public Person(String name, int date, String month, int year) {
this.name = name;
dob = new Dob(date, month, year);
}
public String getName() {
return name;
}
public Dob getDob() {
return dob;
}
}
class Dob {
int date, year;
String month;
public Dob(int date, String month, int year) {
this.date = date;
this.year = year;
this.month = month;
}
@Override
public String toString() {
return date + " " + month + " " + year;
}
}
public class JavaApplication6 {
public static void main(String[] args) {
Person person = new Person("omar", 4, "march", 1996);
System.out.println(person.name + " " + person.dob);
}
}
如果不是通过考虑相同的例子如何实现它 谢谢你
答案 0 :(得分:1)
聚合和组合使我思考UML概念:第一个是实体与另一个实体之间的强关系,而第二个是实体与另一个实体之间更强的关系。 例如,合成器删除触发组合关系中的组合实体的删除,但不会在聚合关系中删除。
在Java中,只有组合的概念是常用的,它并不意味着相同的东西 这意味着一个对象/类由另一个组成。它是包装器的同义词 我们经常反对继承。
在您的情况下,Person
不会从Dob
继承,而是拥有Dob
字段。所以它组成/包装它。
UML组合不一定非常容易在Java对象方面进行翻译
使用ORM时更自然,行删除和on delete cascade
的概念是有意义的。
对于普通Java对象,删除/收集对象由垃圾收集器(GC)执行
因此,当Dob
实例被另一个对象引用时,它将处于活动状态
为了确保删除它,您应该使Dob
字段不能被任何其他对象访问,除了组成它的Person
实例。
要实现此目的,您可以删除返回Person
实例的Dob
中的getter
通过这种方式,只要Person
有资格被GC收集,Dob
实例也只会被Person
对象引用。