Как написать Композицию и Агрегацию в Java - PullRequest
5 голосов
/ 25 марта 2012

Я хочу знать, как определить состав и код агрегации в Java.У меня есть код C ++, но я не понимаю, как писать в Java.

Композиция

class A {};
class B { A composited_A; };

Агрегация через указатель

class A {};
class B
{
A* pointer_to_A;
B(A anA){ 
pointer_to_A = &anA;
}

Может кто-нибудь, пожалуйста, скажите мне, как работают оба в JAVA.(Я знаю, что подразумевается под Композицией и агрегацией)};

Ответы [ 3 ]

8 голосов
/ 25 марта 2012

Сама Java просто не делает различий между композицией и агрегацией.Вы не можете выразить идею владения ссылкой в ​​системе типов Java - если вам явно нужно выразить владение, вы должны обозначить это другими способами (обычно просто путем создания нового объекта, который будет храниться в экземпляре класса).

Поскольку в Java есть GC, владение памятью вообще не нужно выражать;память принадлежит и управляется исключительно GC.Конечно, то же самое не относится к другим ресурсам, и здесь вы все еще можете выразить право собственности.

1 голос
/ 25 марта 2012

В Java на объекты ссылаются только указатели. Это означает, что поле типа A действительно является ссылкой на объект A. Это также означает, что это поле всегда начинается с нулевого указателя, и вы должны явно присвоить его new A() или как угодно.

Edit:

class B {
   A a;

   B(A a) {
      this.a = a;
   }

   B() {
      this(new A());
   }
}
0 голосов
/ 26 марта 2012

Я думаю, что это лучший способ выразить Композицию и Агрегацию с помощью Java-кода.

Композиция

public class Person  
{  
    private final Name name;  

    public Person (String fName, String lName)  
    {  
        name = new Name(fName, lName);  
    }  

    //...  
}  

Агрегация

public class Person  
{  
    private Costume currentClothes;  

    public void setClothes(Costume clothes)  
    {  
        currentClothes = clothes;  
    }  

    //...  
}  

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...