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 NACHKLAUSUR Studiengang: HFI/W413 Studienquartal: II. Theoriequartal 1 Prüfungsumfang: Literatur und Lösungen aus dem Übungsbetrieb Dozent: Löwe Termin: 29. August 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 (1 Punkt): Ein Anwendungsfalldiagramm definiert unter anderem die Systemgrenze. Was ist in­ nerhalb der Systemgrenze, was außerhalb? Aufgabe 2 (1 Punkt): Geben Sie ein Aktivitätsdiagramm für die Aktivitäten (1) „Testen“, (2) „Funktion implementieren“, (3) „Testfälle schreiben“, und (4) „Funktionskopf 2 festlegen“ bei der Entwicklung von LOMF­Funktionen an, das die 4 Aktivitäten in die Reihenfolge bringt, die Sie im ersten Semester gelernt haben! (Achten Sie auf mögliche Parallelarbeit!) Aufgabe 3 (3 Punkte): Betrachten Sie die drei Aggregationen x1, x2 und x3 in Abbildung 1! Bei x3 machen an beiden Enden (sowohl an dem Ende mit Raute als auch am Ende ohne Raute) Abbildung 1: Aggregationen alle 4 Multiplizitäten *, +, 1 und 0..1 Sinn. Das ist bei x1 und x2 nicht so! Welche Multiplizitäten an welchem Ende sind bei x1 und x2 sinnlos? Warum? Aufgabe 4 (2 Punkte): Interpretieren wir die Aggregation x3 in Abbildung 1 als „contains“ mit Leserich­ tung vom Ende mit Raute zum Ende ohne Raute, dann können die Klassen G, H und K als „Datei System“, „Datei“ und „Ordner“ interpretiert werden! Wie? Welche Multiplizitäten sind dann für x3 richtig? Aufgabe 5 (2 Punkte): Erläutern Sie das Muster Template Method anhand eines guten Beispiels! Aufgabe 6 (1 Punkt): In Java gibt es die Klasse Object, von der alle anderen Klassen abgeleitet sind. Das bedeutet: Object ist allgemeiner als jede andere Klasse. Warum kann es in Java keine Klasse geben, die spezieller ist als jede andere Klasse? Aufgabe 7 (3 Punkte): Die Klassen B, C und D zusammen mit der Aggregation x2 (inklusive *­Multiplizitä­ ten an beiden Enden) in der Abbildung oben ergeben die Grundstruktur eines Composite Patterns. Will man diese Struktur in Java implementieren, muss eine Operation abstract boolean contains(B b) in die Klasse B. Warum? Geben Sie die Java­Methoden für diese Operation in den Klassen C und D an! (Da­ bei implementiere die Java­Klasse D die Aggregation x2 über ein Feld private Collection<B> x2.) Aufgabe 8 (1 Punkt): In Ihrer Lösung zu Aufgabe 7 sollten Sie einen Iterator benutzt haben. Iteratoren haben neben hasNext und next noch eine weitere Operation. Welche? Erläutern Sie Ihre Wirkungsweise! Aufgabe 9 (2 Punkte): Geben Sie die naheliegenden Visitoren für die Klassen in Abbildung 1 als Java­ Kode an! Wozu kann man diese Visitoren einsetzen? TEIL II: ANWENDUNG (55 MINUTEN) Aufgabe 10 (5 Punkte): Geben Sie ein möglichst präzises Fachklassenmodell 3 für Konten, Buchungen und Transaktionen an. Ein Konto hat einen Saldo (aktuellen Kontostand) als Integer4 und eine Liste von Ein­ trägen. Jeder Eintrag hat ein Datum und einen positiven Buchungsbetrag (Card). Ein Eintrag ist entweder Gamma et al: Design Patterns und Oesterreich: Objektorientierte Softwareentwicklung - Analyse und Design mit der UML Der Funktionskopf besteht aus Name der Funktion, Namen und Typen der Parameter, Rückgabetyp und Kommentar. 3 Geben Sie stets Multiplizitäten (0..1, 1, *, +) an und benutzen Sie Aggregationen, wo es sinnvoll ist! 4 Wir gehen hier davon aus, dass alle Geldbeträge in Euro-Cent angegeben werden. 1 2 eine Lastschrift5 oder eine Gutschrift6. Eine Buchung hat einen positiven Buchungsbetrag sowie ein Quell­ konto, von dem der Buchungsbetrag abgebucht werden soll, und ein Zielkonto, dem der Buchungsbetrag gutgeschrieben werden soll. Eine Transaktion hat eine Bezeichnung (String) und besteht aus einer Liste von Buchungen. Eine Transaktion kann ausgeführt werden. Dazu hat sie die Operation execute(). Beim Ausführen einer Transaktion werden alle ihre Buchungen ausgeführt, d. h. auf den Quell­ und Zielkonten verbucht7. Jede Transaktion darf nur einmal ausgeführt werden! Aufgabe 11 (3 Punkte): Geben Sie die Java­Klassen und ­Interfaces für Ihr Modell aus Aufgabe 10 an! (Benutzen sie Date als Datentyp für Datumsangaben!8 ) Aufgabe 12 (5 Punkte): Geben Sie die notwendigen Operationen und Methoden zur Implementierung der Operation void execute() throws AlreadyExecuted zum Ausführen von Transaktionen an! (Das aktuelle Datum liefert new Date() !) Aufgabe 13 (3 Punkte): Zwei Assoziationen r1 von der Klasse A zur Klasse B und r2 von der Klasse B zur Klasse C lassen sich komponieren zu einer Assoziation r1 ;r2 von der Klasse A zur Klasse C. Wir definie­ ren, dass ein Link zur Assoziation r1 ;r2 von einem A­Objekt a zu einem C­Objekt c genau dann existiert, wenn es einen Link zur Assoziation r1 von a zu einem B­Objekt b gibt und einen Link zur Assoziation r2 von b zu c. Welche Multiplizität hat r1 ;r2 am C­Ende in Abhängigkeit von den Multiplizitäten von r1 und r2 am B­Ende bzw. C­Ende? Diskutieren Sie wieder nur die Multiplizitäten *, +, 1 und 0..1 ! (Achten Sie auf Vollständigkeit!) TEIL III: TRANSFER (30 MINUTEN) Aufgabe 14 (2 Punkte): Sei r1 ;r2, wie in Aufgabe 13 , die Komposition zweier Assoziationen r1 von der Klasse A zur Klasse B und r2 von der Klasse B zur Klasse C. Hier sollen r1 und r2 Abbildungen sein, d. h. ihre Multiplizität am B­ bzw. C­Ende ist 1. Welche Rückschlüsse kann man zur Multiplizitäten von r1 und r2 am A­ bzw. B­Ende ziehen, wenn man die Multiplizität von r1 ;r2 am A­Ende (*, +, 0..1 oder 1) kennt? Aufgabe 15 (3 Punkte): Betrachten Sie das kleine Meta­Modell für Objektorientierte Systeme in Abbil­ dung 2! (Jede gerichtete Assoziation in diesem Mo­ dell ist eine Abbildung!) Für jedes Link­Objekt l gibt es zwei zugeordnete Class­Objekte, nämlich l.instanceOf.from und l.from.instanceOf . Welche Konsistenzbedingung muss für diese beiden Class­Objekte gelten, damit die Object­Objekte Abbildung 2: Meta-Modell zum Meta­Modell zusammen mit den Link­Objekten eine vernünftige Objektwelt darstellen? Welche Be­ dingung müssen die „Klassen“ l.instanceOf.to und l.to.instanceOf für jeden Link l erfüllen? Aufgabe 16 (3 Punkte): Betrachten Sie folgende Standardimplementierung von equals: Jede Klasse, die die equals­Operation aus Object überschreiben will, geht so vor wie die Klasse A unten. Ist so garantiert, dass equals reflexiv, symmetrisch und transitiv ist? Begründen Sie Ihre Antwort stichhaltig! interface EQ { boolean preEquals(Object a); } class A .... implements EQ {....... public boolean equals(Object a){ if (this == a) return true; if (a instanceof A) return ((A)a).preEquals(this); return false; } public boolean preEquals(Object a){ if (a instanceof A) return this.checkEquals((A)a); return false; } private boolean checkEquals(A a) {....... } } Oder auch Abbuchung; Englisch „debit“. Oder auch Zubuchung; Englisch „credit“. 7 Dabei werden die entsprechenden Gut- und Lastschriften erzeugt! 8 Gibt es in Java als java.util.Date. 5 6