Consejos para diferenciar las relaciones entre clases.

Puntos a tomar en cuenta para saber de que tipo de relación se está hablando, en particular la diferencia entre relación de uso, asociación y agregación, que no siempre es muy clara :

1.- Realizar el diagrama de secuencia que muestra la interacción de los objetos de manera temporal.

 Es importante poner en claro todos los objetos que son actores dentro de un escenario dado y que la secuencia en la cual entran en acción quede clara.

2.- Observar si la vida de dos objetos está 'intimamente' relacionada.

Intimamente significa que sus 'tiempos de vida' coinciden, esto es por ejemplo que un objeto al ser instanciado instancia a su vez a otro y cuando el primero es destruido, el segundo también.

Puede tratarse de una agregación:

 - Si NO hay comunicación bidireccional. Si hay una relación  todo/parte entre los objetos. Ejem: Una clase tiene entre sus atributos algunos objetos.
 
Agregación por valor o por referencia ?

- La agregación por VALOR es interesante cuando los objetos contenidos no varian, y si no es necesario de que continuen existiendo cuando el objeto contenedor desaparezca.

- La agregación por REFERENCIA es útil cuando los objetos contenidos se crean dinámicamente. Es necesario destruir los objetos creados de alguna forma.

Comentarios:

 La agregación es a veces mejor por que encapsula partes y secretos del todo, es ventajoso el hecho de que el objeto contenido sea destruido al momento en que se destruye el objeto contenedor. Su desventaja es que los acoplamientos son más fuertes que en la asociación. La comunicación se realiza desde el objeto agregado (todo) hacia sus partes (atributos).

3.- Si la vida de dos objetos no está intimamente relacionada:

Es una Asociación ?

 - Si no hay relación todo/parte.Si ambos objetos se hacen referencia  (comunicación bidireccional). Cada objeto tiene una referencia al otro.

Es una relación de uso ?

 - Si el objeto principal utiliza dentro de alguno de sus metodos a otro objeto para realizar alguna tarea y que este último desaparece cuando termina su uso. También ocurre si en alguno de los metodos se pasa como parámetro otro objeto. Debemos notar que una de las clases es cliente y la otra servidor.