6.2 Assoziationen zwischen Objekten
Eine wichtige Eigenschaft von objektorientierten Systemen ist der Austausch von Nachrichten untereinander. Dazu »kennt« ein Objekt ein anderes und bittet dieses, etwas zu machen. Dieses Kennen nennt sich Assoziation und ist vielleicht das wichtigste Werkzeug bei der Bildung von Objektverbänden.
Wir können uns etwa vorstellen, dass eine Disko einen Verweis auf einen DJ besitzt. Dann sind Disko und DJ zwei Objekte, die sich kennen. Gehen wir einfach davon aus, dass die Disko den DJ kennt, aber der DJ seine Disko nicht. Dann würde das in Java etwa so aussehen:
class Disko
{
DJ dj;
}
class DJ
{
String name;
}
Zur Laufzeit müssen natürlich noch die Verweise gesetzt werden.
DJ djSwing = new DJ();
djSwing.name = "Detlef Jonas Hausmaister";
Disko ü30 = new Disko();
ü30.dj = djSwing;
Assoziationen in der UML
In der UML existiert für Assoziationen ebenfalls eine grafische Darstellung. Die beiden Klassen sind durch eine Linie verbunden. Da jede Assoziation eine Richtung hat, lässt sich auch ein Pfeil am Ende der Assoziation anbringen, wenn die Assoziation einseitig ist, so wie in unserem Fall. In der Regel tauchen die Namen der Assoziation, wie in der UML-Grafik zu sehen, nicht als Variablennamen auf.
Hier klicken, um das Bild zu Vergrößern
Abbildung 6.2 Eine gerichtete Beziehung
Diese gerichteten Assoziationen sind in Java sehr einfach umzusetzen, wie wir im Beispiel gesehen haben. Beidseitige Assoziationen erfordern schon etwas mehr Programmieraufwand, da sichergestellt sein muss, dass beide Seiten eine gültige Referenz besitzen. Denn wird die Assoziation auf einer Seite aufgekündigt, etwa durch Setzen der Referenz auf null, dann muss auch die andere Seite die Referenz lösen. Am besten wird dies mit Zugriffsmethoden gelöst, etwa wie setzeDJ(), löscheDJ() bei der Disko und setzeDisko() und löscheDisko() beim Disc-Jockey. Hinzu kommt, dass die Disko sicherlich nicht nur einen DJ unter Vertrag stehen hat, sondern mehrere. Daher findet sich auf der Seite der Disko eine Datenstruktur - wie java.util.ArrayList -, die alle aktiven DJs speichert.
|