Temat : Strukturalny wzorzec projektowy Bridge

Transkrypt

Temat : Strukturalny wzorzec projektowy Bridge
Laboratorium
Projektowanie Obiektowe – Wzorce Projektowe
Temat : Strukturalny wzorzec projektowy
Bridge (pomost)
Historia zmian
Data
Wersja
Autor
Opis zmian
09.03.2011
1.0
Tomasz Kowalski
Utworzenie dokumentu i wstawienie treści zadania
21.03.2011
1.1
Tomasz Kowalski
Aktualizacja treści zadania
2.03.2012
1.2
Tomasz Kowalski
Uproszczenie i aktualizacja treści zadania
20.03.2012
1.3
Tomasz Kowalski
Aktualizacja dotycząca pracy z svn (problemy z bin)
23.04.2012
1.5
Tomasz Kowalski
Aktualizacja dotycząca pracy z svn (praca z trunk)
1. Cel laboratorium
Głównym celem laboratoriów jest zapoznanie się ze złożonym strukturalnym wzorcem
projektowym Bridge (pomost). 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. Czas realizacji laboratoriów wynosi 2 godziny.
Insulation (pl. izolacja) - implementation details (type, data, or function) can be altered without
forcing clients of the component to recompile - a physical property of design
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. Laboratorium jest kontynuacją poprzednich laboratoriów dotyczących wzorca adapter
Rozwiązanie poniższych zadań należy utworzyć w nowym pakiecie edu.kis.wp.pomost.
2. UWAGA (przypomnienie): 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. UWAGA (przypomnienie): W celu pracy nad projektem na lokalnej wersji
repozytorium powinien być zcheckout-owany WYŁĄCZNIE folder trunk.
4. UWAGA: przechowywanie folderu bin w repozytorium jest niewskazane. Mała
kontrola nad zmianami w tym folderze utrudniają prace z repozytorium svn. W
tortoiseSVN użyj opcji ...add to ignore list...
Pozytywne wyniki prac nad adapterem skłoniły szefostwo do próby rozszerzenia oprogramowania
PloterMagic. Interfejs IExtraFunkcjonalnośćPlotera (widoczny na ilustracji 1) to propozycja
rozszerzenia funkcjonalności menadżera plotera. Łatwo jest dokonać specjalizacji adaptera do
odcinka (OdcinekPloterAdapter) zaimplementowanego w poprzednim zadaniu. Niestety, nie jest to
możliwe dla rzeczywistego sterownika plotera opartego na interfejsie IPloter, do którego
implementacji nie mamy dostępu. Konieczne (i jak się okaże przydatne) jest rozdzielenie hierarchii
sterowników od hierarchii klas dostarczających nową funkcjonalność (tzw. hierarchii abstrakcji).
Punktem wyjścia prac ma być klasa bazowa hierarchii abstrakcji: AbstrakcyjnyMenadżerPlotera
(zaprojektowana przez Twojego szefa). Oprócz sterownika opartego na IPloter, która umożliwia
operowanie na rzeczywistym ploterze, dysponujesz zaimplementowanym przez Ciebie adapterem
1 http://java.sun.com/javase/downloads/index.jsp
2 http://www.eclipse.org/
do obiektów Odcinek. Twoim zadaniem (na razie) jest umożliwienie testowania oprogramowania
korzystającego z implementacji drivera wykorzystującego system Rysownik. Ploter może pracować
w dwóch trybach (linia ciągła i linia przerywana), dlatego musisz napisać drugi sterownik (patrz
LiniaPrzerywanaPloterAdapter) wykorzystujący klasę LiniaPrzerywana Rysownika.
Swoje programy umieść w pakiecie edu.kis.wp.pomost.
1. Zaprojektuj i zaimplementuj sterowniki, które umożliwią klientowi korzystanie z
funkcjonalności klas LiniaPrzerywana poprzez autorską implementację interfejsu IPloter.
Konstrukcja takiego sterownika jest analogiczna do adaptera do odcinka, który
zaimplementowałeś na poprzednim laboratorium. Zwróć uwagę na to, że klasy Odcinek i
LiniaPrzerywana różnią się semantyką argumentów ich kluczowych metod.
2. Napisz krótki program testujący zaimplementowane sterowniki, tj. symulujący rysowanie
dowolnych linii używając różnych trybów plotera.
Ilustracja 1: Diagram UML klas z korzeniem hierarchii abstrakcji
AbstrakcyjnyMenadzerPlotera oraz hierarchią implementacji wzorca bridge bazującą
na Rysowniku.
Część bridge odpowiadająca za obsługę plotera funkcjonuje poprawnie? Teraz dopiero można
zrobić coś ciekawego i przydatnego. Klasy należące do hierarchii menadżerów (tj. hierarchii
abstrakcji) z założenia mają być niezależne od implementacji sterownika i od typu pracy (ciągły,
przerywany).
3. Bez zmian w istniejących klasach zaimplementuj rozszerzony menadżer plotera, który
niezależnie od konkretnej implementacji IPlotera pozwoli korzystać z dodatkowych
gotowych funkcjonalności:
a. automatyczna wymiana „papieru” (należy wykorzystać metodę czyść() Rysownika)
b. rysowanie prostokąta o zadanych parametrach.
c. rysowanie okręgu o zadanych parametrach. Pierwsza osoba, która udostępni
(zacommituje) grupie poprawnie działającą metodę rysującą okrąg dostaje tzw. plusa.
Interfejs IExtraFunkcjonalnoscPlotera jest już wyposażony w odpowiednie operacje, które
trzeba zaimplementować.
4. Kolejnym pomysłem szefa jest kontrola ilości tonera w ploterze wraz z możliwością
doładowywania. Ilość toneru powinna być mierzona w jednostkach długości rysowanych
linii. Na potrzeby symulacji po zakończeniu toneru ploter powinien przesuwać swoją
pozycję nie rysując do momentu doładowania tonera. Mile widziane powiadomienie
ostrzegające o kończącym się poziomie tonera.
5. Szef dostarczył też już TestMenadzeraPlotera, którego celem jest sprawdzenie gdzie nastąpi
skończenie tonera przy rysowaniu zawartego w teście wzoru przy startowym poziomie tuszu
1234. Na potrzeby testu musisz tymczasowo wyposażyć swoją implementacje menadżera w
bezargumentowy konstruktor.
6. Która z zaimplementowanych metod menadżera i w jaki sposób łamie zasadę izolacji? (tj.
niezależność abstrakcji od implementacji). *W jaki sposób należałoby to naprawić?
7. *szef lubi niespodzianki i inicjatywę... masz pomysły?... masz szanse na premię ;)
8. *Napisz programu testujący zaimplementowany rozszerzony menadżer, tzn. pokazujący
własne wzory używając różnych możliwości i trybów wirtualnego plotera.
9. *Podaj dwa przykłady stosowania pomostów.