MezData-Logo Creative Commons License 2445 Lösungen Button :OOP: Beziehungen

Assoziationen (Beziehungen)

In welcher persitenten (dauerhaften) Beziehung stehen Flaschen-Objekte und Kisten-Objekte?
Hier können 0.24 viele Flaschen in einer Kiste sein.

Assoziation Beispiele für Kardinalitäten:
0..* 0 bis unbestimmt viele
* 0 bis unbestimmt viele
1..* 1 bis unbestimmt viele
0..1 0 oder 1
3..* 3 bis unbestimmt viele
6 genau 6
2,5 2 oder 5

Die Assoziation gibt an, ob sich die Objekte der beteiligten Klassen kennen.
Die Kardinalität gibt an, wie viele Objekte der beteiligten Klassen sich kennen.

Wichtiger Aspekt: Objekte die in "Beziehung" stehen, könnten sich Nachrichten schicken, Operationen ausführen.

Konkrete Fragestellungen in diesem Beispiel:

Übung: Zeichnen Sie für folgende Objektpaare die Klassendiagramme mit Assoziationsbezeichnung und Kardinalitäten:

  1. Auto - Reifen
  2. Buch - Seite
  3. PKW - Strasse
  4. Baum - Blätter
  5. Walkman - Kopfhörer
  6. Dirigent - Orchester
  7. Trainer - Spieler
  8. Orchester - Musiker

FrageWie kann eine Assoziation im Programmcode realisiert werden?

Navigationsrichtung (Zugriffsrichtung)

Beispiel: Die Kiste soll Operationen von Flaschen aufrufen können, dazu muss die Kiste die IDs ihrer Flaschenobjekte kennen. Die IDs (Verweise) sollen in einem Feld dieFlasche[] gespeichert werden können. Von der Kiste kann in Richtung der Flaschen "navigiert" werden, in der UML wird dies durch einen Pfeil kenntlich gemacht. Das Attribut dieFlasche[] wird in der Kiste implementiert. Ist die Zielklasse im Klassendiagramm vorhanden wird das Attribut als Rollenname an die Zielklassse geschrieben:

Navigation falsch

Ist die Zielklasse im Diagramm vorhanden wird das Attribut als Rollennamen verwendet:

Navigation richtig

Statt in einem Attribut in der Klasse wird die Bezeichnung dieFlasche[] als Rollenname der Beziehung angegeben!

Beispiel für einen Zugriff auf eine Flasche:

Java C++ Delphi
dieKiste.dieFlasche[2].oeffne()
dieKiste->dieFlasche[2].oeffne()
dieKiste.dieFlasche[2].oeffne()
 
dieKiste.dieFlasche[2].oeffne()
 

Wie man hier deutlich sieht, kann schon während der Analysephase für die Implementierung wertvolle Information eingetragen werden!

Bidirektionale Assoziationen

Greifen beide Assoziationspartner gegenseitig auf einander zu, können die Pfeile weggelassen werden. Umgegehrt folgt daraus, dass wenn keine Pfeile gezeichnet werden, an beiden Enden der Assoziation Rollennamen stehen müssen.

Rollen allgemein

Es können die Rollen innerhalb einer Beziehung angegeben werden:

 

Objektorientierte Analyse (OOA)

Gruppenarbeit: Ein Klassendiagramm für ein einfaches Ausleihsystem einer Bücherei soll 3 Klassen enthalten: Bücherei, Buch, Ausleiher.

  1. Zeichnen Sie die Assoziationen ein und benennen Sie diese.
  2. Geben Sie alle Kardinalitäten an.
  3. Vergeben Sie geeignete Rollennamen.
  4. Ergänzen Sie die Klassen um weitere Attribute

Aggregation, Komposition

Aggregation = Zusammensetzung, Komposition = Zusammenlagerung

Im Objektorientierten Softwareentwurf = Beziehung eines Teils zum Ganzen

Aggregation (shared aggregation)

Eine Aggregation ist eine spezielle Assoziation, sie liegt vor, wenn zwischen den Objekten der beteiligten Klassen eine Rangordnung gilt, die sich durch

bescheiben lässt. Man spricht auch vom Ganzen und seinem Teil. Die Objekte der Aggregation bilden einen gerichteten nicht zyklischen Graphen. Das bedeutet, wenn B Teil von A ist, kann A nicht Teil von B sein. Beispiel:

Eine Person ist Teil eines Freundeskreises. Sie kann aber durchaus mehreren Freundeskreisen angehören (-> shared). Aggregationen kommen in der gegenständlichen Welt selten vor.

Komposition (composite aggregation)

Eine Komposition ist eine starke Form der Aggregation, sie unterscheidet sich von der Aggregation durch folgende Eigenschaften:

Die Komposition modelliert also eine Objektverbindung, bei der die Teilklasse existenzabhängig von der Aggregatklasse ist:

Die Finger sind Teil genau einer Hand. In der Regel werden auch die Teile gelöscht, wenn das Ganze stirbt. Hier: Stirbt die Hand, so sterben auch die Finger. Es kann jedoch sein, dass die Finger vor dem Tod der Hand einer anderen Hand zugeordnet werden. Kompositionen werden häufig verwendet, um einen Erstell- und Löschzusammenhang von Objekten darzustellen.

Aggregationen und Kompositionen werden nur verwendet, wenn auf diesen Zusammenhang Wert gelegt wird. Im Zweifelsfall werden Sie weggelassen!

Erstellen Sie Klassendiagramme mit Aggregation, Komposition für folgende Beziehungen:


Es fehlt noch: