FA C H H O C H S C H U L E F Ü R D I E W I RT S C H A F T F H D W, H A N N O V E R O B J E K T- O R I E N T I E R T E S O F T WA R E T E C H N I K 1 KLAUSUR Studiengang: HFI/W413 Studienquartal: II. Theoriequartal 1 Prüfungsumfang: Literatur und Lösungen aus dem Übungsbetrieb Dozent: Löwe Termin: 20. Juni 2014 Dauer: 120 Minuten 40 Punkte sind zu erreichen: Wissen 16, Anwendung 16, Transfer 8 Punkte. Bestanden ab 16 Punkte. TEIL I: WISSEN (35 MINUTEN) Aufgabe 1 (2 Punkte): Geben Sie ein Aktivitätsdiagramm für die Aktivitäten (1) „Fachklassenmodell ent­ wickeln“, (2) „Anwendungsfälle beschreiben“, (3) „Aktivitätsdiagramme zeichnen“, (4) „Fachlexikon er­ stellen“ und (5) „Anwendungsfalldiagramm zeichnen“ in der Objektorientierten Analyse an, das die 5 Akti­ vitäten in die richtige Reihenfolge bringt! Aufgabe 2 (2 Punkte): Die vier von uns betrachteten Multiplizitäten *, +, 1 und 0..1 entstehen aus der or­ thogonalen Kombination von zwei Eigenschaften. Welche sind das? Wie kombiniert man sie für die vier be­ trachteten Multiplizitäten? Aufgabe 3 (3 Punkte): Java kennt keine Mehrfachvererbung. Das ist Schade! Insbesondere im Zusammen­ hang mit dem Muster Template Method. Warum? (Hinweis: Erläutern Sie anhand eines guten Beispiels!) Aufgabe 4 (1 Punkt): Geben Sie die Grundstruktur (Klassendiagramm) eines Composite Patterns an! Aufgabe 5 (1 Punkt): Die Menge der Verbindungen (Links) zur einzigen Beziehung (Assoziation) in Ihrem Modell aus Aufgabe 4 muss eine bestimmte Anforderung erfüllen. Welche? (Hinweis: Hier ist keine formale Definition gefordert! Es reicht eine informelle aber präzise Beschreibung!) Aufgabe 6 (2 Punkte): In einem Composite Pattern, siehe Aufgabe 4 oben, unterscheidet man durch zwei Klassen atomare und zusammengesetzte Elemente, die Blätter bzw. Knoten. Erweitern Sie das Muster so, dass durch eine dritte Klasse auch die Wurzeln der Kompositionen ausgezeichnet werden! (Wurzeln ent­ halten andere Elemente, können aber nicht in anderen Elementen enthalten sein.) Aufgabe 7 (1 Punkt): Welches Muster muss man einsetzen, wenn man im Modell aus Aufgabe 6 erzwin­ gen will, dass alle Objekte unter einer einzigen Wurzel zu finden sind. Welche Multiplizitäten, siehe Aufga­ be 2 , muss man dann den beiden Enden der Assoziation zuweisen? Aufgabe 8 (2 Punkte): Die Programmiersprache Java kennt keine symmetrischen Beziehungen. Die Bezie­ hungen in einem Fachklassendiagramm sind aber in aller Regel symmetrisch. So auch die einzige Bezie ­ hung in Ihrem Modell in Aufgabe 6 . Die Umsetzung Ihres Modells in Java muss man also dadurch vorbe­ reiten, dass man die symmetrische Beziehung durch gerichtete Beziehungen modelliert. Wie sieht das ver­ änderte Modell aus Aufgabe 6 aus? (Hinweis: Hier ist nur das Klassendiagramm mit gerichteten Assozia­ tionen2 gefragt, nicht der konkrete Java­Kode!) Aufgabe 9 (2 Punkte): Geben Sie die beiden naheliegenden Visitoren für Ihr Modell aus Aufgabe 6 als Schnittstellendefinitionen in Java an. T E I L I I : A N W E ND U N G ( 50 M I N U T E N ) Aufgabe 10 (5 Punkte): Geben Sie ein möglichst präzises Fachklassenmodell 3 für Arithmetische Aus­ drücke über den ganzen Zahlen (Integer) an. Die Arithmetischen Ausdrücke Exp werden nach folgenden Regeln gebildet: (1) i Î Integer ⇒ i Î Exp Konstanten (2) x Î String ⇒ x Î Exp Variablen (3) n ≥ 0 und r1, … , rn Î Exp ⇒ r1 + … + rnÎ Exp Summe (mehrstellig) Gamma et al: Design Patterns und Oesterreich: Objektorientierte Softwareentwicklung - Analyse und Design mit der UML Gerichtete Assoziationen entsprechen Objekt-wertigen Attributen in Java. 3 Geben Sie stets Multiplizitäten (0..1, 1, *, +) an und benutzen Sie Aggregationen, wo es sinnvoll ist! 1 2 (4) n ≥ 0 und r1, … , rn Î Exp ⇒ r1 * … * rnÎ Exp Produkt (mehrstellig) (5) r1, r2 Î Exp ⇒ r1 - r2Î Exp Differenz (6) r1, r2 Î Exp ⇒ r1 / r2Î Exp Quotient (ganzzahlig) Es gelten folgende Gesetze für Arithmetische Ausdrücke: (r1 +…+ (ri1 +…+ rim) +…+ rn) = (r1 +…+ ri1 +…+ rim +… + rn) Addition ist assoziativ (r1 *…* (ri1 *…* rim) *…* rn) = (r1 *…* ri1 *…* rim *… * rn) Multiplikation ist assoziativ Deswegen ist es sinnlos, dass (i) ein Bestandteil einer Summe selbst eine Summe ist, und (ii) ein Bestand­ teil einer Multiplikation selbst eine Multiplikation ist! Aufgabe 11 (3 Punkte): Geben Sie die Java­Klassen und ­Interfaces für Ihr Modell aus Aufgabe 10 an. Warum ist eine boolean contains(Exp e)­Operation nötig? Welche Klasse/Interface hat diese Operati­ on? Welche Klassen haben dafür Methoden? (Achtung: Das Schreiben der Methoden ist nicht gefordert!) Aufgabe 12 (5 Punkte): Eine Variablenbelegung ordnet Variablen Werte aus dem Datentyp Integer zu. In Java lassen sich solche Variablenbelegungen leicht durch den Datentyp Map<String,Integer> abbilden4. Schreiben Sie auf der Basis Ihrer Lösung aus Aufgabe 10 und Aufgabe 11 in den richtigen Klassen Java­ Methoden für die Operation Integer value(Map<String,Integer> variableAssignment), die den Integer­Wert eines Arithmetischen Ausdrucks bei einer gegebenen Variablenbelegung berechnet. (Achten Sie auf Fehlersituationen! Das sind z. B. unbelegte Variablen oder Divisionen durch 0. Vermeiden Sie möglichst doppelten Kode!) Aufgabe 13 (3 Punkte): Betrachten Sie das Aktivi­ tätsdiagramm rechts! Wir interpretieren die „grau­ en“ Aktivitäten als Flasche einstellen und die „weißen“ Aktivitäten als Flasche prüfen. Mit dieser Interpretation stellt das Diagramm einen Teil eines Pfandflaschen­Rückgabeautomat dar, der zwei Flaschen gleichzeitig prüfen kann, wäh­ rend bereits die nächste Flasche eingestellt wird. Diese Aussage stimmt nicht ganz! Warum nicht? T E I L I I I : T R A N S F E R ( 35 M I N U T E N ) Aufgabe 14 (2 Punkte): Welche Multiplizitäten, siehe Aufgabe 2 , machen aus einer Beziehung in einem Fachklassendiagramm (a) eine Abbildung, (b) eine injektive Abbildung, (c) eine surjektive Abbildung und (d) eine bijektive Abbildung? Aufgabe 15 (3 Punkte): Beweisen Sie, dass in jedem Ablauf zu dem Aktivitätsdiagramm aus Aufgabe 13 vom Start­Punkt bis zum End­Punkt unter den direkten Folgeaktivitäten jeder grauen Aktivität immer eine weiße ist! Aufgabe 16 (3 Punkte): Betrachten Sie folgende Klassen und ihre Implementierung von equals: class A { protected int v; public boolean equals(Object a){ if (a instanceOf A){ return this.v == ((A)a).v; } else { return false; } } } class B extends A { protected int w; public boolean equals(Object a){ if (a instanceOf B){ return this.v == ((B)a).v && this.w == ((B)a).w; } else { return false; } } } Welches Problem erkennen Sie?5 Wie kann man es beheben?6 Für diese Aufgabe benötigen Sie die Operation Integer get(String key) der Klasse Map<String,Integer>. Sie lie­ fert den Integer-Wert, der im Empfängerobjekt unter dem Schlüssel key eingetragen ist. Sie liefert null, wenn kein Wert eingetragen ist. 4 5 6 2 Punkte 1 Punkt