U08 Entwurfsmuster (II)

Werbung
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2009/10
U08 Entwurfsmuster (II)
Inhalt der Übung
¾ Diskussion und Implementierung von Entwurfsmustern
Übungsaufgaben
Aufgabe 1 (Queue)
Gegeben ist das folgende Analysemodell einer Warteschlange (Queue):
Eine Warteschlange (Queue) besteht aus einer geordneten Reihenfolge von Objekten
(Object). Objekte werden nach dem FIFO-Prinzip („first-in, first out“) in eine
Warteschlange als letztes Element aufgenommen (add()) und als erstes Element
entfernt (remove()).
front() stellt das erste Element der Warteschlange bereit.
isEmpty() testet, ob die Warteschlange leer ist.
size() ermittelt die Anzahl der Objekte in der Warteschlange.
Es können zwei Arten von Warteschlangen erzeugt werden (siehe Klassendiagramm
unten):
¾ Warteschlangen ohne duplizierte Objekte (d.h., ein Objekt kann sich nur genau
einmal in der Warteschlange „anstellen“ Æ withDuplicates = false)
¾ Warteschlangen mit duplizierten Objekten (d.h., ein Objekt kann sich mehrfach in
der Warteschlange „anstellen“ Æ withDuplicates = true)
Dementsprechend wird zur Implementation entweder
¾ eine Liste ohne duplizierte Objekte („geordnete Menge“ Æ OrderedSet, nicht
im Java-Collection-Framework enthalten, erbt von java.util.List und
java.util.Set ) oder
¾ eine „herkömmliche“ Liste (hier java.util.LinkedList) benutzt.
Seite 1 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2009/10
Seite 2 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2009/10
Um die Warteschlange entsprechend dem gegebenen Modell zu implementieren,
brauchen Sie (wie zuvor erklärt) eine geordnete Menge. Da im Java-CollectionFramework eine solche Datenstruktur nicht verfügbar ist, müssen Sie diese zunächst
selbst implementieren (Klasse OrderedSetImpl). Gegeben ist dazu das Interface
OrderedSet.java. Die Erläuterung der Methoden ist im Java-Code von
OrderedSet.java enthalten.
Lösen Sie folgende Teilaufgaben:
¾ Welche Entwurfsmuster sind im Modell berücksichtigt? Diskutieren Sie diese
Entwurfsmuster und zeichnen Sie sie in UML-Notation in das Klassendiagramm
ein!
¾ Implementieren und testen Sie! (Praktomat: Queue)
Hinweise:
o Um die Warteschlange entsprechend dem gegebenen Modell zu
implementieren, brauchen Sie (wie zuvor erklärt) eine geordnete Menge.
Da im Java-Collection-Framework eine solche Datenstruktur nicht
verfügbar ist, müssen Sie diese zunächst selbst implementieren (Klasse
OrderedSetImpl). Gegeben ist dazu das Interface
OrderedSet.java. Die Erläuterung der Methoden ist im Java-Code
von OrderedSet enthalten.
o Jetzt können Sie mit Hilfe der Datenstruktur „geordnete Menge“ eine
Warteschlange implementieren (QueueImpl)! Gegeben ist dazu das
Interface Queue.java.
Seite 3 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2009/10
Aufgabe 2 (Vehicle Queue)
Gegeben ist ein Entwurfsmodell für die Simulation einer Verkehrs(warte)schlange
(VehicleQueue) an einer (Rot-Grün-)Ampel.
Fahrzeuge (Vehicle) in dieser Schlange können Busse (Bus), Autos (Car) und
Fahrräder (Bicycle) sein. Die Methode createVehicle()der Klasse
VehicleGenerator erzeugt per Zufallsgenerator (randomGenerator)
entweder einen Bus, ein Auto oder ein Fahrrad.
In der Verkehrsschlange stellen sich Fahrzeuge (enter()) mit einer zu definierenden
Häufigkeit pro Sekunde (vehiclesPerSecondEnter) an.
Falls die Ampel auf grün steht (greenLight == true), verlassen Fahrzeuge die
Schlange (leave()) mit einer ebenfalls zu definierenden Häufigkeit
(vehiclesPerSecondLeave). Die Variable trafficLightRate gibt die
Zeitdauer einer Rot- als auch Grünphase der Ampel in Sekunden an. Initialisiert ist die
Ampel mit rot (greenLight == false).
Die Methoden getLength() und getSize() berechnen die Länge der
Verkehrsschlange in Metern bzw. in Anzahl von Fahrzeugen.
Die Zeit wird durch ein Time–Objekt simuliert. Time kennt die aktuelle Zeit in
Sekunden (currentTime) sowie eine Zeitbegrenzung in Sekunden (endOfTime).
Die Methode run() zählt (immer mit 0 beginnend) die Zeit sekundenweise bis zur
Zeitbegrenzung hoch. Der folgende Codeausschnitt aus der Klasse Simulation
demonstriert beispielhaft die Anwendung der Klassen Time und VehicleQueue.
public class Simulation {
static Time myTime . . .
public static void main (String args[]) {
VehicleQueue queue =
new VehicleQueue(0.1, 30, 0.5, new
VehicleGenerator());
. . .
myTime.initEndOfTime(70);
myTime.run();
}
}
Lösen Sie folgende Teilaufgaben:
¾ Überdenken Sie den gegebenen Entwurf der Klasse Time, indem Sie die Klasse zu
einem Singleton verändern. Ergänzen Sie dementsprechend die Klasse im UMLKlassendiagramm!
¾ Implementieren Sie die Klassen VehicleQueue und Time! Nach jeder Sekunde
sollen entsprechend der oben beschriebenen Variablen Fahrzeuge die Schlange
betreten als auch verlassen. Nutzen Sie zur Simulation (Simulation.java) des
Sekundentaktes das Observer-Entwurfsmuster! Gegeben sind die Klassen
Vehicle.java, VehicleGenerator.java, Bus.java,
Bicycle.java und Car.java.
Seite 4 von 5
Dr. Birgit Demuth, Lehrstuhl Softwaretechnologie, LV Softwaretechnologie, WS 2009/10
¾ Welches weitere Entwurfsmuster (neben Singleton und Observer) ist im Entwurf
enthalten?
¾ Zeichen Sie die Entwurfsmuster in UML-Notation in das nachfolgende
Klassendiagramm ein!
¾ Implementieren Sie das Modell und testen Sie! (Praktomat: Vehicle Queue)!
Seite 5 von 5
Herunterladen