Unterschied zwischen Assoziation und Abhängigkeit?

90

Was ist in einem UML-Klassendiagramm der Unterschied zwischen einer Assoziationsbeziehung und einer Abhängigkeitsbeziehung?

Soweit ich weiß, ist eine Assoziation eine stärkere Beziehung als eine Abhängigkeit, aber ich bin mir nicht sicher, wie sie stärker ist.

Jedes Beispiel wäre mehr als willkommen :)

Charlie
quelle

Antworten:

49

Was ist der Unterschied zwischen Abhängigkeit und Assoziation? ::

Im Allgemeinen verwenden Sie eine Zuordnung, um so etwas wie ein Feld in einer Klasse darzustellen. Der Link ist immer da, da Sie immer eine Bestellung für seinen Kunden anfordern können. Es muss eigentlich kein Feld sein. Wenn Sie aus einer Perspektive mit mehr Schnittstellen modellieren, kann dies nur auf das Vorhandensein einer Methode hinweisen, die den Kunden der Bestellung zurückgibt.

Um aus der 3. Ausgabe von UML Distilled (jetzt heraus) zu zitieren: "Es besteht eine Abhängigkeit zwischen zwei Elementen, wenn Änderungen an der Definition eines Elements (des Lieferanten) Änderungen am anderen (dem Kunden) verursachen können." Dies ist eine sehr vage und allgemeine Beziehung, weshalb die UML eine Vielzahl von Stereotypen für verschiedene Formen der Abhängigkeit aufweist. In Bezug auf den Code implizieren Dinge wie das Benennen eines Parametertyps und das Erstellen eines Objekts in einer temporären Variablen eine Abhängigkeit.

...

Mitch Wheat
quelle
6
Warum antworten, wenn Martin es so viel besser für dich macht?! +1
Randolpho
5
Es ist für mich noch nicht kristallklar, aber eine Sache, die ich verstanden habe, ist, dass Abhängigkeiten etwas "schwächer" sind als Assoziationen. Es scheint, dass Assoziationen eine Teilmenge von Abhängigkeiten sind, obwohl zumindest meiner Ansicht nach Abhängigkeit ein stärkeres Wort ist als Assoziation. Das könnte die Quelle der Verwirrung gewesen sein.
Felipe
Dieser Artikel sagt es gut. Tatsächlich stimmt es mit meinen Gedanken überein. Ziehen Sie hier einige Punkte heraus: (1) Sie möchten nicht jede Abhängigkeit von einem UML-Diagramm anzeigen - es gibt viel zu viele. Sie müssen sehr selektiv sein und nur diejenigen zeigen, die für das, was Sie kommunizieren, wichtig sind. (2) Wenn zwischen zwei Klassen eine Assoziation besteht, besteht auch eine Abhängigkeit. Die Assoziation impliziert dies ebenso wie eine Verallgemeinerung. So offensichtlich, um auf Abhängigkeit zu schließen, ist eine etwas übergeordnete Beziehung anderer UML-Beziehungen
Mahesha999
1
Ihre Erklärung ist zu weit von den Beispielen aus der Praxis entfernt, sodass selbst Softwareentwickler kein klares Verständnis hatten.
Softninja
@ softninja: du meinst du hast es nicht verstanden. Alle anderen scheinen es akzeptabel zu finden. Oh und danke für die Ablehnung.
Mitch Wheat
70

Eine Zuordnung impliziert fast immer, dass ein Objekt das andere Objekt als Feld / Eigenschaft / Attribut hat (Terminologie unterscheidet sich).

Eine Abhängigkeit impliziert normalerweise (aber nicht immer), dass ein Objekt ein anderes Objekt als Methodenparameter akzeptiert, instanziiert oder ein anderes Objekt verwendet. Eine Abhängigkeit wird sehr stark von einer Assoziation impliziert .

Randolpho
quelle
Dies kommt der Art und Weise am nächsten, wie ich das Problem im Allgemeinen entscheide. Wenn die andere Klasse einen wesentlichen Beitrag zum Zustand oder Verhalten meiner Klasse leistet, handelt es sich um eine Assoziation. Strategieklassen sind also Assoziationen, auch wenn sie keinen eigenen internen Zustand haben. Wenn die andere Klasse lediglich einen Dienst für meine Klasse bereitstellt, handelt es sich um eine Abhängigkeit.
Schreckliche Kaulquappe
47

In OOP-Begriffen:

Assoziation -> A hat ein C- Objekt (als Mitgliedsvariable)

Abhängigkeit -> A verweist auf B (als Methodenparameter oder Rückgabetyp)

public class A {
    private C c;
    public void myMethod(B b) {
        b.callMethod();
    }
}

Es gibt auch eine detailliertere Antwort .

Ahmad Abdelghany
quelle
1
@Naruto_Uzumaki Aggregation ist eine ganzheitliche Beziehung. Eine Playlist & ein Song zum Beispiel. Bitte überprüfen Sie meine andere Antwort für eine breitere Unterscheidung zwischen Assoziation, Abhängigkeit und Aggregation stackoverflow.com/a/34069760/1998422
Ahmad Abdelghany
Aus dem UML Distilled- Buch von Martin Fowler : "Bei Klassen bestehen Abhängigkeiten aus verschiedenen Gründen: Eine Klasse sendet eine Nachricht an eine andere; eine Klasse hat eine andere als Teil ihrer Daten; eine Klasse erwähnt eine andere als Parameter für eine Operation"
Ahmad Abdelghany
24

Abhängigkeit ist wie wenn Sie eine Methode definieren, die einen String (in Java C #, da String ein Objekt in ihnen ist) als Parameter verwendet, dann ist Ihre Klasse von der String-Klasse abhängig.

Zuordnung ist wie wenn Sie eine Zeichenfolge als Attribut in Ihrer Klasse deklarieren. dann wird Ihr Code der Zeichenfolgenklasse zugeordnet.

String name = null //: is a association.
Shrikant Mali
quelle
"Zuordnung ist wie wenn Sie eine Zeichenfolge als Attribut in Ihrer Klasse deklarieren. Dann wird Ihr Code der Zeichenfolgenklasse zugeordnet." Wenn dies der Fall ist, was ist dann der Unterschied zwischen Assoziation und Zusammensetzung?
Dean P
16

Abhängigkeit - Eine Änderung in einer Klasse wirkt sich auf die Änderung in der abhängigen Klasse aus. Beispiel - Der Kreis ist abhängig von der Form (einer Schnittstelle). Wenn Sie die Form ändern, wirkt sich dies auch auf den Kreis aus. Circle ist also von Shape abhängig.

Assoziation - bedeutet, dass zwischen 2 Objekten eine bestimmte Beziehung besteht

(eins-eins, eins-viele, viele-viele)

Assoziation ist von 2 Arten-

  1. Komposition
  2. Anhäufung

    1) Zusammensetzung - stärkere Assoziation oder Beziehung zwischen 2 Objekten. Sie erstellen ein Objekt einer Klasse B in einer anderen Klasse A.

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

Wenn wir Klasse A löschen, existiert B nicht (B-Objekt wird nur in A erstellt).

Ein weiteres Beispiel: Körper & Leber. Leber kann nicht außerhalb des Körpers existieren.

2) Aggregation - schwächere Art der Assoziation zwischen 2 Objekten.

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 */
              }
   }

Selbst wenn Sie Klasse A löschen, existiert B außerhalb (B wird außerhalb erstellt und an Klasse A übergeben)

Ein weiteres Beispiel dafür - Man & Car. Der Mensch hat ein Auto, aber Mensch und Auto existieren unabhängig voneinander.

Deen John
quelle
Die Abhängigkeit ist der lokale Bereich, wobei die Zuordnung der Klassenbereich ist.
Dimpiax
10

Hier: "Assoziation vs. Abhängigkeit vs. Aggregation vs. Zusammensetzung" , Sie haben ein großartiges Vade-Mecum mit Uml-Klassendiagrammen und Code-Schnipsel. Der Autor gibt uns eine Liste von Beziehungen: Assoziation, Abhängigkeit, Aggregation, Zusammensetzung an einem Ort.

Raf
quelle
1
Ich mag diese Definition. Assoziation ist: Ich (die Klasse, die auf eine andere Klasse verweist) habe nur einen Verweis auf ein Objekt, ich benutze ihn nicht und die Mitglieder dieser Klasse sind für mich nicht interessant. Die Abhängigkeit ist: Ich verwende einige Mitglieder. Wenn sich also die referenzierte Klasse ändert, kann dies Auswirkungen auf mich haben. Wenn ich es richtig verstanden habe, war das leicht zu verstehen!
Robsch
1
Erste Frage, die mir beim Lesen Ihres Kommentars in den Sinn kam: Im Fall einer Assoziation - warum sollte man einen Verweis auf ein Objekt halten und es nicht verwenden? Meinen Sie damit, dass die Referenz nur ein Feld ist und nur zurückgegeben werden kann, wenn ein Kunde etwas über die Referenz wissen möchte?
H. Rabiee
3

Eine Abhängigkeit ist sehr allgemein und bei der Verringerung der Komplexität geht es darum, Abhängigkeiten so weit wie möglich zu verringern.

Eine Assoziation ist eine starke (statische) Abhängigkeit. Aggregation und Zusammensetzung sind noch stärker.

programmernovice
quelle