\documentclass{bschlangaul-aufgabe} \bLadePakete{java,uml,entwurfsmuster} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 2}, Thematik = {Beatles}, Referenz = 66116-2018-H.T1-TA1-A2, RelativerPfad = Examen/66116/2018/09/Thema-1/Teilaufgabe-1/Aufgabe-2.tex, ZitatSchluessel = examen:66116:2018:09, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Zustand (State), Klassendiagramm zeichnen, Zustandsdiagramm zeichnen}, EinzelpruefungsNr = 66116, Jahr = 2018, Monat = 09, ThemaNr = 1, TeilaufgabeNr = 1, AufgabeNr = 2, } Gegeben sei das Java-Programm: \index{Zustand (State)} \footcite{examen:66116:2018:09} \bJavaExamen[firstline=3]{66116}{2018}{09}{beatles/Music} \begin{enumerate} %% % a) %% \item Zeichnen Sie ein UML-Klassendiagramm\index{Klassendiagramm zeichnen}, das die statische Struktur des Programms modelliert. Instanzvariablen mit einem Klassentyp sollen durch gerichtete Assoziationen mit Rollennamen und passender Multiplizität am gerichteten Assoziationsende modelliert werden. Alle aus dem Programmcode ersichtlichen statischen Informationen sollen in dem Klassendiagramm dargestellt werden. \begin{bAntwort} \begin{tikzpicture}[scale=0.7,transform shape] \umlclass[x=-6,y=5]{Music}{}{ +help()\\ +obladi()\\ +yesterday()\\ } \umlclass[x=0,y=5,type=abtract]{Beatle}{}{ +help(m : Music)\\ +obladi(m : Music)\\ +yesterday(m : Music)\\ } \umlclass[x=-6,y=0]{George}{}{ +help(m : Music)\\ +obladi(m : Music)\\ +yesterday(m : Music)\\ } \umlclass[x=-2,y=0]{John}{}{ +help(Music m)\\ +obladi(Music m)\\ +yesterday(Music m)\\ } \umlclass[x=2,y=0]{Paul}{}{ +help(Music m)\\ +obladi(Music m)\\ +yesterday(Music m)\\ } \umlclass[x=6,y=0]{Ringo}{}{ +help(Music m)\\ +obladi(Music m)\\ +yesterday(Music m)\\ } \umlVHVreal{George}{Beatle} \umlVHVreal{John}{Beatle} \umlVHVreal{Paul}{Beatle} \umlVHVreal{Ringo}{Beatle} \umlaggreg[arg=state,pos=0.8]{Music}{Beatle} \umlnote[x=-2.5,y=8,width=4cm]{Music}{ state.help(m : Music)\\ state.obladi(m : Music)\\ state.yesterday(m : Music)\\ } \end{tikzpicture} \end{bAntwort} \end{enumerate} \noindent Das Programm implementiert ein Zustandsdiagramm, das das Verhalten von Objekten der Klasse \bJavaCode{Music} beschreibt. Für die Implementierung wurde das Design-Pattern \texttt{STATE} angewendet. \begin{enumerate} \setcounter{enumi}{2} %% % b) %% \item Geben Sie die statische Struktur des STATE-Patterns\index{Zustand (State)} an und erläutern Sie, welche Rollen aus dem Entwurfsmuster den Klassen des gegebenen Programms dabei zufallen und welche Operationen aus dem Entwurfsmuster durch (ggf. mehrere) Methoden in unserem Beispielprogramm implementiert werden. Es ist von den \zB im Design-Pattern-Katalog von Gamma et al. verwendeten Namen auszugehen, das heißt von Klassen mit Namen \bJavaCode{Context}, \bJavaCode{State}, \bJavaCode{ConcreteStateA}, \bJavaCode{ConcreteStateB} und von Operationen mit Namen \bJavaCode{request} und \bJavaCode{handle}. \begin{bAntwort} \bEntwurfsZustandUml \bEntwurfsZustandAkteure \end{bAntwort} \item Zeichnen Sie das UML-Zustandsdiagramm\index{Zustandsdiagramm zeichnen} (mit Anfangszustand), das von dem Programm implementiert wird. Dabei muss - gemäß der UML-Notation - unterscheidbar sein, was Ereignisse und was Aktionen sind. In dem Diagramm kann zur Vereinfachung statt \bJavaCode{System.out.println ("x")} einfach \bJavaCode{"x"} geschrieben werden. \begin{bAntwort} \begin{center} \begin{tikzpicture}[font=\scriptsize,scale=0.6,transform shape] \umlstateinitial[y=1,name=Init] \begin{umlstate}[x=0,y=-9]{George} \end{umlstate} \begin{umlstate}[x=10,y=-2]{John} \end{umlstate} \begin{umlstate}[x=0,y=-2]{Paul} \end{umlstate} \begin{umlstate}[x=10,y=-9]{Ringo} \end{umlstate} \umltrans{Init}{Paul} \umltrans[arg={help() / “help”},pos=0.5]{George}{John} \umltrans[arg=yesterday() / “yesterday”,pos=0.5]{George}{Paul} \umltrans[arg=help() / “help”,pos=0.5]{John}{Paul} \umltrans[arg=obladi() / “obladi”,pos=0.5]{John}{Ringo} \umltrans[arg=help() / “help”,pos=0.5]{Paul}{George} \umltrans[recursive=170|190|0.5cm,recursive direction=left to left,arg=yesterday() / “yesterday”]{Paul}{Paul} \umltrans[arg=help() / “help”,pos=0.5]{Ringo}{John} \umltrans[arg=yesterday() / “yesterday”,pos=0.5]{Ringo}{Paul} \end{tikzpicture} \end{center} \end{bAntwort} \end{enumerate} \end{document}