Ver Mensaje Individual
  #11 (permalink)  
Antiguo 11/07/2017, 22:39
Acertijo-007
 
Fecha de Ingreso: abril-2008
Mensajes: 1
Antigüedad: 16 años
Puntos: 0
Información Respuesta: Diferencia dependencia y asociacion, UML

Para explicar las diferencias voy a suponer que tengo dos clases A y B que poseen una relación de Dependencoa y también otra relación de Asociación.

Yo las diferencio basándome en los siguientes criterios

Definición

a) Dependencia (linea punteada con punta de flecha: Es una relación semántica entre dos clases, en la cual una utiliza el funcionamiento de la otra para realizar su tarea (ver patrón de diseño DELEGATE).

b) Asociación Bidireccional (linea continua sin punta de flecha): Es una relación estructural más fuerte que la dependencia. Relaciona a los objetos de forma bidireccional, creando una dependencia mutua entre ellos.

c) Asociación Unidireccional (linea continua con punta de flecha): igual que el anterior pero se establece una dependencia en un solo sentido


Acoplamiento

a) Dependencia: La clase A depende de la clase B, por lo que un cambio en la clase B podría afectar el funcionamiento de la clase A, no así a la inversa. A pesar de esto, se dice que es una dependencia débil, ya que el tiempo en el que los objetos de ambas clases están relacionados, sólo dura mientras se ejecuta el método en que el objeto A usa a B para realizar la tarea especifica.

b) Asociación Bidireccional: Ambas clases dependen de la otra, y por todo el tiempo de vida de sus objetos, por lo que esta relación tiene un acoplamiento mayor que la relación de dependencia.

c) Asociación Unidireccional: Los objetos de la clase A, que depende de los objetos de la clase B, está acoplados durante toda su vida, por lo que el acoplamiento es mayor al de la relación de dependencia y menor que la asociación bidireccional porque en este caso sólo una clase es dependiente.

Visibilidad

a)Dependencia: La clase A conoce a la clase B y puede llamar a sus métodos, la clase B en cambio no sabe de la existencia de la clase A

b) Asociación Bidireccional: ambas clases conocen a la otra y pueden llamar a sus métodos

c)Asociación Unidireccional: En este sentido igual a la dependencia.

Implementación (Tu respuesta)

a) dependencia: Se puede implementar de dos formas: La Clase A hace uso de la Clase B instanciándola directamente dentro de un método, o bien, recibiéndola como parámetro de entrada en uno de sus métodos. Ejemplo:

Instanciación dentro de un método

public void cualquierMetodo(){
ClaseA a = new ClaseA();
a.unMetodo();
}

Recibiendola como parámetro

public void cualquierMetodo(ClaseA a){
a.unMetodo();
}

b) Asociación Bidireccional: Tanto la clase A como la clase B incluyen entre sus atributos un objeto de la otra clase (Aquí es donde está la diferencia en el código), a diferencia de la dependencia en donde la clase B no forma parte de los atributos de la clase A. Ejemplo:

public class ClaseA {
private ClaseB b;
.....
}

public class ClaseB{
private ClaseA a;
.....
}

c) Asociación Unidireccional: Sólo la clase A incluye dentro de sus atributos a la clase B


IMPORTANTE: Nótese que en ningún caso he incluido colecciones de objetos, ya que en tal caso cuando la asociación posee multiplicidad 0..1...n a muchos pasamos a un caso especial de asociación que puede ser agregación, en el caso que el objeto contenido deba ser compartido por otros objetos (multiplicidad muchos a muchos) o que éste no sea necesario para la instanciación del objeto de la clase contenedora (multiplicidad 0 a muchos); o Composición cuando el objeto contenido sólo pueda pertenecer a un contenedor (1 a muchos) y sea requerido para crear al contenedor (1 a muchos)

Como puedes ver sí existen diferencias visibles en el código.

Casi se me olvida. También existen diferencias en como diseñar la base de datos dependiendo si es dependencia, asociación unidireccional, asociación bidireccional, agregación y composición. Te lo dejo como dato ya que ese es tema para otro post.

Última edición por Acertijo-007; 11/07/2017 a las 22:45 Razón: Añadir información