2009-08-05 41 views
60

En un diagrama de clase UML, ¿cuál es la diferencia entre una relación de asociación y una relación de dependencia?¿Diferencia entre asociación y 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 :)

Respuesta

34

What is the difference between dependency and association?:

En general, se utiliza 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 de 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á el cliente de la orden.

citar de la 3ª edición del UML destilada (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.

...

+6

¿Por qué responder, cuando Martin lo hace mucho mejor para ti? +1 – Randolpho

+3

Todavía no está del todo claro para mí, pero una cosa que sí entendí es que las dependencias son algo 'más débiles' que las asociaciones. Parece que las asociaciones son un subconjunto de dependencias, aunque, en mi opinión, al menos, la dependencia es una palabra * más fuerte * que la asociación. Esa pudo haber sido la fuente de la confusión. –

+0

Ese artículo lo dice bien. De hecho, se alinea con mis pensamientos. Así que sacando algunos puntos aquí: ** (1) ** No quieres mostrar cada dependencia en un diagrama UML - hay demasiados. Debes ser muy selectivo y mostrar solo los que son importantes para lo que sea que estés comunicando. ** (2) ** Si hay una asociación entre dos clases, también hay una dependencia. La asociación lo implica, al igual que una generalización. ** Tan obvio para inferir la dependencia es la relación algo superconjunto de otras relaciones UML ** – Mahesha999

42

Una asociación casi siempre implica que un objeto tiene otro objeto como un campo/propiedad/atributo (terminología 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.

3

Una dependencia es muy general y la reducción de la complejidad se trata de 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.

20

La dependencia es como cuando defines un método que toma una Cadena (en Java, C#, como una cadena es un objeto en ellas) 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. 
7

aquí: "Association vs. Dependency vs. Aggregation vs. Composition", que tienen una 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.

+0

Me gusta esta definición. La asociación es: I (la clase que hace referencia a otra clase) solo hace referencia a un objeto, no lo uso y los miembros de esa clase no me interesan. La dependencia es: uso algunos miembros, por lo tanto, si la clase a la que se hace referencia cambia, podría tener un impacto en mí. Si lo hice bien, ¡eso fue fácil de entender! – robsch

+0

La primera pregunta que me vino a la mente fue cuando leí su comentario: en el caso de la asociación, ¿por qué uno tendría una referencia a un objeto y no lo usaría? ¿Quiere decir que la referencia es solo un campo, solo para devolver si un cliente quiere saber sobre la referencia? – Rabiees

18

En términos OOP:

Asociación ->A HAS-un objeto C (como una variable miembro)

Dependencia ->A referencias B (como una 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 un more detailed answer.

+0

@Naruto_Uzumaki La agregación es una relación de parte entera. Una lista de reproducción y una canción, por ejemplo. Compruebe mi otra respuesta para una diferenciación más amplia entre Asociación, Dependencia y Agregación http://stackoverflow.com/a/34069760/1998422 –

+0

De _UML Distilled_ book de _Martin Fowler_: "Con las clases, las dependencias existen por varias razones: Una clase envía un mensaje a otro; una clase tiene otra como parte de sus datos; una clase menciona a otra como parámetro para una operación " –

+0

sí, tiene razón. Lo he solucionado. Mi disculpa es –

9

Dependencia - Un cambio en una clase afecta el cambio de clase que es 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 existe una cierta relación entre los 2 objetos

(uno a uno, uno-muchos, muchos-muchos)

asociación es de 2 tipos:

  1. Composición
  2. Agregación

    1) Composición - más fuerte Asociación o relación entre 2 objetos. Va a crear un objeto de una clase B dentro de otra clase Un

public class A { 
     B b; 
     public void setB(){ 
     this.b= new B(); 
     } 
    } 

Si borramos la clase A, no existirá B (B objeto se crea dentro de una única)

Otro ejemplo -Body & Liver .Liver no puede existir fuera del cuerpo.

2) Agregación - más débil tipo de Asociación 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 se elimina la clase A, B existirá exterior (B se crea fuera y se pasa a la clase A)

Otro ejemplo de esto: Hombre & coche. El hombre tiene un Auto pero Hombre & Coche existen de forma independiente.

+0

La dependencia es ámbito local, donde Asociación es el alcance de clase. – dimpiax

Cuestiones relacionadas