Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下面的代码是否是复合的?如果不是,那么如何使其复合?_Java_Oop_Composition_Relation - Fatal编程技术网

Java 下面的代码是否是复合的?如果不是,那么如何使其复合?

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;

刚开始学习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;
}

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

}

}