\documentclass{bschlangaul-aufgabe} \bLadePakete{java,uml} \ANTWORTfalse \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 5}, Thematik = {MyList Kompositium}, Referenz = 66116-2021-F.T1-TA1-A5, RelativerPfad = Examen/66116/2021/03/Thema-1/Teilaufgabe-1/Aufgabe-5.tex, ZitatSchluessel = examen:66116:2021:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Einfach-verkettete Liste}, EinzelpruefungsNr = 66116, Jahr = 2021, Monat = 03, ThemaNr = 1, TeilaufgabeNr = 1, AufgabeNr = 5, } \let\j=\bJavaCode Die folgende Abbildung stellt den Entwurf der Implementierung einer verketteten Liste dar, welche Integer-Werte als Elemente enthalten kann. \index{Einfach-verkettete Liste} \footcite{examen:66116:2021:03} \begin{center} \begin{tikzpicture} \umlclass[x=-1,y=0]{MyList}{}{getSum(): Integer} \umlclass[x=4,y=0,type=interface]{MyElement}{}{calculateSum() : Integer} \umlclass[x=2,y=-3]{MyEndElement}{}{} \umlclass[x=6,y=-3]{MyRegularElement}{value : Integer}{} \umlVHVreal{MyEndElement}{MyElement} \umlVHVreal{MyRegularElement}{MyElement} \umlHVHuniassoc[arm1=3cm,arg1=next,pos1=0.6,mult2=1,pos2=2.9]{MyRegularElement}{MyElement} \umluniassoc[arg1=head,mult2=1,pos1=0.3]{MyList}{MyElement} \end{tikzpicture} \end{center} \noindent Die Klassse \j{MyList} stellt die Methode \j{getSum()} zur Verfügung, welche die Summe über alle in einer Liste befindlichen Elemente berechnet. Ein Ausschnitt der Implementierung sieht folgendermaßen aus: \begin{bJavaAngabe} public class MyList { private MyElement head; public MyList() { this.head = new MyEndElement(); } public int getSum() { // .. } } \end{bJavaAngabe} \noindent Gehen Sie im Folgenden davon aus, dass bereits Methoden existieren, welche Elemente in die Liste einfügen können. \begin{enumerate} %% % a %% \item Implementieren Sie in einer objektorientierten Programmiersprache Ihrer Wahl, \zB Java, die Methode \j{calculateSum()} der Klassen \j{MyEndElement} und \j{MyRegularElement}, so dass rekursiv die Summe der Elemente der Liste berechnet wird. Als Abbruchbedingung darf hierbei nicht das Feld \j{MyRegluarElement.next} auf den Wert \j{null} überprüft werden. Hinweis: Gehen Sie davon aus, die Implementierung von \j{MyList} garantiert, dass \j{MyRegluarElement.next} niemals den Wert \j{null} annimmt, sondern das letzte hinzugefügte \j{MyRegularElement} auf eine Instanz der Klasse \j{MyEndElement} verweist. Es gibt immer nur eine Instanz der Klasse \j{MyEndElement} in einer Liste. Hinweis: Achten Sie auf die Angabe einer korrekten Methodensignatur. \begin{bAntwort} \bJavaExamen[firstline=18,lastline=20]{66116}{2021}{03}{my_list/MyElement} \bJavaExamen[firstline=15,lastline=17]{66116}{2021}{03}{my_list/MyEndElement} \end{bAntwort} %% % b %% \item Nennen Sie den Namen des Entwurfsmusters, auf welchem das oben gegebene Klassendiagramm basiert, und ordnen Sie dieses in eine der Kategorien von Entwurfsmustern ein. Hinweis: Es genügt die Angabe eines Musters, falls Sie mehrere Muster identifizieren sollten. \begin{bAntwort} Kompositium (Strukturmuster) \end{bAntwort} \end{enumerate} \begin{bAdditum} \bJavaExamen{66116}{2021}{03}{my_list/MyElement} \bJavaExamen{66116}{2021}{03}{my_list/MyEndElement} \bJavaExamen{66116}{2021}{03}{my_list/MyList} \end{bAdditum} \end{document}