\documentclass{bschlangaul-aufgabe} \bLadePakete{uml,java} \begin{document} \bAufgabenMetadaten{ Titel = {1 Firmenstruktur}, Thematik = {Firmenstruktur}, Referenz = 46116-2011-F.T1-TA2-A1, RelativerPfad = Examen/46116/2011/03/Thema-1/Teilaufgabe-2/Aufgabe-1.tex, ZitatSchluessel = examen:46116:2011:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Einfach-verkettete Liste, Objektdiagramm}, EinzelpruefungsNr = 46116, Jahr = 2011, Monat = 03, ThemaNr = 1, TeilaufgabeNr = 2, AufgabeNr = 1, } \let\j=\bJavaCode \section{Firmenstruktur \index{Einfach-verkettete Liste} \footcite{examen:46116:2011:03}} \begin{center} \begin{tikzpicture} \node (ordered1) at (2,3) {\{ordered\}}; \node (ordered2) at (6,3) {\{ordered\}}; \umlclass[x=0]{Firma}{}{+ addAbteilung(name: String)\\+ erzeugelDs()} \umlclass[x=4.5]{Abteilung}{+ name: String}{} \umlclass[x=8]{Angestellter}{+ id: int}{} \umlassoc[arg1=+ firma,mult1=1,pos1=0.7]{ordered1}{Firma} \umlassoc[arg1=+ abteilungen,mult1=*,pos1=0.5]{ordered1}{Abteilung} \umlassoc[arg1=+ abteilung,mult1=1,pos1=0.7]{ordered2}{Abteilung} \umlassoc[arg1=+ angestellte,mult1=*,pos1=0.7]{ordered2}{Angestellter} \end{tikzpicture} \end{center} \noindent Eine Firma besteht aus \j{null} oder mehr Abteilungen, von denen jede \j{null} oder mehr Angestellte hat. Da sowohl die Abteilungen als auch deren Angestellten geordnet sind, sind Angestellte insgesamt geordnet. Sie haben durchgehende, ganzzahlige IDs, die bei 1 beginnen. \begin{enumerate} %% % a) %% \item Erstellen Sie exemplarisch ein Objektdiagramm: Stellen Sie eine Firma mit dem Instanznamen \j{f} und den zwei Abteilungen „Produktion“ (Name \j{p}) und „Marketing“ (Name \j{m}) dar. Die Produktion hat zwei Angestellte, Marketing hat einen Angestellten. Die Angestellten haben die Namen \j{a1}, \j{a2}, und \j{a3}. \index{Objektdiagramm} \begin{bAntwort} Die Instanzbezeichnung müsste noch unterstrichen werden. Das geht aber leider mit TikZ-UML nicht. \begin{center} \begin{tikzpicture} \umlclass[x=0,y=0]{f : Firma}{}{} \umlclass[x=0,y=-2]{p : Abteilung}{name = “Produktion”}{} \umlclass[x=4,y=-2]{m : Abteilung}{name = “Marketing”}{} \umlclass[x=0,y=-4,name=a1]{a1 : Angestellter}{id = “1”}{} \umlclass[x=3,y=-4]{a2 : Angestellter}{id = “2”}{} \umlclass[x=6,y=-4]{a3 : Angestellter}{id = “3”}{} \umluniassoc{f : Firma}{p : Abteilung} \umluniassoc{p : Abteilung}{m : Abteilung} \umluniassoc{p : Abteilung}{a1 : Angestellter} \umluniassoc{a1 : Angestellter}{a2 : Angestellter} \umluniassoc{m : Abteilung}{a3 : Angestellter} \end{tikzpicture} \end{center} \end{bAntwort} %% % b) %% \item Implementieren Sie das Klassendiagramm in Java oder in einer anderen geeigneten objektorientierten Programmiersprache Ihrer Wahl. Beachten Sie, dass die Assoziationen bidirektional und geordnet sind. Die beiden Methoden der Klasse \j{Firma} sollen dabei folgendes Verhalten haben: Die Methode \j{erzeugeIDs} sorgt dafür, dass die IDs wieder korrekt zugewiesen sind. Die alten IDs können beliebig geändert werden, solange das Endergebnis wieder den obenstehenden Kriterien genügt. \begin{bAntwort} \bJavaExamen[firstline=3]{46116}{2011}{03}{Firma} \bJavaExamen[firstline=3]{46116}{2011}{03}{Abteilung} \bJavaExamen[firstline=3]{46116}{2011}{03}{Angestellter} \end{bAntwort} %% % c) %% \item Angestellte sollen in Manager und einfache Angestellte unterteilt werden. Zeichnen Sie ein Klassendiagramm mit der Oberklasse \j{Angestellter} und den zwei Unterklassen \j{Manager} und \j{EinfacherAngestellter}. Die Klasse \j{Angestellter} soll nicht instantiierbar sein und erzwingen, dass die Methode \j{getPosition()} (öffentlich, ohne Argumente, Rückgabewert \j{String}) von allen konkreten Unterklassen implementiert wird. \j{Manager} und \j{EinfacherAngestellter} sollen instantiierbar sein. \begin{bAntwort} \begin{center} \begin{tikzpicture} \umlclass[x=0,y=0,type=abstract]{Angestellter}{\textit{+ getPosition(): String}}{} \umlclass[x=-3,y=-3]{Manager}{ + Manager()\\ + getPosition(): String}{} \umlclass[x=3,y=-3]{EinfacherAngestellter}{ + EinfacherAngestellter()\\ + getPosition(): String}{} \umlVHVinherit{Manager}{Angestellter} \umlVHVinherit{EinfacherAngestellter}{Angestellter} \end{tikzpicture} \end{center} \end{bAntwort} %% % d) %% \item Wie lautet der Fachbegriff dafür, dass eine Methode in einer Klasse und in deren Unterklassen dieselbe Signatur hat, aber in den Unterklassen unterschiedlich implementiert ist? \begin{bAntwort} Abstrakte Methode \end{bAntwort} \end{enumerate} \end{document}