4.1 Beziehungen zwischen Klassen

Eine objektorientierte Software besteht aus verschiedenen Objekten, die gemeinsam die an das Programm gestellten Anforderungen erfüllen. Dazu nutzen Objekte häufig Funktionalitäten – in der Regel Methoden – anderer Objekte.

Um ein anderes Objekt ansprechen zu können, merkt sich ein Objekt dessen Adresse mit Hilfe eines Attributs. Als Attributtyp wird die Klasse des anderen Objekts festgelegt. Mit Hilfe des Attributnamens kann das andere Objekt dann angesprochen werden.

4.1.1 Darstellung von Beziehungen im UML-Klassendiagramm

Jedes Attribut, dessen Typ wiederum eine Klasse ist, erlaubt den Kontakt zu einem entsprechenden Objekt. Im Klassendiagramm wird eine solche Beziehung durch eine Linie veranschaulicht, die die beteiligten Klassen verbindet. Die UML bezeichnet diese Beziehung als Assoziation. Die Objekte der verbundenen Klassen kommunizieren über diese Assoziation miteinander. Eine offene Pfeilspitze (>) an einem oder beiden Enden der Verbindungslinie gibt die Zugriffsrichtung (Navigationsrichtung) an. Objekte der Klasse am jeweils anderen Ende dürfen dann auf Objekte der Klasse, auf die die Pfeilspitze zeigt, zugreifen. Ein Kreuz (X) schließt den Zugriff auf Objekte der entsprechenden Seite durch Objekte der anderen Seite explizit aus.

Beispiel
UML-Klassendiagramm: Assoziationen
Abb. 4-1: UML-Klassendiagramm: Die Assoziationen steuert und bewegt sich auf

Ein Objekt der Klasse SzenarioAufgabe3_2 besitzt das Attribut robi. Mit Hilfe des Attributnamens robi kann das Objekt das ihm zugewiesene Roboter-Objekt ansprechen und durch den Aufruf entsprechender öffentlicher Methoden steuern.

Ein Roboter-Objekt besitzt das Attribut position. Mit Hilfe des Attributnamens position kann das Objekt auf das ihm zugewiesene Objekt der Klasse Position zugreifen und zum Beispiel nach dem Spielbrett-Objekt fragen, auf dem sich der Roboter gerade befindet.

Ein Objekt der Klasse Position besitzt das Attribut spielbrett. Mit Hilfe des Attributnamens spielbrett kann das Objekt auf das ihm zugewiesene Objekt der Klasse Spielbrett zugreifen und es zum Beispiel fragen, wie breit es ist.

Besitzt eine Klasse ein Attribut, dem ein Objekt einer anderen Klasse zugewiesen werden kann, besteht zwischen den beiden Klassen eine Beziehung, die in der UML Assoziation genannt wird. Assoziationen erlauben es den Objekten der verbundenen Klassen Kontakt aufzunehmen und miteinander zu kommunizieren.

Es ist sinnvoll, eine Assoziation mit einem Namen zu versehen. So wird deutlich, welcher Art die Beziehung zwischen den beteiligten Klassen ist. Ein kleines ausgefülltes Dreieck (►) gibt dabei die Leserichtung vor.

Merke: Assoziation

Befindet sich am Ende der Linie einer Assoziation eine offene Pfeilspitze (>), zeigt dies, dass ein Objekt der Klasse, auf die die Pfeilspitze zeigt, von einem Objekt der Klasse am anderen Ende der Linie angesprochen werden kann. Ein Kreuz (X) macht hingegen deutlich, dass dies nicht möglich ist.

Befindet sich an beiden Enden einer Assoziation eine offene Pfeilspitze, handelt es sich um eine zweiseitige (bidirektionale) Assoziation. Ist an einem Ende ein Kreuz und am anderen eine offene Pfeilspitze, liegt eine einseitige (unidirektionale) Assoziation vor. Ist an einem Ende weder eine Pfeilspitze noch ein Kreuz eingezeichnet, gilt die Assoziation als ungerichtet. Über ihre Richtung muss noch entschieden werden.

Merke: Zugriffsrichtung (Navigierbarkeit)

4.1.2 Unidirektionale vs. bidirektionale Assoziation

Welche Art von Assoziation in einem Modell gewählt wird, hängt von den jeweiligen Anforderungen ab.

Beispiel
  1. Von einem Versicherungsvertrag ausgehend soll es möglich sein, direkt auf das versicherte Auto zuzugreifen.

    Falls dennoch die Frage aufkommt, welcher Versicherungsvertrag zu einem bestimmten Auto gehört, muss bei jedem einzelnen Versicherungsvertrag geprüft werden, ob diesem das jeweilige Auto zugeordnet ist. Die Suche endet bei einem Treffer oder wenn alle Autos überprüft sind.

    Abb. 4-2: UML-Klassendiagramm: Assoziation (Beispiel a)
  2. Von einem Auto ausgehend soll es möglich sein, direkt auf den jeweiligen Versicherungsvertrag zuzugreifen.

    Falls dennoch die Frage aufkommt, welches Auto zu einem bestimmten Versicherungsvertrag gehört, muss bei jedem einzelnen Auto geprüft werden, ob diesem der jeweilige Versicherungsvertrag zugeordnet ist. Die Suche endet bei einem Treffer oder wenn alle Versicherungsverträge überprüft sind.

    Abb. 4-3: UML-Klassendiagramm: Assoziation (Beispiel b)
  3. Die in Teilaufgabe a) und b) genannten Anforderungen sollen beide möglich sein.

    Abb. 4-4: UML-Klassendiagramm: Assoziation (Beispiel c)