En un diagrama de clases 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 :)
Una asociación casi siempre implica que un objeto tiene el otro objeto como campo / propiedad / atributo (la terminología difiere).
Una dependencia normalmente (pero no siempre) implica que un objeto acepta otro objeto como parámetro de método, crea instancias o usa otro objeto. Una dependencia está muy implícita en una asociación .
fuente
En términos OOP:
Asociación -> A tiene un objeto C (como variable miembro)
Dependencia -> A hace referencia a B (como parámetro de método o tipo de retorno)
También hay una respuesta más detallada .
fuente
La dependencia es como cuando define un método que toma un String (en Java, C #, ya que el string es un objeto en ellos) como parámetro, entonces su clase depende de la clase String.
La asociación es como cuando declaras una cadena como atributo en tu clase. entonces su código está asociado con la clase de cadena.
fuente
La asociación es de 2 tipos-
Agregación
1) Composición - Asociación o relación más fuerte entre 2 objetos. Estás creando un objeto de una clase B dentro de otra clase A
Si eliminamos la clase A, B no existirá (el objeto B se crea solo dentro de A).
2) Agregación : tipo de asociación más débil entre 2 objetos.
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 coche, pero el hombre y el coche existen de forma independiente.
fuente
Aquí: "Asociación vs. Dependencia vs. Agregación vs. Composición" , tiene un gran vademécum con diagramas de clases 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.
fuente
Una dependencia es muy general y reducir la complejidad se trata de reducir las dependencias tanto como sea posible.
Una asociación es una dependencia fuerte (estática). La agregación y la composición son aún más fuertes.
fuente
La asociación es cuando un objeto solo tiene un enlace a otro y no usa métodos de objetos relacionales. Para rubí por ejemplo
Significa que puede obtener un objeto de perfil del usuario, pero el usuario no usa los métodos del perfil dentro de sí mismo (no depende de la interfaz de un perfil).
Dependencia significa que el usuario tiene un enlace a otro objeto y llama a los métodos de ese objeto dentro de sí mismo
Aquí, si el método de información del perfil se cambiará o cambiará el nombre, nuestra clase de usuario dependiente también debe cambiarse.
fuente