Java 下面的代码是否是复合的?如果不是,那么如何使其复合?
刚开始学习OOPs概念,我对关系、聚合和组合有点困惑 我想知道下面的代码是否是合成的Java 下面的代码是否是复合的?如果不是,那么如何使其复合?,java,oop,composition,relation,Java,Oop,Composition,Relation,刚开始学习OOPs概念,我对关系、聚合和组合有点困惑 我想知道下面的代码是否是合成的 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;
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;
}
}
如果不是合成,那么如何通过考虑相同的示例来实现它
谢谢你聚合和组合让我想到了UML概念:第一个是实体和另一个实体之间的强大关系,而第二个是实体和另一个实体之间更强大的关系。
例如,合成器删除会触发在合成关系中而不是在聚合关系中删除合成实体 在Java中,通常只使用组合的概念,但它的含义并不相同。
这意味着一个对象/类由另一个对象/类组成。它是包装器的同义词。
我们经常反对继承 在您的情况下,
Person
不是从Dob
继承的,而是拥有一个Dob
字段。因此,它构成/包装了它
UML组合不是必需的,它不容易用Java对象进行翻译。当您使用ORM时,行删除和删除级联上的
概念更为自然
对于普通Java对象,对象的删除/收集由垃圾收集器(GC)执行。
因此,当另一个对象引用Dob
实例时,它将处于活动状态。
为了确保删除它,您可能应该使Dob
字段不可被任何其他对象访问,但构成它的Person
实例除外。
要实现它,您可以删除Person
中返回Dob
实例的getter。
这样,只要个人
有资格被GC收集,那么只有个人
对象引用的Dob
实例也将如此。是的。Person是使用DOB编写的,但是DOB不受Person约束,我仍然可以将其作为一个单独的对象,我不需要通过Person绑定DOB对象来实例化吗?我的意思是,我可以创建Dob对象,即使Person在Java对象中不存在,因为要建立组合关系,实际上应该只让Person来实例化Dob。就ORM而言,这并不重要,因为对象最终将在数据库表中表示为一行。
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);
}
}