2012-03-25 42 views
5

Quiero saber cómo identificar el código de composición y agregación en java. Tengo el código C++, pero no entiendo cómo escribir en Java.Cómo escribir composición y agregación en java

Composición

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

agregación a través del puntero

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

Puede alguien por favor dígame cómo ambos están trabajando en JAVA. (Sé lo que significa Composition and aggregation) };

Respuesta

8

de Java en sí, simplemente no hace la distinción entre la composición y la agregación. No se puede expresar la idea de propiedad de una referencia en el sistema de tipo Java; si explícitamente se necesita expresar la propiedad, se debe denotar con otros medios (generalmente construyendo un nuevo objeto para almacenar en la instancia de una clase).

Dado que Java tiene un GC, la propiedad de la memoria no necesita expresarse en absoluto; la memoria es propiedad y está administrada únicamente por el GC. Por supuesto, lo mismo no es cierto para otros recursos y aquí es posible que desee expresar la propiedad.

1

En Java, los objetos solo se referencian mediante punteros. Esto significa que un campo de tipo A es realmente una referencia a un objeto A. También significa que ese campo siempre comenzará como un puntero nulo, y debe asignarlo explícitamente al new A() o lo que sea.

Editar:

class B { 
    A a; 

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

    B() { 
     this(new A()); 
    } 
} 
+0

Gracias. Pero podrías dar un ejemplo en código java. – Mifas

+0

Gracias. ¿Es esta agregación ?. – Mifas

+0

Depende de cómo uses 'a'. Normalmente, si la intención es composición, haces 'a' ser' final' para que nunca cambie, y luego te aseguras de que se le asigna un valor no nulo en el constructor. Si la intención es la agregación, puede proporcionar un método 'setA()' para cambiar 'a'. –

-1

Creo que esta es la mejor manera de expresar composición y agregación con código Java.

Composición

public class Person 
{ 
    private final Name name; 

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

    //... 
} 

agregación

public class Person 
{ 
    private Costume currentClothes; 

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

    //... 
} 

Source

Cuestiones relacionadas