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.