Ich habe UML schon eine Weile benutzt und ich habe einige Artikel, Bücher und Foren darüber gelesen, aber ich verstehe es immer noch nicht wirklich, wenn zwei Klassen mit einer Assoziationslinie verbunden werden sollen (eine einfache Linie oder ein Pfeil) sind das nicht die gleichen?)). Ich gebe drei Beispiele - können Sie mir sagen, welche die beiden Klassen in dieser Beziehung sein wird?
1.
%Vor%2.
%Vor%3.
%Vor%4.
%Vor%Zunächst steht ein Pfeil für navigability der Assoziation. Einfacher Pfeil bedeutet unidirektionale Relation, in diesem Fall kennt nur die Quellklasse die Zielklasse. Pfeil an beiden Enden bedeutet bidirektionale Relation, in der sich beide Klassen kennen. Wenn keine Pfeile vorhanden sind, kann die Zuordnung entweder bidirektional sein oder aus Gründen der Lesbarkeit unterdrückt werden. In der Praxis sollten Sie nur Pfeile zeichnen, wenn Sie die Richtung der Assoziation betonen möchten.
Wenn es um Ihre zweite Frage geht, beschreibt nur der erste Fall eine (unidirektionale) Assoziation zwischen MainClass
und OtherClass
. Weder Argumente noch Rückgabewerte implizieren eine Assoziation im UML-Sinne (obwohl beide eine Abhängigkeit implizieren). Im letzten Beispiel gibt es eine Assoziation zwischen MainClass
und Something
Klasse durch das Attribut something
. Als Faustregel sollten Sie nach Assoziationen in Attributen suchen.
Bitte beachten Sie, dass es in UML ein Konzept von dependency
gibt, das durch eine gestrichelte Linie dargestellt wird.
Pozdrowienia!
Bearbeiten: Antwort nach Diskussion in Kommentaren neu schreiben (danke an Schimpanse , um auf etwas hinzuweisen Ich habe in Beispiel 4 übersehen)
Beispiel 1: OtherClass ist ein Attribut von MainClass und wird daher als Assoziation modelliert.
Beispiele 2 und 3: OtherClass wird innerhalb der Klassendefinition referenziert, obwohl nicht in einem Attribut gespeichert, daher ist es eine Abhängigkeit.
Beispiel 4: Die Something-Klasse ist ein Attribut und daher eine Assoziation, während die referenzierte OtherClass nicht in einem Attribut gespeichert ist, und so ist es die Abhängigkeit.
Innerhalb von UML sind Abhängigkeiten und Zuordnungen beide Beziehungsarten und nicht eng miteinander verbunden (außer durch einen gemeinsamen Supertyp), obwohl eine Assoziation meiner Meinung nach eine Abhängigkeit impliziert.
Assoziationen werden durch eine Linie zwischen den 2 Klassen mit Multiplizitäten an jedem Ende angezeigt. Die Navigationsfähigkeit wird durch Pfeile angezeigt, die zeigen, welcher Klasse bekannt ist (z. B. Klasse A
Eine Assoziation repräsentiert zwei oder mehr verwandte Eigenschaften.
In Beispiel 1 hat MainClass eine Eigenschaft vom Typ OtherClass. Wenn OtherClass eine explizite Eigenschaft vom Typ MainClass hat, dann wird es eine bidirektionale Verbindung zwischen der Klasse geben; Wenn OtherClass eine implizite Eigenschaft vom Typ MainClass hat (d. h. es gibt kein Attribut, aber die Beziehung kann durch Arbeiten in der anderen Richtung abgeleitet werden), gibt es eine unidirektionale Verknüpfung von MainClass zu OtherClass.
In den Beispielen 2, 3 und 4 hat MainClass keine Eigenschaften vom Typ OtherClass. Es ist jedoch abhängig von der OtherClass, also würde es eine Abhängigkeitsbeziehung von MainClass zu OtherClass geben. Im Code wird dies durch mit oder # include dargestellt.
Ich verwende normalerweise zwei verschiedene Konnektoren in UML:
Wenn eine Klasse von der Implementierung eines anderen abhängig ist. Dies würde bedeuten, dass eine Klasse eine Instanz eines anderen erstellt oder handhabt. Die aufrufende Klasse ist also abhängig von der Implementierungsklasse. Dies wäre in all Ihren Beispielen offensichtlich.
Wenn eine Klasse erweitert oder implementiert wird.
Tags und Links uml