Temat : Strukturalny wzorzec projektowy Adapter (adapter)
Transkrypt
Temat : Strukturalny wzorzec projektowy Adapter (adapter)
Laboratorium Projektowanie Obiektowe – Wzorce Projektowe Temat : Strukturalny wzorzec projektowy Adapter (adapter) Historia zmian Data Wersja Autor Opis zmian 22.02.2010 0.1 Tomasz Kowalski Utworzenie dokumentu i edycja wprowadzenia … ... … ... 20.3.2012 2.2 Tomasz Kowalski Aktualizacja dotycząca pracy z svn (problemy z bin) 20.3.2012 2.3 Tomasz Kowalski Aktualizacja dotycząca pracy z svn (praca z trunk) 1. Cel laboratorium Głównym celem laboratoriów jest zapoznanie się z wzorcem projektowym: Adapter. Należy on do grupy wzorców strukturalnych. Zajęcia powinny pomoc studentom rozpoznawać omawiane wzorce w projektach informatycznych, samodzielnie implementować wzorce oraz dokonywać odpowiednich modyfikacji wzorca w zależności od potrzeb projektu. 2. Zasoby 2.1. Wymagane oprogramowanie Polecenia laboratorium będą dotyczyły programowania wzorców w języku Java. Potrzebne będzie środowisko dla programistów (JDK – Java Development Kit 1) oraz zintegrowana platforma programistyczna (np. Eclipse2). 2.1. Materiały pomocnicze Materiały dostępne w Internecie: http://www.vincehuston.org/dp/ http://hillside.net/patterns/onlinepatterncatalog.htm http://en.wikipedia.org/wiki/Design_pattern_(computer_science) 3. Laboratorium: 1. Sprawdź czy JDK i platforma Eclipse (lub inna tego typu) są poprawnie zainstalowane. 2. Utwórz folder. Wewnątrz swojego katalogu utwórz standardową strukturę projektu, tj. podkatalogi: • branches – folder pomocniczy na potrzeby testowania eksperymentalnej funkcjonalności (nie musi być używany w ciągu zajęć) • tags – folder zawierający tzw. snapshot-y projektu wykonywane pod koniec każdych zajęć w kolejnych pod-folderach (lab1, lab2,... ). Snapshot należy wykonać używając polecenia svn copy (w tortoiseSVN opcja Branch/tag...) z źródłem ustawionym na folder trunk w zdalnym repozytorium i docelowym folderem labX. Zmiany w folderze trunk powinny zostać uprzednio zacommitowane. • trunk – zawierający biężącą wersje projektu, ale bez folderu ze skompilowanym projektem (domyślnie bin). Wyłącznie ten folder powinien być checkout-owany w celu pracy na lokalnej wersji repozytorium. 3. Do folderu trunk lokalnego repozytorium wyeksportuj (w tortoiseSVN opcja Export...) strukturę przykładowego projektu z repozytorium svn: https://dev.kis.p.lodz.pl:8443/svn/samples/trunk/powp/lab 4. W środowisku Eclipse utwórz projekt Javy. W oknie tworzenia nowego projektu użyj opcji „Location” i wskaż wyeksportowany z svn-a folder lab. 5. Zapoznaj się z strukturą projektu. 6. Sprawdź czy w „Referenced Libraries” są załadowane dwie biblioteki plotermagic.jar oraz rysownik.jar 7. Zapoznaj się z dokumentacją w folderze doc dotyczącą obu systemów: - PloterMagic – fragment biblioteki obsługującej ploter, 1 http://java.sun.com/javase/downloads/index.jsp 2 http://www.eclipse.org/ - Rysownik – prosta biblioteka do rysowania. 8. Pod koniec zajęć usuń cały folder z skompilowanym projektem (domyślnie folder bin). Następnie zaimportuj zawartość swojego folderu do repozytorium svn o adresie podanym przez prowadzącego (w tortoiseSVN opcja Import) do podfolderu o nazwie imię_nazwisko. W tym folderze na repozytorium mają być przechowywane wyniki Twoich prac na laboratoriach w postaci projektów Java w środowisku Eclipse. 9. UWAGA: przechowywanie folderu bin w repozytorium jest niewskazane. Mała kontrola nad zmianami w tym folderze utrudniają prace z repozytorium svn. 10. W celu otagowania pracy na laboratorium najpierw do nowo utworzonego folderu na dysku wykonaj checkout Twojego folderu trunk na repozytorium zdalnym (w tortoiseSVN opcja SVN checkout...). Następnie wykonaj polecenie svn copy (tortoiseSVN opcja Branch/tag...) ze źródłem ustawionym na zcheckout-owany folder (operacja svn copy zostanie wykonana na folderze trunk w zdalnym repozytorium) i docelowym folderem lab1. 11. UWAGA: wyniki prac na laboratorium muszą być każdorazowo umieszczane w repozytorium SVN w odpowiednim pod-folderze folderu tags. Braki w tym zakresie są równoważne z brakiem obecności na zajęciach. 3.1. Adapter Ilustracja 1: Diagram UML adaptera między klasami IPloter i Odcinek Nasz klient Pat Tern, szef firmy TęczaPrints, zakupił nowy ploter wraz z napisanym w Javie oprogramowaniem PloterMagic, które zawiera demonstracyjne wzory. Niestety jedynym sposobem na zobaczenie tych tajemniczych wzorów jest uruchomienie plotera (co jest oczywiście BARDZO drogie). Jesteś proszony o napisanie programu umożliwiającego podgląd demonstracyjnych wzorów bez konieczności użycia ploteru. Swój program umieść w pakiecie edu.kis.wp.adaptacja. Dla ułatwienia masz wykorzystać gotową i sprawdzoną bibliotekę Rysownik. Pakiet edu.kis.client.plotermagic.presety zawiera wzory prezentujące możliwości plotera. 1. Przyjrzyj się działaniu klasy Odcinek Rysownika w teście TestRysownika.java 2. Interfejs IPloter reprezentuje podstawową funkcjonalność plotera i jest kluczowy w procesie uruchamiania wzorców demonstracyjnych. Przyjrzyj się działaniu testu TestPlotera.java. 3. Według diagramu na ilustracji 1 zaprojektuj i zaimplementuj własną klasę MojAdapter (nazwa przykładowa – powinna zostać zmieniona na nazwę precyzującą odpowiedzialność klasy), która będzie umożliwiała klientowi korzystanie z funkcjonalności klasy Odcinek przy pomocy interfejsu IPloter. 4. Dla Pata Terna napisz program pokazujący przykładowe wzorce z klasy FiguryJoe korzystając z zaimplementowanej klasy adaptującej MojAdapter. 3.2. Adapter Klasy i Obiektu Kolega z pracy powiedział Ci, że Rysownik udostępnia predefiniowany typ odcinka specjalnyOdcinek. Według kolegi Pat Tern byłby na pewno zadowolony, gdyby zobaczył wzory demonstracyjne narysowane tym typem odcinka. 1. Zaprojektuj i zaimplementuj własną klasę, która będzie umożliwiała klientowi korzystanie z funkcjonalności obiektów klasy odcinek przy pomocy interfejsu IPloter. 2. Dopisz do swojego programu możliwość skorzystania z zaimplementowanej klasy adaptującej obiekty i użyj obiektu specjalnyOdcinek udostępnionego przez odpowiednią metodę klasy Odcinek. 3. *Jak powinien wyglądać diagram UML takiego adapteru obiektu? Nie zapomnij, że Pat Tern chce zobaczyć jeszcze demonstracyjne wzory z klasy FiguryJane. Niestety skrypty generujące wzory nie wykorzystują bezpośrednio interfejsu IPloter 4. Zaprojektuj i zaimplementuj adapter, który będzie dziedziczył z klasy abstrakcyjnej AbstakcyjnyPloter. 5. Dopisz do swojego programu wyświetlanie wzorców demonstracyjnych z klasy FiguryJane korzystając z zaimplementowanej w poprzednim punkcie klasy adaptującej. 6. *Jak powinien wyglądać diagram UML takiego adapteru (bliższy adapterowi klasy czy adapterowi obiektu)?