uml - asociacion - Diferencia entre asociación y dependencia?
asociacion uml (7)
En un diagrama de clase UML, ¿cuál es la diferencia entre una relación de asociación y una relación de dependencia?
Por lo que sé, una asociación es una relación más fuerte que una dependencia, pero no estoy seguro de cómo es más fuerte.
Cualquier ejemplo sería más que bienvenido :)
Dependencia : un cambio en una clase afecta el cambio en su clase dependiente. Ejemplo: el círculo depende de la forma (una interfaz). Si cambias la forma, también afecta a Circle. Entonces, Circle tiene una dependencia en Shape.
Asociación - significa que hay una cierta relación entre 2 objetos
(uno-uno, uno-muchos, muchos-muchos)
La asociación es de 2 tipos-
- Composición
Agregación
1) Composición - más fuerte Asociación o relación entre 2 objetos. Está creando un objeto de una clase B dentro de otra clase A
public class A { B b; public void setB(){ this.b= new B(); } }
Si eliminamos la clase A, B no existirá (el objeto B se crea dentro de A solamente).
Otro ejemplo -Body & Liver .Liver no puede existir fuera de Body.
2) Agregación : tipo de asociación más débil entre 2 objetos.
public class A {
B b;
public void setB(B b_ref){
this.b= b_ref;
/* object B is passed as an argument of a method */
}
}
Incluso si elimina la clase A, B existirá afuera (B se crea afuera y se pasa a la Clase A)
Otro ejemplo de esto: Man & Car. El hombre tiene un automóvil pero el hombre y el coche existen de forma independiente.
Aquí: "Asociación vs. Dependencia vs Agregación vs. Composición" , tiene un gran vademécum con diagramas de clase uml y fragmentos de código. El autor nos da una lista de relaciones: Asociación, Dependencia, Agregación, Composición en un solo lugar.
En términos de OOP:
Asociación -> A tiene un objeto C (como variable miembro)
Dependencia -> A referencias B (como parámetro de método o tipo de retorno)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
También hay una respuesta más detallada .
La dependencia es como cuando defines un método que toma un String (en Java, C #, como una cadena es un objeto en ellos) como un parámetro, luego tu clase depende de la clase String.
La asociación es como cuando declaras una cadena como un atributo en tu clase. entonces su código está asociado con la clase de cadena.
String name = null //: is a association.
Una asociación casi siempre implica que un objeto tiene el otro objeto como un campo / propiedad / atributo (la terminología es diferente). Una dependencia típica (pero no siempre) implica que un objeto acepta otro objeto como parámetro de método, instancia o usa otro objeto. Una dependencia está muy implicada por una asociación.
Una dependencia es muy general y disminuir la complejidad consiste en disminuir las dependencias tanto como sea posible.
Una asociación es una fuerte dependencia (estática). Agregación y Composición son aún más fuertes.
¿Cuál es la diferencia entre dependencia y asociación? :
En general, usa una asociación para representar algo así como un campo en una clase. El enlace siempre está ahí, ya que siempre puede solicitar un pedido para su cliente. No necesita ser realmente un campo, si está modelando desde una perspectiva más de interfaz, simplemente puede indicar la presencia de un método que devolverá al cliente de la orden.
Para citar la tercera edición de UML Distilled (ahora acaba de salir) "existe una dependencia entre dos elementos si los cambios en la definición de un elemento (el proveedor) pueden causar cambios en el otro (el cliente)". Esta es una relación muy vaga y general, por lo que UML tiene una gran cantidad de estereotipos para diferentes formas de dependencia. En términos de código, cosas como nombrar un tipo de parámetro y crear un objeto en una variable temporal implican una dependencia.
...