Video-Tutorial

Wenn Sie das Video nur anschauen, werden Sie kaum etwas lernen. Arbeiten Sie für den besten Lerneffekt am Rechner direkt mit und vollziehen Sie die Beispiele nach.

Folien



(letzte Synchronisation der PDF-Präsentation: 02.08.2017)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation

Ein gutes Tool, um Klassendiagramme inkl. Assoziationen herzustellen, ist das eUML2 Free-Plugin für eclipse (Anleitung).

Unter Assozationen verstehen wir Beziehungen zwischen Objekten/Klassen. Wir betrachten nur Beziehungen zwischen zwei Klassen.

Die programmiertechnische Implementierung von Assoziationen ist hier beschrieben: Implementierung von Assoziationen in Java. Das dort Gesagte gilt auch für andere Programmiersprachen.

Als Beispiel betrachten wir diese Beziehung zwischen Hund und Laus:

Jeder Hund hat Läuse im Fell sitzen, diese Läuse spielen die Rolle "Parasit". Jede Laus sitzt auf einem Hund, er hat für sie die Rolle "Wirt". Die Pfeile zeigen an, dass der Hund die Laus kennt (d.h. er weiß z.B., wie viele Läuse in seinem Pelz sitzen), die Laus weiß, auf welchem Hund sie sitzt.

Das war's schon! Nun etwas genauer:

1) Multiplizitäten

Die Schreibweise ähnelt der in ER-Diagrammen. Die kleine Zahl (oder Stern) bei einer Klasse zeigt an, wie viele zugeordnete Elemente die andere Klasse jeweils hat. Im Beispiel also: Jede Laus sitzt genau (und höchstens) auf einem Hund (sie kann ohne Hund nicht leben). Jeder Hund hat mehrere Läuse (evtl. auch keine oder nur eine).

Wir unterscheiden:

Multiplizität Bedeutung Beispiel
0...1 dem Objekt ist immer kein oder ein anderes Objekt zugeordnet Ein Artikel befindet sich in keinem Einkaufswagen (= noch im Regal) oder in maximal einem.
1 dem Objekt ist immer genau ein anderes Objekt zugeordnet Jede Laus sitzt immer auf genau einem Hund (ohne Hund kann sie nicht leben)
* dem Objekt ist kein, ein oder mehrere andere Objekte zugeordnet Auf jedem Hund sitzt keine, eine oder mehrere Läuse.
1...* dem Objekt ist ein oder mehrere andere Objekte zugeordnet Auf jeder Rechnung steht ein oder mehrere Artikel (eine Rechnung ohne Artikel ist sinnlos).

Übung Multiplizitäten

Tragen Sie die korrekten Multiplizitäten ein:

Klassendiagramm zum Eintragen der Multiplizitäten

Lösungsvorschlag

Klassendiagramm zur Aufgabe Multiplizitäten - Lösungsvorschlag

Jeder Hund hat einen oder mehrere Besitzer (Familienhund). Natürlich könnte man auch sagen, dass jeder Hund nur EINEN Besitzer hat, dann stünde links unten bei Besitzer eine 1 (und nicht 1...*). Jeder Besitzer hat einen oder mehrere Hunde (hätte er keinen Hund, wäre er kein Besitzer).

Jeder Hund hat mehrere Läuse (evtl. auch keine, deshalb nicht 1...*, sondern nur *), jede Laus sitzt genau auf einem Hund. Wenn eine Laus auch ohne Hund existieren könnte, dann stünde bei Hund 0...1.

Jede Laus besitzt mehrere Mützen (oder auch keine). Jede Mütze befindet sich im Besitz von höchstens einer Laus (möglicherweise liegt sie aber noch im Kaufladen und ist noch keiner Laus zugeordnet.

2) Navigierbarkeit

Die Navigierbarkeit sagt etwas darüber aus, ob die eine Klasse auf die andere zugreifen kann bzw. Objekte dieser Klasse KENNT.

Navigierbarkeit, Beispiel 1:

Beispiel Navigierbarkeit: Klassendiagramm Artikel - Rechnung

Es führt ein Pfeil von Rechnung zu Artikel. Die Rechnung "weiß", welche Artikel draufstehen, oder: Wenn ich eine Rechnung anschaue, sehe ich, welche Artikel sie enthält, oder: Ich möchte die Rechnung verändern können, indem ich Artikel hinzufüge, entferne. Kurz: Wenn ich ein Objekt der Klasse Rechnung habe, kann ich über dieses Objekt auf die zugehörigen Objekte der Klasse Artikel zugreifen.

Es führt KEIN Pfeil von Artikel zu Rechnung. Bei Rechnung ist sogar ein Kreuz, das bedeutet, dass Artikel Rechnung nicht kennen soll. Wenn kein Kreuz und kein Pfeil dasteht, bedeutet das, dass die Navigierbarkeit unspezifiziert ist, d.h. das Klassendiagramm trifft keine Aussage darüber.
Wenn ich einen Artikel anschaue, sehe ich nicht, auf welcher Rechnung er sich befindet, oder: Es ist nicht notwendig, dass ich den Zustand einer Rechnung durch Manipulation des Artikels verändere. Kurz: Wenn ich ein Objekt der Klasse Artikel habe, dann kann ich darüber nichts über irgendwelche Rechnungen in Erfahrung bringen (wäre ja auch unnötig, dass sich die Luftmatratze die 10.000 Rechnungen merkt, auf der sie vorhanden ist).

Navigierbarkeit, Beispiel 2

Beispiel Navigierbarkeit: Klassendiagramm Angestellter / Abteilung

(Dieses Beispiel nach Heide Balzert: Lehrbuch Der Objektmodellierung: Analyse und Entwurf mit der U.M.L. 2, S. 284)

Die Abteilung muss auf die Angestellten zugreifen, um die Gehaltsliste drucken zu können (dazu braucht sie bspw. den Namen der Angestellten)

Der Angestellte greift nicht auf die Abteilung zu, da er für korrektes Funktionieren keine Informationen braucht. (Welcher Angestellte wo arbeitet, kann man ja über Abteilung herausbekommen)

Es ist jedoch auch die Situation vorstellbar, dass der Angestellte einen Ausweis drucken können muss; auf dem Ausweis steht dann u.a. der Abteilungsname und das Gebäude, in dem sich die Abteilung befindet. Deshalb muss die Assoziation nun auch in diese Richtung navigierbar sein:

Beispiel für bidirektionale Assoziation

Unidirektionale und bidirektionale Assoziationen

unidirektional: nur in eine Richtung navigierbar
bidirektional: in beide Richtungen navigierbar

Übung zur Navigierbarkeit (1)

Das eclipse-Plugin eUML2 weigert sich, Assoziationen anzulegen, die an beiden Seiten nicht navigierbar sind. Warum?

Übung zur Navigierbarkeit (1)

Erstellen Sie zwei uni- und zwei bidirektionale Assozationspaare. Das Thema ist Ihnen freigestellt.

3) Rollen

Betrachten wir noch einmal das Beispiel von Hund und Laus:

Der Hund hat in Bezug auf die Laus die Rolle "Wirt"; Die Laus hat in Bezug auf den Hund die Rolle "Parasit"

Um zur korrekten Bezeichnung zu kommen, fragen wir: Welche Rolle spielt die eine Klasse für die andere?
Dabei sind die von eUML2 vorgeschlagenen Defaultwerte (nämlich einfach der Klassenname) meistens in Ordnung.

Die Rollennamen sind optional, d.h. sie können weggelassen werden. In der aktuellen Version (Stand 03/2013) erlaubt eUML2 das Weglassen von Rollen nicht; sofern die Rollenbezeichnung keine weiteren Implikationen auf die Umsetzung hat (siehe folgender Abschnitt), kann man einfach die Defaultwerte lassen. Auch den Default-Zugriffsmodifikator (private) kann man lassen, da man ja auf assoziierte Attribute über Getter und Setter zugreift.

Warum Rollenbezeichnungen wichtig sein können

Unterschiedliche Rollen in der Assoziation der Klassen Laus und LausMuetze

Im Beispiel sehen wir zweimal die Assoziation von Laus und LausMuetze.

Je nach Rolle, die die LausMuetze für die Laus spielt, unterscheidet sich hier auch die Multiplizität!

Beispiel 1: LausMuetze hat Rolle "besitztum" - Jede Laus kann mehrere Mützen haben.

Beispiel 2: LausMuetze hat die Rolle "kopfbedeckung" - Jede Laus kann maximal eine Mütze auf dem Kopf haben!

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: OOA/OOD Klassenmodellierung/Klassenbeziehungen: Assoziationen  *****


Java_32-Assoziationen - [1] Multiplizitäten

Tragen Sie in dieses Klassendiagramm die korrekten Multiplizitäten ein:

/16java/java32b_uebungen/1-schulsystem-multiplizitaeten.png





Java_32-Assoziationen: [2] Navigierbarkeit 1, Grundlagen

Das eclipse-Plugin eUML2 weigert sich, Assoziationen anzulegen, die an beiden Seiten nicht navigierbar sind (die also an beiden Seiten ein Kreuz hätten). Warum?





Java_32-Assoziationen - [3] Navigierbarkeit 2

Diskutieren Sie, ob die Navigierbarkeit hier korrekt angegeben ist:

/16java/java32b_uebungen/2-lehrer-schueler-navigierbarkeit.jpg




Java_32-Assoziationen - [4] Navigierbarkeit 3

Ergänzen Sie im folgenden Klassendiagramm die Navigierbarkeit:

/16java/java32b_uebungen/3-navigierbarkeit-ergaenzen.png




Java_32-Assoziationen - [5] Navigierbarkeit 4

Erstellen Sie im Klassendiagramm zwei uni- und zwei bidirektionale Assoziationspaare. Das Thema ist Ihnen freigestellt.





Java_32-Assoziationen - [6] Zusammenfassende Übung "Firma"

Zeichnen Sie im folgenden Klassendiagramm die korrekten Assoziationen ein (Rollen, Multiplizitäten und Navigierbarkeit).

/16java/java32b_uebungen/4-assoz_firma_uebung_leer.png







ERGÄNZENDE ÜBUNGEN




Java_32-Assoziationen: [7] Multiplizitäten bestimmen (Laus)

Tragen Sie in dieses Klassendiagramm die Multiplizitäten ein:
/16java/java32b_uebungen/5a_assoziationen_laus_multiplizitaet.png