¨Ubungsaufgaben zur Vorlesung Modellbasierte

Werbung
Prof. Dr. Wilhelm Schäfer
Christian Brenner
Tristan Wittgen
Paderborn, 27. Oktober 2014
Besprechung der Aufgaben: 3.-6. November 2014
Übungsaufgaben zur Vorlesung
Modellbasierte Softwareentwicklung
Wintersemester 2014/2015
Übungsblatt 2
Aufgabe 1 – Beispielsuche
Überlegen Sie, an welchen Stellen die Entwurfsmuster (Design Pattern), die Sie bisher
kennengelernt haben, in Standardsoftware zum Einsatz kommen könnten. Erläutern Sie kurz,
wie Sie sich die Anwendung des Musters vorstellen.
Beispiel: Strategy-Muster (Strategy-Pattern) für die Outline in Eclipse: Das StrategyMuster wird angewendet, wenn von einem Algorithmus mehrere Varianten existieren. Die
Outline in Eclipse zeigt alle Methoden und Attribute einer Klasse an. Diese können alphabetisch oder nach ihrem Vorkommen in der Klasse sortiert werden. Für den Sortieralgorithmus wird eine Schnittstelle SortAlgorithm implementiert. Die Klassen für die konkreten
Sortieralgorithmen AlphabeticSort und AppearanceSort implementieren die Schnittstelle SortAlgorithm. Eclipse erzeugt ein Objekt eines speziellen Sortieralgorithmus, z.B. AlphabeticSort und übergibt es der Outline. Danach interagiert Eclipse ausschließlich mit der Outline.
Die Outline leitet die Sortieranfragen von Eclipse über die Schnittstelle SortAlgorithm an
AlphabeticSort weiter.
Finden Sie drei Beispiele!
1
Aufgabe 2 – Anwendung des Abstract Factory Pattern
Ein Entwickler hat einen Prototypen zur Bearbeitung von Datenbanken in einer Anwendung entwickelt. Dabei hat er die Klassen für eine spezielle Datenbank, nämlich MySQL,
geschrieben (s. Abbildung 1).
Abbildung 1: Klassendiagramm der Datenbankanwendung
Nun möchte er den Code so erweitern, dass verschiedene Datenbanken angesprochen werden können. Nutzen Sie das Abstract Factory Pattern, um das Design des Entwicklers zu
verallgemeinern! Fügen Sie für Oracle exemplarisch ebenfalls neue Klassen hinzu.
Erarbeiten Sie Ihre Lösung in Form eines Klassendiagramms.
Aufgabe 3 – Observer-Muster
Hinweis: Für die Bearbeitung der Aufgaben benötigen Sie Eclipse und das Eclipse Modeling
Framework.
Ein gutes Tuturial kann auf dieser Website gefunden werden: http: // www. vogella. com/
articles/ EclipseEMF/ article. html
Abbildung 2 zeigt ein Klassendiagramm, in dem das Observer-Pattern eingesetzt wird,
um Facebook-Nachrichten zu verfolgen. Zur Vereinfachung wird angenommen, dass alle Nachrichten eines Subjekts FacebookAccount beobachtet werden. Beobachter (Observer ) ist die
Klasse MessageObserver.
3.1 Erklären sie, warum die Assoziation subject von der konkreten Implementierung eines
Observers, in diesem Fall MessageObserver, zur konkreten Implementierung eines Subjekts,
in diesem Fall FacebookAccount, verläuft. Eine alternative Möglichkeit, um die Navigierbarkeit von Beobachter nach Subjekt zu realisieren, wäre es, die Assoziation des observers als
bi-direktionale Assoziation umzusetzen. Was wäre dabei allerdings der Nachteil?
3.2 Stellen Sie das Klassendiagramm aus Abbildung 2 mit Eclipse nach. Nutzen Sie dafür
ein Ecore-Diagramm. Verwenden Sie anschließend das EMF Generator Model um den JavaQuelltext zu generieren. Erweitern Sie den generierten Java-Quelltext um folgende Funktionalität: Eine Testklasse, mittels der Benutzer Nachrichten über die Konsole im Format msg:
<Nachrichtentext> eingeben können (in einer Schleife, bis er/sie das Programm beendet).
2
Abbildung 2: Klassendiagramm eines Facebook-Account Beobachters
Dabei soll eine Benachrichtigung des Beobachters in der Konsole ausgegeben werden. Bitte beachten Sie, an allen Mehoden, die Sie geändert haben, die Annotation @generated zu
entfernen oder durch @generated Not zu ersetzen. Alle Setter- und Getter-Methoden werden
durch EMF standardmäßig mit generiert und brauchen somit nicht im Ecore-Diagramm mit
modelliert werden. Bitte beachten Sie, die attach- und detach-Methode zu implementieren.
3.3 Erweitern Sie das Klassendiagramm um einen Observer FriendRequestObserver, der
die Freundschaftsanfragen verfolgt, die bei dem beobachteten Facebook-Account eingehen.
Generieren Sie wieder den Code und erweitern ihn, sodass der Benutzer Freundschaftsanfragen im Format friend:<RequesterName> in der Konsole eingeben kann. Falls nun eine
neue Nachricht oder eine Freundschaftsanfrage eingeht, soll ausschließlich der zuständige Beobachter, MessageObserver bzw. FriendRequestObserver, eine Benachrichtigung über die
Konsole ausgeben. Beschreiben sie zwei mögliche Umsetzungen und implementieren sie eine
davon!
3.4 Betrachten Sie die von Java bereitgestellte abstrakte Klasse java.util.Observable
und das Interface java.util.Observer. Wie hilft diese Implementierung bei der in Teilaufgabe 3.3 formulierten Problemstellung?
3
Herunterladen