\documentclass{bschlangaul-aufgabe} \bLadePakete{java,uml} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 1}, Thematik = {UML-Diagramme entspreched Java-Code zeichnen}, Referenz = 66116-2018-F.T2-TA2-A1, RelativerPfad = Examen/66116/2018/03/Thema-2/Teilaufgabe-2/Aufgabe-1.tex, ZitatSchluessel = examen:66116:2018:03, ZitatBeschreibung = {Seite 15-16}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Vererbung, Interface, Abstrakte Klasse, Klassendiagramm, Objektdiagramm, Sequenzdiagramm}, EinzelpruefungsNr = 66116, Jahr = 2018, Monat = 03, ThemaNr = 2, TeilaufgabeNr = 2, AufgabeNr = 1, } Gegeben sei das folgende Java-Programm: \footcite[Seite 15-16]{examen:66116:2018:03} \begin{bJavaAngabe} class M { private boolean b; private F f; private A a; public void m() { f = new F(); a = new A(f); b = true; } } class A { private R r; public A(I i) { r = i.createX(); } } interface I { public X createX(); } class F implements I { public X createX() { return new X(0, 0); } } abstract class R { protected int v; } class X extends R { private int v, w; public X(int v, int w) { this.v = v; this.w = w; } } \end{bJavaAngabe} \begin{enumerate} %% % a) %% \item Das Subtypprinzip\index{Vererbung}\index{Interface}\index{Abstrakte Klasse} der objektorientierten Programmierung wird in obigem Programmcode zweimal ausgenutzt. Erläutern Sie wo und wie dies geschieht. %% % b) %% \item Zeichnen Sie ein UML-Klassendiagramm\index{Klassendiagramm}, das die statische Struktur des obigen Programms modelliert. Instanzvariablen mit einem Klassentyp sollen durch gerichtete Assoziationen mit Rollennamen und Multiplizität am gerichteten Assoziationsende modelliert werden. Alle aus dem Programmcode ersichtlichen statischen Informationen (insbesondere Interfaces, abstrakte Klassen, Zugriffsrechte, benutzerdefinierte Konstruktoren und Methoden) sollen in dem Klassendiagramm abgebildet werden. \begin{bAntwort} \begin{tikzpicture} \umlclass[x=1,y=5]{M}{- boolean b}{+ m(): void} \umlsimpleclass[x=0,y=2.5]{F} \umlsimpleclass[x=5,y=5]{A} \umlclass[x=7,y=2.5,type=abstract]{R}{\# int v}{} \umlclass[x=3,y=0,type=interface]{I}{}{+ createX(): X} \umlclass[x=8,y=0]{X}{- int v\\- int w}{} \umluniassoc[mult=1]{A}{R} \umluniassoc[mult=1]{M}{A} \umluniassoc[mult=1]{M}{F} \umluniassoc[mult=1]{I}{X} \umldep[mult=1,pos=0.9]{A}{I} \umlinherit{X}{R} \umlreal{F}{I} \end{tikzpicture} \end{bAntwort} %% % c) %% \item Es wird angenommen, dass ein Objekt der Klasse \bJavaCode{M} existiert, für das die Methode \bJavaCode{m()} aufgerufen wird. Geben Sie ein Instanzendiagramm (Objektdiagramm)\index{Objektdiagramm} an, das alle nach der Ausführung der Methode \bJavaCode{m} existierenden Objekte und deren Verbindungen (Links) zeigt. \begin{bAntwort} \bMetaNochKeineLoesung \end{bAntwort} %% % d) %% \item Wie in Teil c) werde angenommen, dass ein Objekt der Klasse M existiert, für das die Methode \bJavaCode{m()} aufgerufen wird. Diese Situation wird in Abb. 1 dargestellt. Zeichnen Sie ein Sequenzdiagramm\index{Sequenzdiagramm}, das Abb. 1 so ergänzt, dass alle auf den Aufruf der Methode \bJavaCode{m()} folgenden Objekterzeugungen und Interaktionen gemäß der im Programmcode angegebenen Konstruktor- und Methodenrümpfe dargestellt werden. Aktivierungsphasen von Objekten sind durch längliche Rechtecke deutlich zu machen. \begin{bAntwort} \begin{tikzpicture} \begin{umlseqdiag} \umlobject[class=M]{m} %,create text={new F()} \umlcreatecall[class=F]{m}{f} %,create text={new A(f) \umlcreatecall[class=A]{m}{a} \begin{umlcall}[op={createX()},return={:X}]{a}{f} % ,create text={new X(0,0) \umlcreatecall[class=X]{f}{x} \end{umlcall} \end{umlseqdiag} \end{tikzpicture} \end{bAntwort} \end{enumerate} \end{document}