Übung 6 (als pdf)

Transcription

Übung 6 (als pdf)
Übungen zu Softwareentwicklung 2
SS 2000
Übung 6
Name: ___________________________________
Tutor: ___________________
Matrikelnummer: __________________________
Punkte: __________________
Übungsleiter / Gruppe: ______________________
Abgabe bis: 9.6.2000, 11 Uhr
1. Aufgabe: Entwurfsmuster in der Java-Klassenbibliothek (8 Punkte)
Nehmen Sie die Java-Klassenbibliothek genau unter die Lupe und finden Sie jeweils ein
Beispiel für vier aus folgenden sechs Entwurfsmustern:
a) Fabrik
b) Wrapper
c) Kompositum
d) Dekorator
e) Beobachter
f) Strategie
Beschreiben Sie den Einsatz des Entwurfsmusters und nennen Sie die beteiligten Klassen und
Objekte. Zeigen Sie in einem kurzen Codestück die Anwendung des Musters.
2. Aufgabe: Süssigkeitengeschäft (3+1+3+2+3+2+2 Punkte)
Gegeben sei folgende Klasse, die ein Süssigkeitengeschäft repräsentiert:
public class CandyShop {
private Choco[] chocolates;
private Lolly[] lollies;
private int nChocos, nLollies;
public CandyShop(int nChocos, int nLollies) { … }
public void fill() {
for (int i= 0; i<nChocos; i++)
chocolates[i]= new MilkaTafel();
for (int i= 0; i<nLollies-1; i++)
lollies[i]= new StrawberryLolly();
lollies[nLollies-1]= new CokeLolly();
}
public int count() { … }
// count all the candies
public void print() { … } // print all candies by category incl.
// their prices; for each candy print
// total count and total price
public double calcTotalPrice() { … }
// return value of the shop
}
a) Vervollständigen Sie die Implementierung des Geschäfts und schreiben Sie ein
Testprogramm, das alle Methoden zumindest einmal aufruft.
Natürlich kommt es immer wieder vor, daß neue Süssigkeiten am Markt eingeführt werden.
Um gegen den harten Wettbewerb bestehen zu können, soll ein Süssigkeitengeschäft auch
diese Produkte ins Programm aufnehmen. Bereiten Sie das Geschäft schrittweise auf mehr
Marktflexibilität vor:
b) Implementieren Sie das „Familien“-Strukturmuster, um Süssigkeiten auf einheitlich Art
und Weise behandeln zu können. Die Möglichkeit der Unterscheidung zwischen
Schokoladen und Lutschern soll aber weiterhin bestehen bleiben.
c) Tauschen Sie die fixe Implementierung von CandyShop durch eine Implementierung des
Entwurfsmusters „ Prototyp“ aus. Implementieren Sie für Ihre Süssigkeiten dafür das
Entwurfsmuster „Kopieren von Objekten“.
d) Tauschen Sie Ihre Implementierung von „Prototyp“ gegen die Implementierung des
Entwurfsmusters „Fabrik“ aus.
e) Bauen Sie für das Durchlaufen des Warenbestands das „Iterator“-Entwurfsmuster ein.
Schreiben Sie dazu eine neue Klasse ShopIterator, die das Interface java.util.Enumeration
implementiert. Erweitern Sie CandyShop um die Methode
public Enumeration elements() { … }
die einen Iterator auf die Waren des Geschäfts zurückgibt. Verwenden Sie den Iterator in
den Methoden print und calcTotalPrice.
f) Bauen Sie noch das Entwurfsmuster „Ein-/Ausgabe von Objekten“ in Ihr Programm ein.
Implementieren Sie dazu die beiden statischen Methoden saveTo und loadFrom:
public class CandyShop implements … {
…
public void saveTo(String fileName) { … }
public static CandyShop loadFrom(String fileName) { … }
}
g) Geben Sie ein bisher nicht verwendetes Entwurfsmuster an, das Sie noch in Ihr Programm
aufnehmen könnten. Beschreiben Sie nur das Szenario. Eine Implementierung ist nicht
nötig.
Geben Sie für a) den gesamten Quelltext und für alle Änderungen in b) bis f) jeweils den
geänderten Quelltext inklusive Testprogramm ab.