Ü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.