Fachhochschule Stuttgart Hochschule der Medien Probeklausur 1 Dozent: Prof. Dr. Edmund Ihler Leistungsnachweis: Informatik 4 EDV-Nr.: 13037 Prüfungsdauer: 90 Minuten erlaubte Hilfsmittel: keine Beilagen: keine Name: Vorname: Matrikelnr.: Prüfungsraum: Datum: Zu lösen sind alle Aufgaben. Lösungen werden direkt unter die Aufgaben geschrieben. Kein zusätzliches Prüfungs- oder Konzeptpapier. maximale Punktzahl Aufgabe 1: 16 Aufgabe 2: 17 Aufgabe 3: 12 Aufgabe 4: 23 Aufgabe 5: 22 Gesamtpunktzahl: 90 Note: davon erreicht Seite 1 von 14
Seite 2 von 14
Schreiben Sie nur in die vorgesehenen Felder. Falls Sie mehr Platz benötigen, benutzen Sie die freien Blätter am Ende des Klausurexemplars und verweisen Sie eindeutig auf den entsprechenden Aufgabenteil (Fußnote). Aufgabe 1: Grundlagen der UML Gesamtpunktzahl: 16 Teilaufgabe 1.a: Benennen Sie folgende UML-Modellierungselemente (z.b. class). 6 Punkte hans object collaboration actor state activity component Teilaufgabe 1.b: Entwerfen Sie ein Class Diagram, das die Klassen Klavier und Taste zeigt und folgenden Zusammenhang spezifiziert: Ein Klavier besitzt unbestimmt viele Tasten, die als Klaviertasten fungieren, aber mindestens 12 davon. Klavier und Tasten können sich gegenseitig Nachrichten schicken. Eine Taste ist entweder weiss oder nicht-weiss (= schwarz). 5 Punkte Klavier Klaviertaste 12.. * Taste weiss:boolean Teilaufgabe 1.c: Die angegebene qualifizierte Assoziation mit zwei Qualifiern kann man in Java mit Hilfe verschachtelter Maps implementieren. Wie, soll A q1:q1 q2:q2 folgendes Klassendiagramm zeigen. Ergänzen Sie dieses entsprechend, mit Multiplizitäten und Rollennamen b ein. 5 Punkte b 1 B A 1 1 Map Map q1:q1 q2:q2 b 1 B Seite 3 von 14
Aufgabe 2: UML-Metamodell Gesamtpunktzahl: 17 Folgendes Diagramm in Abbildung 1 ist ein Ausschnitt aus dem UML-Metamodell. Abbildung 2 visualisiert ein konkretes UML-Modell. Abbildung 1: Ausschnitt UML Meta-Modell Text +add_line(obj_line:line):void +iterator_line():lineiterator textlines 0..* +line {ordered Line -text:string="" +Line(text:String) +dump():void TextGoethe +TextGoethe() Abbildung 2: Konkretes UML-Modell: TextOfLines Teilaufgabe 2.a: Die in Abbildung 2 visualisierten UML-Modellierungselemente sind Instanzen von Metaklassen aus dem Metamodell in Abbildung 1. Ordnen Sie den Modellierungselementen die entsprechenden Metaklassen zu. 5 Punkte Seite 4 von 14
Modellierungselement Name der Metaklasse Class Attribute Association AssociationEnd Generalization Teilaufgabe 2.b: Im Modell in Abbildung 2 werden Werte für Meta-Attribute im Metamodell aus Abbildung 1 festgelegt. Wie heissen die Meta-Attribute, deren Werte durch die durch die folgende Notation aus Abbildung 2 festgelegt wird. 12 Punkte Notation für Wert Name der Meta- Attributs multiplicity Bedeutung für Werts für Modellierungselement Textobjekte besitzen 0 oder beliebig viele Line-Objekte in der Rolle line ordering Die textline-links sind geordnet Pfeilspitze bei: Kursivschrift bei: bei isnavigable isabstract initialvalue aggregation Von einem Text-Objekt aus kann man zu seinen line- Objekten navigieren Es sind keine Instanzen der Klasse Text möglich Der Leerstring ist der Initiale Wert für das Attribut text bei Line-Instanzen. Die Assoziation ist eine Komposition Seite 5 von 14
Aufgabe 3: RUP (Rational Unified Process) Gesamtpunktzahl: 12 Teilaufgabe 3.a: Stellen Sie die zweidimensionale RUP-Prozessstruktur grafisch dar. Zeichnen Sie in zwei der Workflows (Disciplines) exemplarisch ein typisches Resourcenprofil ein (Resourcenbedarf über der Zeit). 6 Punkte Teilaufgabe 3.b: Vervollständigen Sie die fehlenden drei der vier Schlüsselkonzepte (Key Concepts) der RUP-Prozessbeschreibungen gemäß analog dem eingetragenen Beispiel Activity und erläutern Sie stichwortartig, was deren Bedeutung ist. 6 Punkte Activity Beschreibung, wie etwas erfolgen soll Workflow wann soll etwas geschehen (Activity) und entstehen Artefakt) Worker wer (Rolle) soll etwas (Aktivität) tun Artefact was soll entstehen (Ergebnis, Produkt) Seite 6 von 14
Aufgabe 4: Text Viewer Gesamtpunktzahl:23 Im Modell TextOfLines aus Abbildung 2 bestehen Texte aus Zeilen (Line-Objekte). Ein TextViewer-Objekt ist in der Lage die Zeilen eines Textes anzuzeigen. Dazu verwendet es in seiner Methode dump(:text) die Methode iterator_line() des Text-Objekts um ein LineIterator-Objekt zu erhalten, und um damit die Line-Objekte zu iterieren und diesen jeweils die Operation dump() zu delegieren. Diese Methode gibt den Inhalt der Zeile auf die Konsole aus. TextViewer +main(args:string[]):void +dump(text:text):void Text <<parameter>> text +add_line(obj_line:line):void +iterator_line():lineiterator public class TextViewer { public static void main(string[] args){ Text text = new TextGoethe(); TextViewer textviewer = new TextViewe textviewer.dump(text); public void dump(text text) { // foreach line in textlines: dump line //... Abbildung 3: TextViewer LineIterator +nextline():line +hasnextline():boolean Line -text:string="" +Line(text:String) +dump():void Abbildung 4: LineIterator Teilaufgabe 4.a: Implementieren Sie zunächst die Operation dump(:text) der Klasse TextViewer unter Verwendung der Methode iterator_line() der Klasse Text. 5 Punkte public void dump(text text) { for ( ) { LineIterator iter = text.iterator_line(); iter.hasnextline(); iter.nextline().dump(); Seite 7 von 14
Teilaufgabe 4.b: Wenden Sie nun das GoF-Design Pattern Adapter an, um das Interface LineIterator durch einen Adapter für java.util.iterator zu realisieren. Spezifizieren Sie die Verwendung des Patterns, indem Sie folgendes Collaboration Diagram vervollständigen. Zeichnen Sie dabei das Role-Binding, und die entschiedenden Relationen ein. 8 Punkte interface java.util.iterator +hasnext():boolean +next():java.lang.object +remove():void 1 iterator LineIteratorImpl <<Role>> Adaptee <<Role>> Adapter +LineIteratorImpl(iterator:Iterator) +nextline():line +hasnextline():boolean Iterator Adapter <<Role>> Client <<Role>> Client TextViewer +dump(text:text):void interface LineIterator +nextline():line +hasnextline():boolean Teilaufgabe 4.c: Implementieren Sie nun die Klasse LineIteratorImpl, die dieses Interface realisiert. Stellen Sie dabei den oben angegebenen Konstruktor zur Verfügung. 5 Punkte import java.util.*; public class LineIteratorImpl implements LineIterator { private Iterator iterator; public LineIteratorImpl(Iterator iterator){ this.iterator = iterator; public Line nextline(){ return (Line)iterator.next(); public boolean hasnextline(){ return iterator.hasnext(); Seite 8 von 14
Teilaufgabe 4.d: Implementieren Sie nun die Klasse Text. Verwenden Sie dabei eine passende Collection-Klasse. 5 Punkte import java.util.*; abstract public class Text { private List line = new ArrayList(); public void add_line(line obj_line) { line.add(obj_line); public LineIterator iterator_line() { return new LineIteratorImpl(line.iterator()); Seite 9 von 14
Aufgabe 5: Würfelspiel Gesamtpunktzahl: 22 Würfelspiel: Folgendes einfache Würfelspiel wird von zwei Spielern mit einem sechsseitigen Würfel gespielt, der die Augenzahlen 1, 2 und 3 je zweimal besitzt. Ziel: Jeder Spieler versucht durch aufeinanderfolgende Würfe eine möglichst hohe Gesamtaugenzahl zu erreichen. Spielausgang: Wer von beiden Spielern in einer Partie die höchste Gesamtaugenzahl erreicht, hat gewonnen. Gleiche Gesamtaugenzahl bedeutet unentschieden. Partie: Jeder Spieler kann pro Partie, und unter nachfolgenden Einschränkungen, frei entscheiden, ob er einen, zwei oder drei aufeinanderfolgende Würfe ausführen will. Ein dritter Wurf ist aber nur erlaubt, wenn die Augenzahl des zweiten Wurfs nicht kleiner war, als die des ersten Wurfs. Es beginnt Spieler 1 und führt seine maximal drei Würfe aus, danach folgt Spieler zwei und führt seine maximal drei Züge aus. Gesamtaugenzahl: Die Gesamtaugenzahl eines Spielers wird wie folgt ermittelt: War ein Wurf kleiner als der vorhergehende, so ist die Gesamtaugenzahl gleich 1. Ansonsten ist die Gesamtaugenzahl die Summe aller Augenzahlen seiner Würfe. Teilaufgabe 5.a: Vervollständigen Sie folgendes Use Case Diagram indem Sie angemessene Relationen zwischen den Use Cases einzeichnen. 5 Punkte <<extend>> W ür fe ausführen <<extend>> Spieler <<include>> Wurf 1 ausf üh ren Wurf ausfüh ren Wurf 2 ausf ühren Wurf 3 ausf ühren Teilaufgabe 5.b: Spezifizieren Sie den Spielablauf nun durch ein einfaches Activity Diagram das zeigt, dass zunächst Spieler 1 seine Würfe ausführt, und danach Spieler 2. Benutzen Sie dazu lediglich zwei Activities mit jeweils der Bezeichnung Würfe ausführen sowie Start und Ende, Transitions und Swimlanes. 3 Punkte Spieler 1 Würfe durchführen Spieler 2 Würfe durchführen Seite 10 von 14
Teilaufgabe 5.c: Spezifizieren Sie nun die Activity (bzw. den Use Case) Würfe ausführen im Detail. Verwenden Sie dazu als Modellierungselemente nur Activities inklusive Start und Ende, Transitions, Guard-Conditions, Decisions. Modellieren Sie jeden möglichen Wurf als eine eigene Activity (z.b. Wurf 1 ausführen ). 7 Punkte Wurf 1 ausführen [else] [weiterer Wurf gewünscht] Wurf 2 ausführen [else] [weiterer Wurf gewünscht und Augenzahl von Wurf 2 war nicht kleiner als Augenzahl von Wurf 1] Wurf 3 ausführen Seite 11 von 14
Teilaufgabe 5.d: Folgendes State Chart Diagram beschreibt die Zustände des Würfels, während ein Spieler seine Würfe ausführt. Die Zustände 1, 2 und 3 stellen die geworfene Augenzahl dar, nach dem letzten Wurf. Folgende Events werden dabei an den Würfel gesendet: w(i): wenn ein Wurf mit der Augenzahl i = 1, 2 oder 3 erfolgt ist end: wenn laut Spielregel kein Wurf mehr erlaubt ist In g wird die Gesamtaugenzahl gespeichert. Ergänzen Sie die noch fehlenden Transitions samt Events und Actions (um g aktuell zu halten). 7 Punkte 1 end w(1)/g=1 w(1)/g=g+1 w(2)/g=g+2 w(2)/g=2 w(3)/g=3 w(3)/g=g+3 2 w(2)/g=g+2 3 w(3)/g=g+3 end w(1)/g=1 w(3)/g=g+3 end w(2)/g=1 w(2)/g=1 Seite 12 von 14
Seite 13 von 14
Seite 14 von 14