Assoziationen stellen strukturelle Beziehungen zwischen
Objekten unterschiedlicher Klassen dar. Sie stellen Verbindungen zwischen Instanzen von zwei oder mehr Klassen dar, die
für eine gewisse Dauer existieren. Das Gegenstück hierzu sind transiente Verbindungen, die beispielsweise nur für die
Dauer einer Operation existieren. Letztere Situationen können mit Kollaborationen modelliert werden, in denen die
Verbindungen nur in einem bestimmten beschränkten Kontext verfügbar sind.
Sie können mit
Assoziationen zeigen, dass Objekte über andere Objekte informiert sind. Manchmal müssen Objekte gegenseitige Referenzen
enthalten, um miteinander interagieren zu können, z. B. Nachrichten aneinander senden. Somit können sich Assoziationen
in manchen Fällen aus Interaktionsmustern in Ablaufdiagrammen oder Kommunikationsdiagrammen ergeben.
Die meisten Assoziationen sind binär (d. h. sie existieren zwischen exakt zwei Klassen) und werden als durchgezogene
Pfade gezeichnet, die zwei Klassensymbole miteinander verbinden. Eine Assoziation kann einen Namen haben, oder die Assoziationsrollen können Namen haben. Rollennamen werden bevorzugt, weil sie mehr Informationen
vermitteln. In den Fällen, in denen nur eine der Rollen benannt werden kann, sind Rollen Assoziationsnamen trotzdem
vorzuziehen, sofern die Assoziation unidirektional und von dem Objekt ausgehen soll, dem der Rollenname zugeordnet ist.
Assoziationen werden häufig während der Analyse benannt, wenn noch nicht genügend Informationen verfügbar sind, um die
Rollen ordnungsgemäß zu benennen. Wenn Assoziationsnamen verwendet werden, sollten diese den Zweck der Beziehung mit
einem verbalen Ausdruck verdeutlichen. Der Name der Assoziation wird auf bzw. neben dem Assoziationspfad platziert.
Beispiel
In einem Geldautomatensystem wird im Geldausgabefach das Geld bereitgestellt, das der Geldausgabeautomat
ausgibt. Damit der Geldausgabeautomat Geld ausgeben kann, muss er eine Referenz auf das Objekt
Geldausgabefach verwalten. Wenn dem Geldausgabefach das Geld ausgeht, muss das Objekt
Geldausgabeautomat benachrichtigt werden, d. h. das Geldausgabefach muss eine Referenz auf das Objekt
Geldausgabeautomat verwalten. Diese Referenz wird mit einer Assoziation modelliert.
Eine Assoziation zwischen dem Objekt Geldausgabeautomat und dem Objekt Geldausgabefach mit dem Namen
liefert den Wert.
Schlecht gewählte Assoziationsnamen können verwirrend und irreführend sein. Das folgende Beispiel veranschaulicht gute
und schlechte Namensgebungen. Im ersten Diagramm werden Assoziationsnamen verwendet, und obwohl sie syntaktisch korrekt
(verbale Ausdrücke) sind, liefern sie nicht viel Informationen über die Beziehung. Im zweiten Diagramm werden
Rollennamen verwendet und diese liefern viel mehr Informationen über die Art der Assoziationsbeteiligung.
Beispiele für gut und schlecht gewählte Assoziations- und Rollennamen
Jedes Ende einer Assoziation stellt eine Rolle dar, die eine Klasse in der Assoziation spielt. Jede Rolle
muss einen Namen haben, und die Rollen, die einer Klasse gegenüberstehen müssen eindeutig sein. Der Rollenname muss ein
Substantiv sein, das die Rolle des zugeordneten Objekts in Relation zum zuordnenden Objekt zum Ausdruck bringt. Ein
geeigneter Rollenname für Lehrer in einer Assoziation mit einem Kursabschnitt wäre beispielsweise
Dozent. Vermeiden Sie Namen wie hat und enthält, weil sie keine Informationen zur Art der
Beziehung zwischen den Klassen liefern.
Die Verwendung von Assoziationsnamen und Rollennamen schließt sich gegenseitig. Rollennamen sind
Assoziationsnamen generell vorzuziehen. Ausnahmen sind solche Fälle, in denen nicht genügende Informationen vorhanden
sind, um die Rollen angemessen zu benennen. (Dies ist häufig bei der Analyse der Fall. Beim Design müssen auf jeden
Fall Rollennamen verwendet werden.) Die Verwendung ungeeigneter Rollennamen ist ein Hinweis auf ein unvollständiges
oder mangelhaftes Modell.
Der Rollenname wird neben das Ende der Assoziationslinie platziert.
Beispiel
Schauen Sie sich die Beziehungen zwischen Klassen in einem Auftragserfassungssystem an. Ein Kunde kann zwei Arten von
Adressen haben: eine Adresse, an die Rechnungen gesendet werden, und eine Reihe von Adressen, an die Bestellungen
gesendet werden. Somit gibt es, wie im Folgenden gezeigt, zwei Assoziationen zwischen Kunde und Adresse. Die
Assoziationen sind mit der Rolle beschriftet, die die zugeordnete Adresse für den Kunden spielt.
Assoziationen zwischen Kunde, Adresse und Auftrag, die mit Rollennamen und Multiplizitäten
beschriftet sind
Sie können für jede Rolle die Multiplizität ihrer Klasse anzeigen, d. h. wie viele Objekte der Klasse einem
Objekt der anderen Klasse zugeordnet werden können. Multiplizität wird durch einen textbasierten Ausdruck zur Rolle
angegeben. Der Ausdruck ist eine durch Kommata getrennte Liste von Integer-Bereichen. Ein Bereich wird wie folgt
angegeben: Integer (der untere Wert), zwei Punkte, ein Integer (oberer Wert). Ein einzelner Integer ist ein gültiger
Bereich, und das Symbol '*' steht für "viele", d. h. eine unbegrenzte Anzahl von Objekten. Das Symbol '*' selbst
entspricht '0..*', d. h. jede beliebige Zahl einschließlich der Null. Dies ist der Standardwert. Eine optionale skalare
Rolle hat die Multiplizität 0..1.
Beispiel
Im vorherigen Beispiel wurden Multiplizitäten für die Assoziationen zwischen Auftrag und Kunde und zwischen Kunde und
Adresse gezeigt. Die Interpretation des Diagramms ergibt, dass einem Auftrag ein Kunde zugeordnet sein muss (die
Multiplizität ist 1..1 auf der Seite von Kunde), aber ein Kunde keine Aufträge haben muss (die Multiplizität ist 0..*
auf der Seite von Auftrag). Außerdem hat ein Kunde eine Rechnungsadresse, aber eine oder mehrere Lieferadressen. Wenn
Multiplizitäten aus Gründen der Übersichtlichkeit weggelassen werden, kann von einer Multiplizität von 1..1 ausgegangen
werden.
Das Merkmal Navigierbarkeit einer Rolle zeigt an, dass es möglich ist, mit der Assoziation von einer zuordnenden
Klasse zur Zielklasse zu navigieren. Dies kann auf mehrere Arten implementiert werden: durch direkte Objektreferenzen,
durch assoziative Arrays, Hash-Tabellen oder andere Implementierungstechniken, mit denen ein Objekt ein anderes
referenzieren kann. Navigierbarkeit wird durch einen offenen Pfeil angezeigt, der am Zielende der Assoziationslinie
neben der Zielklasse (das Navigationsziel) platziert wird. Das Navigierbarkeitsmerkmal ist standardmäßig aktiviert.
Beispiel
Im Beispiel mit dem Auftragserfassungssystem ist die Assoziation zwischen Auftrag und Kunde in
beide Richtungen navigierbar: Ein Auftrag muss wissen, welcher Kunde den Auftrag aufgegeben
hat, und der Kunde muss wissen, welche Aufträge er aufgegeben hat. Wenn keine Pfeilspitzen angezeigt
werden, ist die Assoziation in beide Richtungen navigierbar.
Im Fall der Assoziationen zwischen Kunde und Adresse muss der Kunde seine Adressen kennen,
aber die Adressen wissen nicht, welche Kunden (oder anderen Klassen, da viele Dinge Adressen haben
können) der Adresse zugeordnet sind. Deshalb ist das Navigierbarkeitsmerkmal auf der Kundenseite der Assoziation
inaktiviert. Es ergibt sich folgendes Diagramm:
Diagramm mit aktualisierten Klassen für Auftragserfassungssystem, das die Navigierbarkeit von Assoziationen zeigt.
Manchmal hat eine Klasse eine Assoziation mit sich selbst. Dies bedeutet nicht zwingenderweise, dass eine Instanz
dieser Klasse eine Assoziation zu sich selbst hat, sondern häufiger, dass eine Instanz der Klasse Assoziationen zu
anderen Instanzen derselben Klasse hat. Bei Selbstassoziationen sind Rollennamen von entscheidender Bedeutung, um den
Zweck der Assoziation abzuleiten.
Beispiel
Schauen Sie sich die folgende Selbstassoziation mit der Klasse Mitarbeiter an.
In diesem Fall kann ein Mitarbeiter eine Assoziation zu anderen Mitarbeitern haben. Wenn dies so ist, handelt es sich
um Vorgesetzte, und die anderen Mitarbeiter gehören zu ihrem Personalstamm. Die Assoziation ist in beide Richtungen
navigierbar, da Mitarbeiter in der Regel ihre Vorgesetzten kennen und umgekehrt.
Wenn Sie zwei Assoziationen zwischen Klassen zeichnen, bedeutet dies, dass Objekte doppelt verbunden sind: Ein Objekt
kann durch jede Assoziation mit anderen Objekten verbunden werden. Jede Assoziation ist unabhängig und unterscheidet
sich von der anderen durch den Rollennamen. Wie zuvor gezeigt, kann ein Kunde Assoziationen zu mehreren Instanzen
derselben Klasse haben, die jeweils einen anderen Rollennamen besitzen.
Wenn die Multiplizität einer Assoziation größer als eins ist, können die zugeordneten Instanzen geordnet sein.
Das Merkmal geordnet einer Rolle bedeutet, dass die Instanzen, die an der Assoziation beteiligt sind, geordnet
sind. Standardmäßig bilden sie eine ungeordnete Menge. Das Modell gibt nicht an, wie die Ordnung verwaltet wird.
Die Operationen, die eine geordnete Assoziation aktualisieren, müssen angeben, wo die aktualisierten Elemente eingefügt
werden.
Die einzelnen Instanzen einer Assoziation werden Verbindungen genannt. Eine Verbindung ist somit eine Beziehung
zwischen Instanzen. Nachrichten können in Verbindungen gesendet werden, und Verbindungen können Referenzen und
Aggregationen zwischen Objekten bezeichnen. Weitere Informationen finden Sie in Technik:
Kommunikationsdiagramm.
Eine Assoziationsklasse ist eine Assoziation, die auch Klassenmerkmale (z. B. Attribute, Operationen und
Assoziationen) besitzt. Sie wird als gestrichelte Linie ausgehend vom Assoziationspfad zu einem Klassensymbol
gezeichnet, das die Attribute, Operationen und Assoziationen für die Assoziation enthält. Die Attribute, Operationen
und Assoziationen gelten für die ursprüngliche Assoziation. Jede Verbindung in der Assoziation hat die angezeigten
Merkmale. Assoziationsklassen werden sehr häufig für die Abbildung von N:M-Beziehungen (siehe obiges Beispiel)
verwendet. Grundsätzlich sollten der Name der Assoziation und der Name der Klasse identisch sein, aber es können auch
unterschiedliche Namen verwendet werden, sofern dies erforderlich ist. Eine degenerierte Assoziationsklasse enthält
lediglich Attribute für die Assoziation. In diesem Fall können Sie den Namen der Assoziationsklasse weglassen, um die
Trennung zu verbergen.
Beispiel
Schauen Sie sich anhand des Mitarbeiterbeispiels von vorher den Fall an, in dem ein Mitarbeiter (Personal) für einen
anderen Mitarbeiter (Vorgesetzter) arbeitet. Der Vorgesetzte beurteilt seine Mitarbeiter in regelmäßigen Abständen und
macht sich dabei Gedanken über ihre Leistung über einen bestimmten Zeitraum hinweg.
Die Beurteilung kann weder ein Attribut des Vorgesetzten oder des Personals allein sein, aber die Informationen können
der Assoziation selbst zugeordnet werden, wie das folgende Beispiel zeigt:
Die Assoziationsklasse Beurteilung erfasst Informationen, die sich auf die Assoziation selbst beziehen.
Qualifikationsmerkmale werden verwendet, um die Gruppe der Instanzen, die einer anderen Instanz zugeordnet werden,
weiter einzuschränken und zu definieren. Ein Objekt und ein Qualifikationsmerkmal bestimmen zusammen eine eindeutige
Gruppe von Objekten in der Assoziation und bilden einen zusammengesetzten Schlüssel. Qualifizierung reduziert
gewöhnlich die Multiplizität der gegenüberstehenden Rolle. Die reine Multiplizität zeigt die Anzahl der Instanzen der
zugehörigen Klasse, die der ersten Klasse und einem bestimmten Qualifikationsmerkmal zugeordnet sind.
Qualifikationsmerkmale werden als kleine Kästchen an dem Ende der Assoziation gezeichnet, das der qualifizierenden
Klasse zugeordnet ist. Sie sind Teil der Assoziation, nicht die Klasse selbst. Ein Kästchen für ein
Qualifikationsmerkmal kann mehrere Werte enthalten. Die Qualifizierung basiert auf der vollständigen Liste der Werte.
Eine qualifizierte Assoziation ist eine Variante eines Assoziationsattributs.
Beispiel
Schauen Sie sich die folgende Präzisierung der Assoziation zwischen Position und Produkt an. Eine
Position hat eine Assoziation zum bestellten Produkt. Jede Position verweist auf ein und nur ein Produkt,
wohingegen ein Produkt in vielen Positionen bestellt werden kann. Indem Sie die Assoziation mit dem
Qualifikationsmerkmal Produktschlüssel qualifizieren, geben Sie außerdem an, dass jedes Produkt einen
eindeutigen Produktschlüssel hat und dass Positionen Produkten mit diesem Produktschlüssel zugeordnet
sind.
Die Assoziation zwischen Position und Produkt hat das Qualifikationsmerkmal Produktschlüssel.
Eine n-gliedrige Assoziation ist eine Assoziation zwischen drei oder mehr Klassen, in der eine Klasse mehrfach
vorkommen kann. n-gliedrige Assoziationen werden als große Rauten mit einem Assoziationspfad zu jeder beteiligten
Klasse gezeichnet. Dies ist das Symbol für ein traditionelles Entitätsbeziehungsmodell. Die binäre Form wird aus
Gründen der besseren Übersicht ohne die Raute gezeichnet, da in einem echten Modell Massen von Assoziationen enthalten
sind. n-gliedrige Assoziationen sind relativ selten und können auch modelliert werden, indem man sie zu Klassen
hochstuft. n-gliedrige Assoziationen können auch eine Assoziationsklasse haben. Dies wird gezeigt, indem eine
gestrichelte Linie von der Raute zum Klassensymbol gezeichnet wird. Rollen können Rollennamen haben, aber Multiplizität
ist komplizierter und wird am besten durch Auflisten der geeigneten Schlüssel angegeben. Wenn eine Multiplizität
angegeben ist, gibt sie die Anzahl der Instanzen an, die einem bestimmten Tupel der anderen N-1-Objekte entsprechen.
Die Verwendung n-gliedriger Assoziationen kann meistens durch die Verwendung von qualifizierten Assoziationen oder
Assoziationsklassen vermieden werden. Sie können auch durch herkömmliche Klassen ersetzt werden, obwohl damit die
Vorgabe verloren geht, dass jeweils nur eine Verbindung für ein bestimmtes Tupel beteiligter Objekte erstellt werden
kann.
|