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