Q1 OOP in Java

Assoziationen und Multiplizitäten

Lösung geprüft

Die Aufgabe der heutigen Stunde sind Assoziationen und Multiplizitäten! Kein Code diesmal, sondern UML. Es geht um die Frage, wie viele Objekte einer Klasse mit einem Objekt einer anderen Klasse in Beziehung stehen – und die Antwort steht als kleine Zahl am Ende des Strichs.

Die Aufgabenstellung lautet

Übung Multiplizitäten: Tragen Sie die korrekten Multiplizitäten ein. Gegeben ist ein Diagramm mit den Klassen Direktor, Sekretaerin, Lehrer, Schueler und Hausmeister, die durch Assoziationen verbunden sind.

Die vier Schreibweisen

Bevor es losgeht – das ist alles, was man kennen muss:

NotationBedeutung
1Dem Objekt ist immer genau ein anderes Objekt zugeordnet
0..1Immer kein oder ein anderes Objekt – die Beziehung ist optional
*Kein, ein oder mehrere Objekte
1..*Ein oder mehrere, aber mindestens eins
a..bMindestens a, höchstens b

Im OneNote stehen alle vier Schreibweisen an einem einzigen Beispiel zusammen. Daran sieht man am besten, dass an jedem Ende eine eigene Zahl steht:

classDiagram
    Direktor "1" -- "*" Sekretaerin
    Direktor "1" -- "1..*" Lehrer
    Schulsozialarbeiter "0..1" -- "1..*" Lehrer
Die vier Multiplizitäten an einer Schule

Meine Lösung

BeziehungMultiplizitätGelesen als
Direktor — Sekretaerin1 … *Ein Direktor hat keine, eine oder mehrere Sekretärinnen. Jede Sekretärin hat genau einen Direktor.
Direktor — Lehrer1 … 1..*Eine Schule hat genau einen Direktor und mindestens einen Lehrer.
Sekretaerin — Schueler1..* … *Das Sekretariat betreut alle Schüler; jeder Schüler hat mindestens eine Ansprechpartnerin.
Lehrer — Schueler1..* … 1..*Ein Lehrer unterrichtet mehrere Schüler, ein Schüler hat mehrere Lehrer.
Schueler — Hausmeister* … 1Eine Schule hat einen Hausmeister, der für alle Schüler zuständig ist.

Wie man darauf kommt

Der Trick ist, die Beziehung in beide Richtungen als Satz auszusprechen. Nimm Direktor und Sekretärin:

  1. „Ein Direktor hat … Sekretärinnen." – keine, eine oder mehrere, also *
  2. „Eine Sekretärin hat … Direktoren." – genau einen, also 1

Und jetzt aufpassen, das ist die Stelle, an der fast alle einen Fehler machen: die Zahl steht auf der gegenüberliegenden Seite. Die * gehört an die Seite der Sekretärin, weil es um die Frage geht „wie viele Sekretärinnen hat ein Direktor". Wer die Zahlen vertauscht, hat das Diagramm genau falsch herum gelesen.

Der Unterschied zwischen * und 1..*

Beide heißen „mehrere". Der Unterschied ist die Null:

Das ist keine Haarspalterei, sondern hat später eine direkte Folge im Code. Bei 1..* muss der Konstruktor dafür sorgen, dass beim Erzeugen schon ein Objekt dabei ist. Bei * darf die Liste leer anfangen.

Die Multiplizitäten hängen davon ab, worauf ihr euch im Kurs geeinigt habt. Ob „ein Schüler hat mindestens einen Lehrer" oder „genau einen Klassenlehrer" gemeint ist, steht nicht im Diagramm – das ist eine Modellierungsentscheidung. Wichtig in der Klausur ist, dass du deine Wahl begründen kannst.

Assoziation, gerichtet oder nicht

Der Strich zwischen zwei Klassen ist die Assoziation, also die kennt-Beziehung. Hat er an einem Ende eine offene Pfeilspitze, ist er gerichtet und nur in Pfeilrichtung lesbar.

In der Praxis heißt gerichtet: die eine Klasse hat ein Attribut vom Typ der anderen, umgekehrt aber nicht. Ein Schüler, der ein Auto kennt, hat ein Attribut auto. Das Auto weiß nichts von seinem Schüler – deshalb zeigt der Pfeil nur in eine Richtung. In der objektorientierten Modellierung arbeitet man meistens mit gerichteten Assoziationen, weil sonst beide Klassen voneinander wissen müssten und man sich schnell einen Knoten baut.

classDiagram
    class Schueler {
        -String nachname
        -String vorname
        -String geburtsdatum
        -boolean führerschein
        +machePrüfung() void
    }
    class Auto {
        -String kfzKennzeichen
        -int kilometerstand
        -int tankvolumen
        -float kraftstoffverbrauch
        -float kraftstoffmenge
        +tanken(float) void
        +fahren(float) boolean
    }
    Schueler --> Auto : fährt
Der Schüler kennt sein Auto

Der Beziehungsname fährt steht an der Strecke und sagt, was die Beziehung inhaltlich bedeutet. Ohne ihn wüsste niemand, warum die beiden Klassen überhaupt verbunden sind.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung