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?