Zaawansowane projektowanie obiektowe – Zestaw 5
Transkrypt
Zaawansowane projektowanie obiektowe – Zestaw 5
Zaawansowane projektowanie obiektowe – Zestaw 5 1. Dekorator. Zaimplementuj następujący scenariusz: a) Dana jest abstrakcyjna klasa Wojownik. Zawiera ona abstrakcyjny akcesor o nazwie Opis (string) oraz abstrakcyjne metody: DawajOpis():string i ObliczKosztWyposazenia():double. b) Dodaj klasę Rycerz dziedziczącą po klasie Wojownik. Niech akcesor Opis ustawiony będzie na łańcuch tekstowy „Rycerz”. Przeciąż metodę DawajOpis(), tak aby zwracała ona wartość akcesora Opis, metoda ObliczKosztWyposazenia() powinna zwracać liczbę 1000, c) Stwórz klasę o nazwie DekoratorWojownikow, dziedziczącą po klasie Wojownik. Dekorator powinien zawierać chronione pole, będące instancją klasy Wojownik (niech będzie ono inicjowane za pomocą konstruktura, przekazującego odpowiedni obiekt, jako parametr). Metody DawajOpis() oraz ObliczKosztWyposazenia() powinny wywoływać metody obiektu klasy Wojownik, d) Dodaj klasy Zbroja, Helm, Miecz i Tarcza, które powinny dziedziczyć po klasie DekoratorWojownikow. Konstruktor każdej z klas przyjmuje obiekt klasy Wojownik, który przekazywany jest do konstruktora bazowego. Przeciążenie metody ObliczKosztWyposazenia() oraz DawajOpis() powinny zwracać aktualną wartość opisu i ceny (base/super), a następnie dodać dodatkową zawartość, zgodnie z poniższą tabelą: e) Element Opis Koszt Zbroja + Zbroja 500 Helm + Hełm 100 Miecz + Miecz 250 Tarcza + Tarcza 300 Wykorzystując dekoratorów stwórz dwóch rycerzy. Niech pierwszy z nich będzie wyposażony w kompletny zestaw, a drugi tylko w dwa miecze. Wyświetl na ekranie opisy poszczególnych wojowników, wraz z ich kosztami. 2. Wzorzec Adapter jest dość często spotykany w postaci różnych „przejściówek” w świecie rzeczywistym. Zaimplementuj kod oraz przygotuj diagram klas realizujący następujący scenariusz: a) Odtwarzacz muzyki może odtwarzacz wyłączanie pliki mp3 za pomocą metody: graj(typPliku, ścieżkaDoPliku):void, b) Klient może wywołać tylko metodę o nazwie graj, c) Dodaj zaawansowany odtwarzacz muzyki implementujący metody: grajMp4(ścieżkaDoPliku):void i grajVlc(ścieżkaDoPliku):void bez metody graj, d) Dodaj klasę implementującą wzorzec Adapter tak aby klient za jej pomocą, bez potrzeby zmiany swojego kodu mógł odtwarzać pliki vlc i mp4. 3. Odpowiedz na następujące pytania: a) Czy wzorzec Fasada tworzy nowy interfejs? b) Czy wzorzec Fasada wprowadza nową funkcjonalność? c) Kiedy wzorzec Fasada używa podsystemu czy ów podsystem świadomy jest użycia wzorca fasady?