\documentclass{bschlangaul-aufgabe}
\bLadePakete{uml,java}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 1},
  Thematik = {Reiseunternehmen},
  Referenz = 46116-2010-F.T1-A1,
  RelativerPfad = Examen/46116/2010/03/Thema-1/Aufgabe-1.tex,
  ZitatSchluessel = examen:46116:2010:03,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Warteschlange (Queue), Klassendiagramm, Implementierung in Java},
  EinzelpruefungsNr = 46116,
  Jahr = 2010,
  Monat = 03,
  ThemaNr = 1,
  AufgabeNr = 1,
}

Es sei folgender Sachverhalt gegeben:
\index{Warteschlange (Queue)}
\footcite{examen:46116:2010:03}

Ein Reiseunternehmen bietet verschiedene Reisen an. Dazu beschäftigt es
eine Reihe von Reiseleitern, wobei eine Reise von mindestens einem
Reiseleiter geleitet wird. Da Reiseleiter freiberuflich arbeiten, können
sie bei mehreren Reiseunternehmen Reisen leiten.

An einer Reise können mehrere Teilnehmer teilnehmen, ein Teilnehmer kann
auch an verschiedenen Reisen teilnehmen.

\begin{enumerate}

%%
% a)
%%

\item Modellieren Sie diesen Sachverhalt in einem UML-Klassendiagramm.
Für Teilnehmer und Reiseleiter sollen Sie dabei eine abstrakte
Oberklasse definieren. Achten Sie dabei auf die Multiplizitäten der
Assoziationen. Sie müssen keine Attribute bzw. Methoden angeben.
\index{Klassendiagramm}

\begin{bAntwort}
\begin{center}
\begin{tikzpicture}
\umlsimpleclass[x=-2,y=-4]{Reiseunternehmen}
\umlsimpleclass[x=0,y=0,type=abstract]{Person}

\umlsimpleclass[x=-2,y=-2]{Reiseleiter}
\umlsimpleclass[x=2,y=-2]{Teilnehmer}
\umlsimpleclass[x=2,y=-4]{Reise}

\umlVHVinherit{Reiseleiter}{Person}
\umlVHVinherit{Teilnehmer}{Person}

\umlassoc[mult1=*,mult2=*]{Reiseleiter}{Reiseunternehmen}
\umlassoc[mult1=0..*,mult2=0..*]{Teilnehmer}{Reise}
\umlassoc[mult1=1..*,mult2=1]{Reiseleiter}{Reise}
\umlassoc[mult1=1,mult2=1..*]{Reiseunternehmen}{Reise}
\end{tikzpicture}
\end{center}
\end{bAntwort}

%%
% b)
%%

\item Eine Reise kann jedoch nur mit einer begrenzten Kapazität
angeboten werden, das heißt, zu einer bestimmten Reise kann nur eine
begrenzte Anzahl von Teilnehmern assoziiert werden. Als Ausgleich soll
pro Reise eine Warteliste verwaltet werden.

Modellieren Sie diesen erweiterten Sachverhalt in einem neuen Diagramm.
Nicht veränderte Klassen brauchen nicht noch einmal angegeben werden.
Beachten Sie dabei, dass die Reihenfolge bei einer Warteliste eine Rolle
spielt.

\begin{bAntwort}
\begin{center}
\begin{tikzpicture}
\umlsimpleclass[x=2,y=-2]{Teilnehmer}
\umlsimpleclass[x=2,y=-4]{Reise}
\umlsimpleclass[x=5,y=-3]{Warteliste}

\umlassoc[mult1=1,mult2=1]{Warteliste}{Reise}
% https://wvsg.schulen2.regensburg.de/joomla/images/Faecher/Informatik/Informatik_11/informatik_11_1_1_Datenstruktur_Warteschlange.html
\umlassoc[arg=hat als Nachfolger >, mult=0..1, pos=0.8, angle1=30, angle2=60, loopsize=2cm]{Teilnehmer}{Teilnehmer}
\umluniassoc{Teilnehmer}{Warteliste}
\end{tikzpicture}
\end{center}
\end{bAntwort}

%%
% c)
%%

\item Implementieren Sie die in Aufgabenteil b) modellierten Klassen in
Java. Fügen Sie eine Methode hinzu, die einen Teilnehmer von einer Reise
entfernt. Dabei soll automatisch der erste Platz der Warteliste zu einem
Reiseteilnehmer werden, wenn die Warteliste nicht leer ist. Achten Sie
auf die Navigierbarkeit Ihrer Assoziationen. Sie können davon ausgehen,
dass die Methode nur mit Teilnehmern aufgerufen wird, die in der Tat
Teilnehmer der Reise sind.
\index{Implementierung in Java}

\bJavaExamen{46116}{2010}{03}{reiseunternehmen/Teilnehmer}
\bJavaExamen{46116}{2010}{03}{reiseunternehmen/TeilnehmerListe}
\bJavaExamen{46116}{2010}{03}{reiseunternehmen/Warteliste}
\bJavaExamen{46116}{2010}{03}{reiseunternehmen/Reise}

\end{enumerate}

\end{document}
