\documentclass{schuleab}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}

% Dieses Dokument ist in der Zusammenarbeit von Informatikreferendaren und
% ehemaligen Informatikreferendaren der Studienseminare (heute ZfsL) Arnsberg,
% Hamm und Solingen entstanden.
%
% Das Dokument steht unter der Lizenz: Creative Commons by-nc-sa Version 4.0
% http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de
%
% Nach dieser Lizenz darf das Dokument beliebig kopiert und bearbeitet werden,
% sofern das Folgeprodukt wiederum unter gleichen Lizenzbedingungen vertrieben
% und auf die ursprünglichen Urheber verwiesen wird.
% Eine kommerzielle Nutzung ist ausdrücklich ausgeschlossen.
%
% Die Namensnennung durch einen Verweis und die Lizenzangabe der ursprünglichen
% Urheber auf den Materialien für Schülerinnen und Schüler ist erforderlich.
%
% Die Sammlung der Dokumente steht unter
% http://ddi.uni-wuppertal.de/material/materialsammlung/
% zur Verfügung.
%
% Das LaTeX-Paket zum Setzen der Dokumente der Sammlung steht
% unter  http://www.ctan.org/pkg/schule
% zur Verfügung.

\usepackage[pdfauthor={Referendare der Informatikfachseminare Arnsberg, Hamm 
  und Solingen}]{hyperref}
\includexmp{lizenz}
\cclizenz{byncsaeu}
\footerQRLink{materialsammlung_qr_url.pdf}

\svnid{$Id: ab_07_abschluss_basketball.tex 1232 2015-05-26 13:11:25Z humbert $}

\dokName{Fertigstellung des Basketballproblems}
\jahrgang{EF}

\begin{document}

\section*{\enquote{Basketballproblem} -- Fertigstellung}

Sie haben sich im Laufe des ersten Halbjahres mit der objektorientierten 
Modellierung eines Basketballturniers beschäftigt und bereits einige Klassen 
in Python implementiert.
In den letzten Unterrichtsstunden haben Sie die Datenstruktur \enquote{Liste} 
kennengelernt.
Mit ihr und den Kontrollstrukturen \enquote{Verzweigung} und \enquote{Schleife} 
sind Sie nun in der Lage, die Siegermannschaft des Basketballturniers zu 
ermitteln.

Die zugrundeliegende Idee besteht darin, alle Spielergebnisse in eine sortierte 
Turniertabelle einzutragen. 
Um das Problem der Sortierung müssen Sie sich nicht kümmern, dies erledigt die 
Klasse \texttt{TabellenSortierer} für Sie.

Da beidseitige Kennt-Beziehungen in der Praxis problematisch sein können (man 
kann sich inbesondere dann vertun, wenn man die Beziehung wieder lösen möchte), 
wurde die ursprüngliche Modellierung diesbezüglich auf das Wesentliche 
reduziert, sodass nur unbedingt nötige Beziehungen vorhanden sind.

Das nachfolgende Klassendiagramm zeigt diese vereinfachte Modellierung.

\begin{center}
 \includegraphics[width=\textwidth]{abschluss_klassendiagramm-1}
\end{center}

Ihnen wird auffallen, dass nun bei den Methoden alle anzugebenden Parameter 
innerhalb der Klammern mit aufgeführt sind. Nach dem Doppelpunkt wird 
angegeben, welche Art von Daten eine Methode zurückgibt (sofern sie dies tut).

Weiterhin sind im Klassendiagramm nun die sogenannten \enquote{Multiplizitäten} 
eingetragen, welche angeben, wieviele Objekte einer Klasse mit wievielen 
Objekten einer anderen Klasse in Beziehung stehen.
Zum Beispiel hat ein Baskettballspiel immer zwei teilnehmende Mannschaften und 
eine Tabelle, besteht aus null bis beliebig vielen \enquote{*} 
Tabelleneinträgen.


\newpage


\section*{Anmerkungen und Tipps}

\begin{itemize}
 \item Die Methode \texttt{spielEintragen(spiel)} der Klasse 
  \texttt{BasketballTurnier} hat die Aufgabe, die beiden teilnehmenden 
  Mannschaften in die Mannschaftsliste aufzunehmen und für jede Mannschaft 
  einen Tabelleneintrag zu erstellen (sofern noch nicht geschehen -- vorher 
  überprüfen!).
 \item Setzen Sie im Konstruktor der Klasse \texttt{TabellenEintrag} das 
  Attribut  Mannschaft (d.\,h. \texttt{self.mannschaft}) auf das übergebene 
  Mannschafts-Objekt und  die restlichen auf der Klassenkarte aufgeführten 
  Attribute auf 0.
  Sie haben die folgende Bedeutung:
  \begin{itemize}
   \item \texttt{spiele}: Die Anzahl der absolvierten Spiele.
   \item \texttt{siege}: Hier ist es am einfachsten, als \enquote{Siegpunkte} 
    kein (3,1,0)-System für Siege, Untentschieden und Niederlagen zu verwenden 
    (wie in den meisten Fußball-Ligen), sondern bei Siegen diesen Wert um 1 zu 
    erhöhen, bzw. bei Niederlagen nicht zu ändern.
   \item \texttt{punktDiff}: Bei gleicher Anzahl von \texttt{siege}n (s.\,o.) 
    soll die Punktedifferenz über die Tabellenplatzierung entscheiden.
   \item \texttt{punktErzielt}: Sind auch noch die Punktdifferenzen gleich, 
    soll die Mannschaft mit den meisten Punkten absolut gewinnen.
  \end{itemize}
 \item Passen sie in der Methode \texttt{aktualisieren()} die vier oben 
  genannten Attribute entsprechend ihrer Bedeutung an, wobei Sie die Parameter 
  als Änderungen verstehen sollen.\\ Z.\,B. soll beim Aufruf von 
  \texttt{aktualisieren(1, 5, 38)} die Anzahl der Siege um 1 erhöht werden, 
  die Punktdifferenz um 5 und die Anzahl der erzielten Punkte um 38.
 \item In der Methode \texttt{neueMannschaftAufnehmen(mannschaft)} der Klasse 
  \texttt{Tabelle} soll ein neuer Tabelleneintrag für die übergebene Mannschaft 
  angelegt und in der dafür vorgsehenen Liste abgelegt werden.
 \item \texttt{ergebnisEintragen(spiel)} wird von \texttt{spielEintragen(spiel)} 
  der Klasse \texttt{Basketball\-Turnier} aufgerufen. 
  Es sollen die Tabelleneinträge der am Spiel beteiligten Mannschaften gesucht 
  und dem Spielergebnis entsprechend aktualisiert werden. Berücksichtigen Sie 
  auch den Fall eines Unentschiedens!
 \item Für jede Klasse kann man eine Methode \texttt{\_\_str\_\_()} definieren 
  (wie hier für die Klasse \texttt{TabellenEintrag} geschehen), die einen 
  Zeichenkettenausdruck zurückgeben muss.
  Diese Methode wird dann aufgerufen, wenn man ein Objekt dieser Klasse -- 
  z.\,B. \texttt{mein\-Objekt} -- mittels \texttt{str(meinObjekt)} in eine 
  Zeichenkette umwandeln möchte.
  Soetwas passiert beispielsweise automatisch, wenn man 
  \texttt{print (meinObjekt)} aufruft.
\end{itemize}



\section*{Aufgabe}

Sie erhalten eine Datei mit unvollständigem Python-Programmcode.
Ergänzen Sie an den markierten Stellen die nötigen Anweisungen, um den 
Turniersieger zu ermitteln!


\end{document}
 
