Übung 10

Werbung
Übung 10 - ST II
ENTWURFSMUSTER
ENTWURFSMUSTER ZUR FLEXIBILISIERUNG
1. Java bietet im Package java.util die Klasse Hashtable an, die einen assoziativen
Speicher realisiert. In dieser Klasse wird die von Object geerbte Methode clone()
überdefiniert, die ein neues Hashtable-Objekt als Ergebnis liefert. Das neue
Hashtable-Objekt enthält alle diejenigen Objekte die auch das ursprüngliche Objekt
enthält. Die clone()-Methode ist ausgesprochen rechenintensiv.
Das Klonen von Hashtable-Objekten erscheint in multithreaded Programmen immer
dann sinnvoll, wenn man in einer großen Hashtabelle verschiedenen Schlüssel/Wert-Paare
finden möchte und deshalb für den Suchzeitraum exklusiven Zugriff (nur Lesen) benötigt.
Ein Sperren der Hashtabelle mittels synchronized() erscheint dafür als ungeeignet.
Das Klonen vermeidet das lange Sperren der Hashtabelle. Da aber das Klonen sehr
rechenintensiv ist, erscheint es sinnvoll immer nur dann zu klonen, wenn die
Notwendigkeit dafür gegeben ist (z.B. bei Modifikation der Hashtabelle aus einem
anderen Thread heraus).
Mit welchem Entwurfsmuster läßt sich dieses Problem lösen? Erläutern Sie die allgemeine
Struktur des gewählten Musters sowie die konkrete Anwendung für das Problem!
2. Bei der Realisierung eines Programms in Java möchten Sie auf eine andere, bereits
existierende Implementierung eines assoziativen Speichers zurückgreifen. Der Nachteil
dieser Implementierung liegt allerdings darin, daß nicht die allgemeine Schnittstelle von
Java für assoziative Speicher (Dictionary) unterstützt wird.
Mit Hilfe welches Entwurfsmusters können Sie dieses Problem lösen? Diskutieren Sie
Lösungsvarianten in Abhängigkeit von der zur Verfügung stehenden Implementierung des
assoziativen Speichers.
3. Ein Java-Programm verwaltet Objekte in einem Array. Zur Sortierung der Objekte
erwartet das Java-Programm (Klient) ein Objekt einer Klasse, das eine Operation mit
folgender Signatur besitzt:
void sort(array:Object[]);
Sortiert wird dabei jeweils nach dem von der Methode Object::hashCode()
gelieferten Wert.
Die Operation sort() wird mehrfach im Java-Programm aufgerufen. Es soll dabei
möglich sein den Sortierungsalgorithmus, auch zur Laufzeit, abzuändern (z.B. InsertSortAufsteigend, InsertSort-Absteigend, BubbleSort-Aufsteigend, BubbleSort-Absteigen,
keine Sortierung, ...), bei gleichbleibender Signatur der Operation sort().
Lösen Sie dieses Problem unter Verwendung von in der Vorlesung vorgestellten
Entwurfsmustern.
Überprüfen Sie Ihre Lösung auf Lösungsideen die man in Form von Entwurfsmustern
beschreiben könnte.
Seite 1/1
Technische
Universität
Dresden
Softwaretechnologie
Softwaretechnologie II, Übungsmaterial
Herunterladen