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)?