2011-08-25 19 views
6

Sé que hay forma diferente de reprentation para la conversión de la Asociación, Agregación y composición en java. Pero cuando los convertimos en código (clases de Java) todos están representados de la misma manera. Al igual que el alumno enseñado por el profesor, que es la asociación se representará con la clase del alumno que tiene la variable de instancia del profesor de la clase.Conversión de asociación, agregación y composición en código en java?

El departamento tiene profesores, que es la agregación también se representará con la clase Departamento que tiene variable de instancia (matriz) de Profesores de clase.

La universidad tiene departamentos cuya composición también se representará con la clase de la Universidad con la variable de instancia (conjunto) del departamento de la clase.

Así que todos se repre- sentan de la misma manera en términos de código. Entonces, ¿qué beneficios proporcionan los términos Asociación, Agregación y composición al desarrollador?

Respuesta

4

Te estás perdiendo parte de la historia con Composition. Establece un par de propiedades adicionales:

  • inmutabilidad de la matriz (es decir, el niño no puede cambiar los padres)
  • responsabilidad del ciclo de vida de los niños recae en los padres. es decir, el padre es responsable de crear y eliminar instancias hijo. El niño no puede vivir después de que el padre muere.

Tiene razón en que la asociación se manifestará como una referencia/colección de referencias en el elemento secundario & respectivamente. Pero el código también debe hacer cumplir las reglas anteriores si es para garantizar que la semántica de Composición se aplique.

En cuanto a Agregación: Yo no lo uso. La semántica es demasiado flexible y no ofrece ventajas sobre las asociaciones directas.

hth.

+0

sfinnie haberme perdido tanto los puntos. Point1: - Si tenemos en cuenta el ejemplo de composición en el post original, ¿estás diciendo que clase de la Universidad debe tener variable de instancia (matriz) del departamento de clase como FINAL.If no cómo nos representará en el código. Punto 2: - Sí, estoy de acuerdo con su punto, pero no hace la diferencia cuando convertimos el diagrama uml en codificación porque seguirá siendo una variable de instancia simple. –

+0

punto 1: sí. Punto 2: No se trata solo de la referencia. La semántica compuesta UML requiere "Si se elimina un compuesto, normalmente se eliminan todas sus partes con él" (superestructura UML 2.3, página 40). En lenguajes que no son de GC como C++, esto significa que el código de destructor debe garantizar que todos los elementos secundarios se eliminen antes de que se elimine el elemento principal. Para entornos de GC esto es menos obvio. Sin embargo, hay expresiones idiomáticas - tales como el enfoque "Raíz agregado" popularizado por el dominio Driven Design - en el que la única manera de crear (o eliminar) un niño es a través de métodos en la matriz misma ... (CTD). – sfinnie

+0

... así que en el/OrderLine escenario prototípico Orden, la única manera de añadir un OrderLine de un pedido es llamar Order.AddOrderLine() (de manera similar para la eliminación). Entonces, para resumir: no hay un análogo declarativo directo en el código que denota un Compuesto. En cambio, debes construir el comportamiento de forma procesal. Por lo tanto, identificar compuestos en el código requiere una cantidad de 'reconocimiento de patrones'. Si la referencia es definitiva, y la única forma de crear/eliminar un elemento secundario es a través de la interfaz de los padres, entonces la relación probablemente sea compuesta. hth. – sfinnie

Cuestiones relacionadas