\documentclass{bschlangaul-aufgabe} \bLadePakete{java,entwurfsmuster} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 3}, Thematik = {Kunden und Angestellte einer Firma}, Referenz = 66116-2015-F.T1-TA2-A3, RelativerPfad = Examen/66116/2015/03/Thema-1/Teilaufgabe-2/Aufgabe-3.tex, ZitatSchluessel = aud:pu:7, ZitatBeschreibung = {Vererbung und Abstrakte Klassen II, Aufgabe 2}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Implementierung in Java, Vererbung, Interface, Abstrakte Klasse, Adapter}, EinzelpruefungsNr = 66116, Jahr = 2015, Monat = 03, ThemaNr = 1, TeilaufgabeNr = 2, AufgabeNr = 3, } In\footcite[Vererbung und Abstrakte Klassen II, Aufgabe 2]{aud:pu:7} dieser Aufgabe implementieren\index{Implementierung in Java} Sie ein konzeptionelles Datenmodell für eine Firma, die Personendaten von Angestellten und Kunden verwalten möchte. Gegeben seien dazu folgende Aussagen: \index{Vererbung} \footcite[Thema 1 Teilaufgabe 2 Aufgabe 3 Seite 5]{examen:66116:2015:03} \begin{itemize} \item Eine \emph{Person} hat einen \emph{Namen} und ein \emph{Geschlecht} (männlich oder weiblich). \item Ein \emph{Angestellter} ist eine \emph{Person}, zu der zusätzlich das monatliche \emph{Gehalt} gespeichert wird. \item Ein \emph{Kunde} ist eine \emph{Person}, zu der zusätzlich eine \emph{Kundennummer} hinterlegt wird. \end{itemize} \begin{enumerate} %% % (a) %% \item Geben Sie in einer objektorientierten Programmiersprache Ihrer Wahl (geben Sie diese an) eine Implementierung des aus den obigen Aussagen resultierenden konzeptionellen Datenmodells in Form von \textbf{Klassen} und \textbf{Interfaces} an. Gehen Sie dabei wie folgt vor: \begin{itemize} \item Schreiben Sie ein Interface\index{Interface} \bJavaCode{Person} sowie zwei davon erbende Interfaces \bJavaCode{Angestellter} und \bJavaCode{Kunde}. Die Interfaces sollen jeweils lesende Zugriffsmethoden (Getter) die entsprechenden Attribute (Name, Geschlecht, Gehalt, Kundennummer) deklarieren. \begin{bAntwort} \bJavaExamen{66116}{2015}{03}{Person} \bJavaExamen{66116}{2015}{03}{Angestellter} \bJavaExamen{66116}{2015}{03}{Kunde} \end{bAntwort} \item Schreiben Sie eine abstrakte Klasse\index{Abstrakte Klasse} \bJavaCode{PersonImpl}, die das Interface \bJavaCode{Person} implementiert. Für jedes Attribut soll ein Objektfeld angelegt werden. Außerdem soll ein Konstruktor definiert werden, der alle Objektfelder initialisiert. \begin{bAntwort} \bJavaExamen{66116}{2015}{03}{PersonImpl} \end{bAntwort} \item Schreiben Sie zwei Klassen \bJavaCode{AngestellterImpl} und \bJavaCode{KundeImpl}, die von \bJavaCode{PersonImpl} erben und die jeweils dazugehörigen Interfaces implementieren. Es sollen wiederum Konstruktoren definiert werden, die alle Objektfelder initialisieren und dabei auf den Konstruktor der Basisklasse \bJavaCode{PersonImpl} Bezug nehmen. \begin{bAntwort} \bJavaExamen{66116}{2015}{03}{AngestellterImpl} \bJavaExamen{66116}{2015}{03}{KundeImpl} \end{bAntwort} \end{itemize} %% % b) %% \item Verwenden Sie das Entwurfsmuster \textbf{Adapter}, um zu ermöglichen, dass vorhandene Angestellte die Rolle eines Kunden einnehmen können. Der Adapter soll eine zusätzliche Klasse sein, die das Kunden-Interface implementiert. Wenn möglich, sollen Methodenaufrufe an den adaptierten Angestellten delegiert werden. Möglicherweise müssen Sie neue Objektfelder einführen.\index{Adapter} \begin{bExkurs}[Entwurfsmuster „Adapter“] \bEntwurfsAdapter \end{bExkurs} %% % c) %% \item Verwenden Sie das Entwurfsmuster \textbf{Simple Factory}, um die Erzeugung von Angestellten, Kunden, sowie Adapter-Instanzen aus Aufgabe (b) zu vereinheitlichen. Die entsprechende Erzeugungs-Methode soll neben einem Typ-Diskriminator (\zB einem Aufzählungstypen oder mehreren booleschen Werten) alle Parameter übergeben bekommen, die für den Konstruktor irgendeiner Implementierungsklasse des Interface \bJavaCode{Person} notwendig sind. Hinweis: Um eine Adapter-Instanz zu erzeugen, müssen Sie möglicherweise zwei Konstruktoren aufrufen. \begin{bExkurs}[Entwurfsmuster „Einfache Fabrik“] \bEntwurfsEinfacheFabrik \end{bExkurs} \end{enumerate} \end{document}