U13 Entwurfsmuster (I)

Werbung
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2006/07
U13 Entwurfsmuster (I)
Inhalt der Übung
¾ Entwurfsmuster und Implementierung
Übungsaufgaben
Aufgabe 1 (Bauteil)
Gegeben ist das nachfolgende UML-Klassendiagramm für eine einfache
Stücklistenverwaltung. In diesem Modell bestehen Bauteile entweder aus Einzelteilen
oder Baugruppen. Der Preis einer Baugruppe ergibt sich aus der Summe der Preise
seiner Bestandteile.
¾ Welches aus der Vorlesung bekannte Entwurfsmuster wurde in diesem Modell
verwendet?
¾ Zeichnen Sie dieses Entwurfsmuster und die Rollen der daran beteiligten Klassen in
das obige Klassendiagramm ein!
¾ Ergänzen Sie die gegebene Implementierung des Modells (Stueckliste.zip), in
dem Sie die Klasse Baugruppe codieren! Verwenden Sie zur Implementierung das
Java-Collection Framework. Beachten Sie, dass die Aggregation zwischen
Baugruppe und Bauteil (Attribut bauteile) als java.util.Set
implementiert wird.
Seite 1 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2006/07
Aufgabe 2 (Predicate Iterator)
Gegeben ist ein Entwurfsmodell (siehe folgendes Klassendiagramm) für einen Iterator
(PredicateIterator), der über die Objekte einer beliebigen Datenstruktur iteriert
und nur solche Objekte bereitstellt, die einem speziellen Prädikat genügen.
Der Konstruktor PredicateIterator erwartet dazu als Argumente
¾
einen für die benutzte Datenstruktur existierenden Iterator iter vom Typ
java.util.Iterator
sowie eine Beschreibung des Prädikates durch
¾
¾
ein „Suchmuster“ pred vom Typ Predicate und
einen konkreten Wert argument vom Typ Object.
Die Methode predicate() des Interfaces Predicate prüft für ein Objekt
element (der verwendeten Datenstruktur) ob das Prädikat mit dem Wert argument
erfüllt ist (Rückgabewert true, sonst false). Das Entwurfsmodell enthält außerdem
drei Klassen, die Implementierungen des Interfaces Predicate für die Anwendung auf
Zeichenketten darstellen:
¾
PredicateStartsWith prüft für ein String-Objekt (element), ob dieses
mit der Zeichenkette string beginnt.
¾ PredicateEndsWith prüft für ein String-Objekt (element), ob dieses mit
der Zeichenkette string endet.
¾ PredicateLength prüft für ein String-Objekt (element), ob dieses die
Länge length (Typ Integer) hat.
Die Klasse Bibliothek demonstriert die Anwendung des PredicateIteratorKonzeptes:
¾
Die Methode createSuchmuster() stellt die gewünschte PredicateImplementierung bereit (siehe Java-Code).
¾ Die Methode suchen() erzeugt für eine Predicate-Implementierung (pred)
und einen konkreten Wert (argument) eine Liste (Typ List) von Titeln (Typ
String) von Büchern aus dem Bestand der Bibliothek, die dem gewünschten
Prädikat genügen (z.B. alle Titel, die mit der Zeichenkette „UML“ beginnen).
Lösen Sie folgende Teilaufgaben:
¾
Zeichnen Sie Ihnen bekannte Entwurfsmuster (die Sie im Entwurfsmodell erkennen)
in UML-Notation in das Klassendiagramm ein!
¾ Implementieren Sie das Modell und testen Sie Ihr Programm mit dem Praktomaten
(Task 50)!
Seite 2 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2006/07
Seite 3 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2006/07
Aufgabe 3 (Renovation Project)
Das folgende Klassendiagramm beschreibt den Entwurf eines
„Renovierungsprojektes“:
Das Renovierungsprojekt (Klasse RenovationProject) unterstützt die
Material(kosten)planung für ein Renovierungsobjekt (Klasse RenovationObject).
Ein Renovierungsobjekt kann verschiedene Teilobjekte (Klasse StructuredObject)
wie z.B. Zimmer und Wohnungen umfassen. Die Aggregation zwischen
StructuredObject und RenovationObject soll als java.util.Set
implementiert werden. Die Materialplanung (Methode addMaterialReq()) wird
letztendlich für jede (rechteckige) Fläche (Klasse Surface) des Renovierungsobjektes
durchgeführt.
Seite 4 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2006/07
Die Methode addMaterialReq() füllt die übergebene Map, deren Schlüssel den
Namen des Materials und deren Wert die Menge des Materials repräsentiert. Die
geänderte Map wird von der Methode zurückgegeben. Die Methode setzt voraus, dass
für jede Fläche ein Material (Klasse Material) ausgewählt wurde.
Die Methode getMaterialReq()berechnet die für eine bestimmte Fläche
(Parameter s) benötigte Materialmenge. Als Materialien gibt es momentan
Bodenbeläge (Klasse Flooring) und Anstriche (Klasse Paint).
Neben Name und Preis pro (Verkaufs)Einheit einer jeden Materialart wird ein
o Bodenbelag durch seine Breite (Attribut widthOfFlooring)
o Anstrich durch die Anzahl von Farbschichten (Attribut noOfCoats) und die
Anzahl von Quadratmetern, die mit einem Liter Farbe gestrichen werden kann
(Attribut noOfSqMPerLiter)
beschrieben.
Lösen Sie folgende Teilaufgaben:
¾
Zeichnen Sie Ihnen bekannte Entwurfsmuster (die Sie im Entwurfsmodell erkennen)
in UML-Notation in das Klassendiagramm ein!
¾ Implementieren Sie das Modell und testen Sie Ihr Programm mit dem Praktomaten
(Task 52)!
Seite 5 von 5
Herunterladen