2009-04-08 31 views
22

En OOP, ¿cuál es la diferencia entre la composición (denotada por el diamante relleno en UML) y la relación de asociación (denotada por el diamante vacío en UML) entre las clases. Estoy un poco confundido. ¿Qué es la agregación? ¿Puedo tener un ejemplo convincente del mundo real?¿Cuál es la diferencia entre la relación Composición y Asociación?

+3

¿No significa Asociación en vez de Asociación? – Joey

+0

¿no son diferentes? –

+1

La asociación no es lo mismo que la agregación; en UML, la agregación se representa con un diamante vacío. – Rob

Respuesta

1

Por lo general, la composición significa que la vida útil del objeto contenido está limitada por la del recipiente, mientras que la asociación es una referencia a un objeto que puede existir de forma independiente.

Sin embargo, esta es solo la práctica que he observado. Odio admitirlo, ¡pero explorar las especificaciones de UML2 no está en mi lista de cosas divertidas que hacer!

1

existencia independiente.

Una factura se compone de artículos de línea.

¿Qué es una línea de pedido que no está en una factura? Es ... bueno, no es nada. No puede existir de forma independiente.

Por otro lado, una factura está asociada con un cliente.

El cliente tiene una existencia independiente, con o sin una factura.

Si las dos cosas tienen existencia independiente, que puede asociarse.

Si hay algo que no puede existir independientemente, entonces es parte de una composición.

11

Poseer y usar.

Composición: el objeto con la referencia posee el objeto a que se refiere, y es responsable de su "vida útil", su destrucción (y, a menudo la creación, a pesar de que se puede pasar en). También conocido como tiene una relación.

Asociación: el objeto con la referencia utiliza el objeto al que se hace referencia, puede no ser un usuario exclusivo, y no es responsable de lo referido a la duración del objeto. También conocido como uses-a relación.

La OP comentarios:

¿Puede proporcionar un ejemplo del mundo real. Además, ¿qué es la agregación? - Marc

Agregación: una asociación que es de una parte a la otra, y que no puede ser cíclica.

Ejemplos:

Composición: Un coche-tiene un motor, una persona tiene-una dirección. Básicamente, debe tener, controla el tiempo de vida. Asociación

: tiene un-Un conductor de coche, alguna instancia de clase tiene un-ErrorLogger. Lifetime no controlado, puede ser compartido.

Agregación: Un DOM (Document Object Model, es decir los objetos que componen un árbol de elementos HTML) Nodo-tiene un (a) selección de los nodos secundarios. El nodo es el nivel superior (bueno, más alto); "contiene" a sus hijos, no lo contienen.

+0

¿Puede proporcionar un ejemplo del mundo real. Además, ¿qué es la agregación? –

+1

El motor de automóvil es la agregación según Sommerville. La relación has-a significa agregación, no composición. La composición es una relación de parte. La "persona tiene una dirección-" es demasiado una agregación de acuerdo con http://www.c-sharpcorner.com/UploadFile/pcurnow/compagg07272007062838AM/compagg.aspx – Slazer

0

Composición significa que una parte del estado de la entidad está encapsulada por otro tipo, pero es conceptualmente parte del estado de la entidad. Por ejemplo, puede tener un tipo de dirección y un tipo de entidad de empleado que incluya una dirección.

Asociación significa que un tipo de entidad está asociado con otro tipo de entidad pero la entidad asociada no es conceptualmente parte del estado de la entidad. Por ejemplo, un empleado puede estar asociado con una empresa.

16

Aquí van algunos ejemplos:

  • ¡Soy empleado de una empresa, por lo tanto, estoy asociado a esa empresa. No soy parte de esto, ni lo compongo, pero sí estoy relacionado con él.

  • Estoy compuesto de órganos, que a menos que sean trasplantados, morirán conmigo. Esta es la composición, que es un vínculo muy fuerte entre los objetos. Básicamente, los objetos están compuestos por otros objetos. El verbo dice todo.

  • También hay otro tipo menos obligado de composición, llamada agregación. Una agregación es cuando los objetos están compuestos por otros objetos, pero sus ciclos de vida no están necesariamente vinculados. Usando un ejemplo extremo, un juguete de Lego es una agregación de partes. Aunque el juguete se puede desmontar, sus partes se pueden recombinar para hacer un juguete diferente.

+6

1, por ejemplo, lego ;-) – EricSchaefer

1

La composición es una relación más estricta que la agregación. La composición significa que algo está tan fuertemente relacionado con otra cosa que básicamente no puede existir de forma independiente, o si pueden, viven en contextos diferentes.

Ejemplo del mundo real: defina una ventana de GUI, y luego un campo de texto donde escribir algo. Entre la clase que define la GUI y la clase que define el campo de texto hay composición. Juntos, componen un widget que puede verse como una entidad en sí misma. Supongamos que elimina la ventana y elimina el campo de texto también.

La agregación es diferente, en el sentido de que el vínculo entre las dos entidades es temporal, inestable y ocasional. Un ejemplo del mundo real. Supongamos que tiene una base de datos de objetos que contienen múltiples instancias de datos. Ahora ejecuta un filtro para recopilar las instancias de datos que obedecen un criterio dado, y las instancias resultantes se insertan en una lista gráfica para que el usuario pueda verlas. Cuando el widget gráfico recibe los objetos, puede formar una agregación de estas entidades y presentarlas. Si el usuario cierra la ventana con la lista gráfica y esta última se elimina, los objetos de datos no se deben eliminar. Tal vez se muestren en otro lugar, o aún los necesites.

Además, en general, la composición se define en el momento de la creación. La agregación se define más adelante en la vida del objeto.

34

COMPOSICIÓN

imaginar una empresa de software que se compone de diferentes unidades de negocio (o departamentos) como almacenamiento BU, BU redes. BU del automóvil El tiempo de vida de estas Unidades Comerciales se rige por la duración de la organización. En otras palabras, estas Unidades Comerciales no pueden existir de manera independiente sin la firma. Esto es COMPOSICIÓN.(Es decir, la empresa se compone de unidades de negocio)

ASOCIACIÓN

La empresa de software puede tener abastecedores externos que sirven comida a los empleados. Estas empresas de catering NO SON PARTE DE LA EMPRESA. Sin embargo, están ASOCIADOS con la empresa. Los servicios de restauración pueden existir incluso si nuestra empresa de software se cierra. ¡Pueden servir a otra empresa! Por lo tanto, la vida útil de los proveedores de servicios no se rige por la duración de la empresa de software. Esta es la asociación típica

agregación

Considérese una unidad de fabricación de coches. Podemos pensar en Car como una entidad completa y Car Wheel como parte del automóvil. (En este punto, puede parecer que el composition..hold) La rueda puede crearse semanas antes de tiempo, y puede sentarse en un almacén antes de ser colocado en un coche durante el montaje. En este ejemplo, la instancia de la clase Wheel claramente vive independientemente de la instancia de la clase Car. Por lo tanto, a diferencia de la composición, en la agregación, ciclos de vida de los objetos implicados no son fuertemente acoplado.

+8

Entonces, ¿cuál es la diferencia entre la asociación y la agregación? – nawfal

+0

Buenos ejemplos, pero ¿podrías dar una explicación general? Entiendo que la pregunta no me la pidió. Gracias. – chischaschos

+0

@nawfal, del ejemplo anterior parece utilidad independiente de la parte sin todo – charany1

2

Creo que un ejemplo basado en código puede ayudar a ilustrar los conceptos dados por las respuestas anteriores.

import java.util.ArrayList; 

public final class AssoCia 
{ 
    public static void main(String args[]) 
    { 
     B b = new B(); 
     ArrayList<C> cs = new ArrayList(); 

     A a = new A(b, cs); 

     a.addC(new C()); 
     a.addC(new C()); 
     a.addC(new C()); 
     a.listC(); 
    } 
} 

class A 
{ 
    // Association - 
    // this instance has a object of other class 
    // as a member of the class. 
    private B b; 

    // Association/Aggregation - 
    // this instance has a collection of objects 
    // of other class and this collection is a 
    // member of this class 
    private ArrayList<C> cs; 

    private D d; 

    public A(B b, ArrayList<C> cs) 
    { 
     // Association 
     this.b = b; 

     // Association/Aggregation 
     this.cs = cs; 

     // Association/Composition - 
     // this instance is responsible for creating 
     // the instance of the object of the 
     // other class. Therefore, when this instance 
     // is liberated from the memory, the object of 
     // the other class is liberated, too. 
     this.d = new D(); 
    } 

    // Dependency - 
    // only this method needs the object 
    // of the other class. 
    public void addC(C c) 
    { 
     cs.add(c); 
    } 

    public void listC() 
    { 
     for (C c : cs) 
     { 
      System.out.println(c); 
     } 
    } 

} 

class B {} 

class C {} 

class D {} 
Cuestiones relacionadas