\documentclass{bschlangaul-aufgabe}
\bLadePakete{java,uml}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 3 (Objektorientierte Implementierung)},
  Thematik = {Fußballweltmeisterschaft},
  Referenz = 46116-2018-F.T1-TA1-A3,
  RelativerPfad = Examen/46116/2018/03/Thema-1/Teilaufgabe-1/Aufgabe-3.tex,
  ZitatSchluessel = examen:46116:2018:03,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Klassendiagramm, Implementierung in Java, Feld (Array), main-Methode},
  EinzelpruefungsNr = 46116,
  Jahr = 2018,
  Monat = 03,
  ThemaNr = 1,
  TeilaufgabeNr = 1,
  AufgabeNr = 3,
}

\let\j=\bJavaCode

Für\footcite{examen:46116:2018:03} die nächste Fußballweltmeisterschaft
möchte ein Wettbüro ein Programm zur Verwaltung von Spielern, Vereinen
und (National-)Mannschaften entwickeln. Dazu wurde bereits das folgende
UML-Klassendiagramm\index{Klassendiagramm}
entworfen.\footcite{oomup:pu:4}

\begin{center}
\begin{tikzpicture}
\umlclass{Mannschaft}{
  -land: String\\
  -anzahlSpieler: Integer
}{
  +Mannschaft(land: String)\\
  +hinzufuegen(s: Spieler)\\
  +torschuetzenkoenig():String
}

\umlclass[right=1.5cm of Mannschaft]{Spieler}{
  -name: String
  -tore: Integer
}{
  +Spieler(name: String, verein: Verein)\\
  +getName(): String\\
  +getTore(): Integer\\
  +schiesseTor()\\
  +wechsleVerein(neuerVerein: Verein)
}

\umlclass[below=1cm of Spieler]{Verein}{
  -name: String
}{
  +Verein(name:String)\\
  +getName():String
}

\umluniassoc[mult2=0..20,arg2=-team,pos2=0.6]{Mannschaft}{Spieler}
\umluniassoc[mult2=0..20,arg2=-team]{Spieler}{Verein}
\end{tikzpicture}
\end{center}

\noindent
Es kann angenommen werden, dass die Klasse \j{Verein} bereits
implementiert ist. In den folgenden
Implementierungsaufgaben\index{Implementierung in Java} können Sie eine
objektorientierte Programmiersprache Ihrer Wahl verwenden. Die
verwendete Sprache ist anzugeben. Zu beachten sind jeweils die im
Klassendiagramm angegebenen Sichtbarkeiten von Attributen, Rollennamen,
Konstruktorn und Operationen.

\begin{enumerate}

%%
% a)
%%

\item Es ist eine Implementierung der Klasse \j{Spieler} anzugeben.
Der Konstruktor soll die Instanzvariablen mit den gegebenen Parametern
initialisieren, wobei die. Anzahl der Tore nach der Objekterzeugung
gleich 0 sein soll. Ansonsten kann die Funktionalität der einzelnen
Operationen aus deren Namen geschlossen werden.

\begin{bAntwort}
\bJavaExamen{46116}{2018}{03}{verein/Spieler}
\end{bAntwort}

%%
% b)
%%

\item Es ist eine Implementierung der Klasse \j{Mannschaft}
anzugeben. Der Konstruktor soll das Land initialisieren, die Anzahl der
Spieler auf 0 setzen und das Team mit einem noch „leeren
“Array\index{Feld (Array)} der Länge 20 initialisieren. Das Team soll
mit der Methode \j{hinzufuegen} um einen Spieler erweitert
werden. Die Methode \j{torschuetzenkoenig} soll den Namen eines
Spielers aus dem Team zurückgeben, der die meisten Tore für die
Mannschaft geschossen hat. Ist das für mehrere Spieler der Fall, dann
kann der Name eines beliebigen solchen Spielers zurückgegeben werden.
Ist noch kein Spieler im Team, dann soll der String \j{"Kein
Spieler vorhanden"} zurückgegeben werden.

\begin{bAntwort}
\bJavaExamen{46116}{2018}{03}{verein/Mannschaft}
\end{bAntwort}

%%
% c)
%%

\item Schreiben Sie den Rumpf einer
\j{main}-Methode\index{main-Methode}, so dass nach Ausführung
der Methode eine deutsche Mannschaft existiert mit zwei Spielern Namens
\j{"Hugo Meier"} und \j{"Frank Huber"}. Beide Spieler
sollen zum selben Verein \j{"FC Staatsexamen"} gehören.
\j{"Hugo Meier"} soll nach Aufnahme in die deutsche Mannschaft
genau ein Tor geschossen haben, während \j{"Frank Huber"} noch
kein Tor erzielt hat. (Wir abstrahieren hier von der Realität, in der
ein 2-er Team noch gar nicht spielbereit ist.)

\begin{bAntwort}
\bJavaExamen{46116}{2018}{03}{verein/Verein}
\end{bAntwort}
\end{enumerate}

\end{document}
