HSG

Aktuelle Seite: HSG/Fächer/Informatik/Material

Assoziation oder Kennt-Beziehung

Objekte werden nach Zuständigkeiten oder Verantwortlichkeiten ausgewählt. Oft läßt sich mit Erfolg eine Hierarchisierung mit Steuerobjekt und untergeordneten Hilfsobjekten durchführen. Normalerweise wird man hier Hat-Beziehungen (Aggregationen) modellieren.

So sind (bei uns, die wir Aggregation bisher in diesem engen Sinn aufgefasst haben) klare Verantwortlichkeiten für Erzeugung und Vernichtung aufgestellt. Ein Zugriff auf Methoden der Hilfsobjekte ist unproblematisch, da die "Adressen" natürlich von der Erzeugung her bekannt sind.

Manchmal soll aber ein Objekt von zwei und mehr anderen Objekten benutzt werden. Z.B. benutzen bei einem Datenübertragungsprogramm Sender und Empfänger die gleiche Netz-Hardware. Dh. es tritt die Situation auf, dass mindestens ein Objekt ein anderes benutzen will, das es nicht erzeugt hat (es besteht keine Hat-Beziehung). Nun kann man natürlich nur demjenigen eine Nachricht senden (dessen Dienste nutzen), den ich kenne. Die Kennt-Beziehung kann durch Übergabe einer Adresse, eines Zeigers realisiert werden.

Das Beispieldiagramm wurde mit UmlEd erstellt, das leider an eine Assoziation keine Pfeile macht und sie auch nicht beschriftet. Beides wurde mit einem Zeichenprogramm nachgebessert.
Was lesen wir nun für die Implementierung aus dem Diagramm heraus?
Zunächst muss ein Objekt vom Typ TTerminal 1 Objekt vom Typ TSender, 1 Objekt vom Typ TNetzHardware und 1 Objekt vom Typ TEmpfaenger erzeugen und am Ende seiner Lebensdauer auch wieder vernichten. Dazu ist wie anderswo gezeigt, ein Überschreiben des Konstruktors und des Destruktors nötig. Das Sender-Objekt und das Empfaenger-Objekt können aber bis jetzt nicht die Netzhardware nutzen, denn sie kennen ihre Adresse nicht. Was ist zu tun?
1. Es müssen in der Sender- und Empfaengerklasse Referenzvariablen für die Netzhardware eingerichtet werden.
2. In diese Referenzvariablen muss das Terminal-Objekt die Adresse der NetzHardware eintragen. Dazu sollten Sender- und Empfaengerklassen über eine Methode SetAdresseNetzHardware(adresse : TNetzHardware) (oder wie sie auch immer heißt) verfügen.
3. Das Terminal-Objekt muss diese Methoden auch zur Initalisierung aufrufen. Tut sie das nicht und will z.B. der Sender auf die Netzhardware zugreifen (er hat ja eine Referenzvariable), so erhalten wir den beliebtesten Fehler in der OOP: