2011-10-20 27 views
8

No estoy seguro de si uso correctamente el association and aggregation or composition diamond.Diagrama de clase UML Asociación vs (Agregación | Composición) -Diamantes

Usaría la Asociación para interfaces, porque no puedo instanciarlas. Al igual que lo hacen here por ejemplo. O para las clases estáticas, la misma razón.

Y los diamantes que uso solo para objetos que puedo crear instancias. Como las clases normales.

Pero no estoy seguro de si esta es la forma correcta de diferenciarlos, porque si check nuevamente, verá que no son tan específicos al respecto. En el UML 2.3 specification no pude salir más, así que ¿cómo lo estás usando?

Y hay una tercera manera, la línea punteada <> flecha, pero no tengo pegamento cuando usar esta. Entonces, ¿quizás me puedes ayudar con eso también?

Respuesta

16

Usaría la Asociación para interfaces, porque no puedo crear una instancia de ellas. Como lo hacen aquí, por ejemplo. O para las clases estáticas, la misma razón.

Y los diamantes que uso solo para objetos que puedo crear instancias. Como las clases normales.

Eso no es realmente cómo funcionan. Las tres formas (Asociación, Agregación y Composición) definen diferentes propiedades sobre una relación. Los tres se usan normalmente entre clases aunque también pueden relacionar interfaces. La asociación y la composición son las dos más fáciles:

  • La asociación (sin diamante) es la forma más general, lo que permite definir la cardinalidad y la navegabilidad en ambos extremos.
  • Composición (relleno de diamantes) es una relación de parte entera donde el "todo" (final con el diamante negro) "contiene" la parte. Impone dos restricciones clave:
    1. Solo puede haber 1 contenedor (es decir, la cardinalidad en el extremo es exactamente 1);
    2. Impone una responsabilidad del ciclo de vida de las piezas en general. Entonces el contenedor es responsable de crear y eliminar partes. Una parte no puede seguir existiendo si se elimina su contenedor.

agregación (diamantes sin relleno) se encuentra en algún punto intermedio. Es un poco como la composición, excepto que no obliga a las propiedades descritas anteriormente. Yo personalmente no lo uso. La semántica es demasiado clara para que valga la pena.

Y hay una tercera manera, la línea punteada <> flecha, pero no tengo pegamento cuando usar esta.

Creo que se refiere a la relación de dependencia. Es una forma de asociación más débil. A modo de ejemplo, tomar la siguiente definición de clase

class Foo { 

def bar(Baz: aParam) { 
    ... 
} 
} 

En este tipo de caso Foo tiene una dependencia de tipo Baz de su uso en la firma del método bar(). Sin embargo, no hay ninguna asociación entre ellos (no se puede discutir razonablemente, por ejemplo, la cardinalidad de la relación entre una instancia de Foo y una instancia de Baz).

Desde una perspectiva práctica diría:

  • puede utilizar rectas Asociaciones para el 80% + de las relaciones es muy probable que desee modelar
  • Composición probablemente es responsable de la mayor parte de los restantes escenarios
  • La dependencia puede ser útil en algunas circunstancias
  • Se puede pasar muy felizmente sin utilizar la agregación.

hth.

+0

de nada. – sfinnie

0

Vamos a establecer los términos. La Agregación es un metatermo en el estándar UML, y significa AMBAS composiciones y agregaciones compartidas, simplemente llamadas compartidas. Con demasiada frecuencia se denomina incorrectamente "agregación". Es MALO, porque la composición también es una agregación. Según entiendo, te refieres a "compartido".

Además de estándar UML:

compuesto - indica que la propiedad se agrega compositely, es decir, el objeto de material compuesto tiene la responsabilidad de la existencia y almacenamiento de los objetos compuestos (partes).

Así, Universidad de asociación cátedras es una composición, porque cathedra no existe fuera de la Universidad (mi humilde opinión)

semántica precisa de agregación compartido varía según el área de aplicación y modelador.

Es decir, todas las demás asociaciones se pueden dibujar como agregaciones compartidas, si solo sigue algunos de sus principios o de alguien más. También mira here.

Cuestiones relacionadas