i

Fachkonzept - Beziehung / Assoziation

Wie stellt man Verbindungen zwischen Objekten her?

Ein Software-Objekt kann nur dann ein anderes Software-Objekts veranlassen, eine Methode auszuführen, wenn es eine Verbindung zu dem anderen Software-Objekt hat.

Um ein solches In-Beziehung-Setzen von Software-Objekte zu realisieren, werden Software-Objekte mit Attributen versehen, mit deren Hilfe sie Referenzen auf "Beziehungspartner" verwalten können.

Referenzattribute

Wir betrachten als Beispiel ein Spiel-Objekt, das zwei Figur-Objekte steuern soll.

Damit das Spiel-Objekt Zugriff auf die Figur-Objekte erhält, wird es mit sogenannten Referenzattributen versehen.

Objektdiagramm

Das Spiel-Objekt verfügt über die Attribute f1 und f2, deren Werte Referenzen auf die entsprechenden Figur-Objekt sind.

Ein Spiel-Objekt kann nun auf Methoden und eventuell vorhandene öffentliche Attribute der Figuren f1 und f2 zugreifen. Die Spiel-Klasse könnte also z.B. folgende Form haben:

class Spiel {
   Figur f1;
   Figur f2;

   Spiel() {
      f1 = new Figur(...);
      f2 = new Figur(...);
   }

   void nachObenBewegen() {
      f1.gehe(0);
      f2.gehe(0);
      System.out.println("Figur 1 ist bei " + f1.x + f1.y);
      System.out.println("Figur 2 ist bei " + f2.x + f2.y);
   }
}

Beziehungen zwischen Objekten

Hinweis: Im folgenden sind die Klassendiagramme nicht in UML sondern Java-spezifisch.

Das Beziehungskonzept lässt sich so beschreiben:

Wenn ein Objekt über eine Referenz Zugriff auf ein anderes Objekt hat, so liegt eine (gerichtete) Beziehung zwischen den Objekten vor.

Um zu verdeutlichen, dass Objekte einer Klasse in Beziehung zu Objekten einer anderen Klasse stehen, wird im Klassendiagramm diese Beziehung durch einen Pfeil verdeutlicht.

Klassendiagramm

Die explizite Angabe der Attribute innerhalb der Spiel-Klasse ist dabei optional, da durch die Beschriftung der Beziehung klar wird, dass ein Spiel zwei Referenzattribute mit den Namen f1 und f2 vom Typ Figur besitzen muss.

Gleichwertig ist also folgende Darstellung:

Klassendiagramm

Zulässig wäre auch die folgende Darstellungsweise:

Klassendiagramm

Allerdings wird hier nur ausgedrückt, dass ein Spiel-Objekt eine Beziehung zu Figur-Objekten hat. Genauere Angaben fehlen.

Kennt-Beziehung / Hat-Beziehung

Man kann zwei unterschiedliche Arten von Assoziationen/Beziehungen unterscheiden. In einem Fall kennt ein Objekt ein anderes. Beide haben aber ein Eigenleben und existieren unabhängig voneinander. Im anderen Fall liegt eine Teil/Ganzes Beziehung vor. Ein Objekt hat dann das andere Objekt als Bestandteil. Oft werden die Teile dann vom besitzenden Objekt erzeugt.

Man unterscheidet zwischen einer Kennt-Beziehung (Assoziation), bei der die beteiligten Objekte ein Eigenleben führen, und einer Hat-Beziehung (Komposition), bei der ein Objekt auch für die Erzeugung (und Vernichtung) des in Beziehung stehenden Objekts zuständig ist.

Zur Unterscheidung dieser beiden Beziehungen benutzt man auch unterschiedliche Symbole zur Darstellung der Beziehungen. Die einfache Assoziation oder Kennt-Beziehung wird durch einen einfachen Pfeil dargestellt. Die Komposition oder Hat-Beziehung wird zusätzlich durch eine ausgefüllte Raute markiert.

Klassendiagramm

Im Beispiel könnte man argumentieren, dass das Spiel die Figur-Objekte f1 und f2 als Bestandteil hat und erzeugen muss. Deshalb handelt es sich um eine Hat-Beziehungen. Ob man das Objekt aktuelleFigur als Teil des Spiel-Objekts betrachtet, oder nur als Objekt, welches das Spiel-Objekt kennt, ist Ansichtssache. Jedenfalls wird es nicht bei der Erzeugung des Spiels erzeugt, sondern im Laufe des Spiels gesetzt. Deshalb macht es Sinn diese Beziehung als Kennt-Beziehung darzustellen.

Ob eine Kennt- oder Hat-Beziehung vorliegt ist nicht immer eindeutig. Eine Hat-Beziehung ist dabei eine spezielle Form der Kennt-Beziehung. Es ist also nicht falsch eine Hat-Beziehung als Kennt-Beziehung darzustellen, allerdings verliert das Klassendiagramm dann etwas an Aussagekraft.

Suche

v
7.1.3.1.5
dev.inf-schule.de/oop/java/beziehungen/gohome/konzept_beziehungen
dev.inf-schule.de/7.1.3.1.5
dev.inf-schule.de/@/page/gbJIf8UljFutrmV7

Rückmeldung geben