\documentclass{bschlangaul-aufgabe}
\bLadePakete{java,uml,entwurfsmuster}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 3},
  Thematik = {Ticket-Handel},
  Referenz = 66116-2020-H.T1-TA1-A3,
  RelativerPfad = Examen/66116/2020/09/Thema-1/Teilaufgabe-1/Aufgabe-3.tex,
  ZitatSchluessel = examen:66116:2020:09,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Entwurfsmuster, Einzelstück (Singleton), Fabrikmethode (Factory Method)},
  EinzelpruefungsNr = 66116,
  Jahr = 2020,
  Monat = 09,
  ThemaNr = 1,
  TeilaufgabeNr = 1,
  AufgabeNr = 3,
}

\let\j=\bJavaCode

\begin{tikzpicture}
\umlclass{TicketHandel}{
  \umlstatic{- system: TicketHandel} \\
  - verkaufte Tickets : int
}{
  - TicketHandel() \\
  \umlstatic{+ gibInstanz(): TicketHandel} \\
  +ticketKaufen(kategorie: Kategorie) : Ticket \\
  + gibVerkaufteTickets() : int
}

\umlclass[y=-4]{TicketDruckerei}{}{
  + erstelleTicket(kategorie: Kategorie): Ticket
}

\umlclass[x=8,y=1,type=enumeration]{Kategorie}{
  ERWACHSEN\\
  KIND
}{}

\umlclass[x=8,y=-1.5,type=interface]{Ticket}{}{
  gibPreis(): double
}

\umlclass[x=6,y=-4]{ErwachsenenTicket}{
  \umlstatic{- preis: double = 15.0}
}{}
\umlclass[x=10,y=-4]{KinderTicket}{
  \umlstatic{- preis: double = 10.0}
}{}

\umlVHVinherit{ErwachsenenTicket}{Ticket}
\umlVHVinherit{KinderTicket}{Ticket}

\umlHVHdep[stereo=use,pos stereo=1.8,anchor2=-150]{TicketDruckerei}{Ticket}
\umldep[stereo=use,anchor1=-25]{TicketHandel}{Ticket}

\umlVHVdep[arm1=-1cm,stereo=use,anchor1=-30, pos stereo=1.5]{TicketDruckerei}{ErwachsenenTicket}
\umlVHVdep[arm1=-1.5cm,stereo=use,anchor1=-150, pos stereo=1.5]{TicketDruckerei}{KinderTicket}

\umluniassoc[arg1=,mult2=1,arg2=- druckerei,name=benutzt]{TicketHandel}{TicketDruckerei}
\bUmlLeserichtung[pos=below left,dir=down,distance=0cm]{benutzt}
\end{tikzpicture}

\noindent
Ihnen sei ein UML-Klassendiagramm zu folgendem Szenario gegeben. Ein
Benutzer (nicht im Diagramm enthalten) kann über einen \j{TicketHandel}
Tickets erwerben. Dabei muss der Benutzer eine der zwei Ticketkategorien
angeben. Das Handelsystem benutzt eine \j{TicketDruckerei}, um ein
passendes \j{Ticket} für den Benutzer zu erzeugen.
\index{Entwurfsmuster}
\footcite{examen:66116:2020:09}

\begin{enumerate}

%%
% a)
%%

\item Im angegebenen Klassendiagramm wurden zwei unterschiedliche
Entwurfsmuster verwendet. Um welche Muster handelt es sich? Geben Sie
jeweils den Namen des Musters sowie die Elemente des Klassendiagramms
an, mit denen diese Muster im Zusammenhang stehen. ACHTUNG: Es handelt
sich dabei \emph{nicht} um das \emph{Interface}- oder das
\emph{Vererbungs}muster.
\index{Einzelstück (Singleton)}
\index{Fabrikmethode (Factory Method)}

\begin{bAntwort}
\bPseudoUeberschrift{Einzelstück (Singleton)}

\bEntwurfsEinzelstueckUml
\bEntwurfsEinzelstueckAkteure

\begin{tabular}{l|l}
\textbf{Klasse}       & \textbf{Akteur} \\\hline\hline
\j{TicketHandel}      & Einzelstück\\
\end{tabular}

\bPseudoUeberschrift{Fabrikmethode (Factory Method)}

\bEntwurfsFabrikmethodeUml
\bEntwurfsFabrikmethodeAkteure

\begin{tabular}{l|l}
\textbf{Klasse}       & \textbf{Akteur} \\\hline\hline
\j{ErwachsenenTicket} & KonkretesProdukt\\
\j{KinderTicket}      & KonkretesProdukt\\
\j{TicketDruckerei}   & KonkreterErzeuger\\
\j{Ticket}            & Produkt\\
-                     & Erzeuger\\
\end{tabular}
\end{bAntwort}

%%
% b)
%%

\item Nennen Sie zwei generelle Vorteile von Entwurfsmustern.

\begin{bAntwort}
\begin{itemize}
\item Wiederverwendung einer bewährten Lösung für eine bestimmte
Problemstellungen

\item Verbesserung der Kommunikation unter EntwicklerInnen
\end{itemize}
\end{bAntwort}

%%
% c)
%%

\item Geben Sie eine Implementierung der Klasse \j{TicketHandel} an. Bei
der Methode \j{ticketKaufen()} wird die Anzahl der verkauften Tickets um
1 erhöht und ein entsprechendes Ticket erstellt und zurückgegeben.
Beachten Sie den Hinweis auf der nächsten Seite.

\begin{bAntwort}
\bJavaExamen{66116}{2020}{09}{ticket/TicketHandel}
\end{bAntwort}

%%
% d)
%%

\item Geben Sie eine Implementierung der Klasse \j{TicketDruckerei} an.

\begin{bAntwort}
\bJavaExamen{66116}{2020}{09}{ticket/TicketDruckerei}
\end{bAntwort}

%%
% e)
%%

\item Geben Sie eine Implementierung der Klasse \j{KinderTicket} an.

\begin{bAntwort}
\bJavaExamen{66116}{2020}{09}{ticket/KinderTicket}
\end{bAntwort}

\emph{Hinweis:} Die Implementierungen \emph{müssen} sowohl dem
Klassendiagramm, als auch den Konzepten der verwendeten Muster
entsprechen. Verwenden Sie eine objektorientierte Programmiersprache,
vorzugsweie \emph{Java}. Sie müssen sich an der nachfolgenden
Testmethode und ihrer Ausgabe orientieren. Die Testmethode muss mit
Ihrer Implementierung ausführbar sein und sich semantisch korrekt
verhalten.

Quelltext der Testmethode:

\bJavaExamen[firstline=4,lastline=8]{66116}{2020}{09}{ticket/Test}

Konsolenausgabe:

Anzahl verkaufter Tickets: 2

\end{enumerate}
\end{document}
