Laboratorium ZTP
Transkrypt
Laboratorium ZTP
Laboratorium z przedmiotu: Zaawansowane Techniki Programowania L1. Singleton, Multiton. Opóźniona inicjalizacja : Singleton ma na celu zapewnienie istnienia co najwyżej jednej instancji klasy oraz dostarczenie globalnego punktu dostępu do niej. Multiton stanowi rozszerzenie singletona o obsługe zbioru (typowo kilku) nazwanych instancji danej klasy. Opóźniona inicjalizacja ma na celu odłożenie procesu tworzenia i inicjalizacji obiektu, do czasu kiedy następuje zadanie realizacji operacji na danej klasie. Strategia ta służy skróceniu czasu inicjalizacji aplikacji (podniesieniu efektywności). Przykładowe zadanie. Stosując wzorzec singletona zdefiniuj klasę reprezentującą podstawowe dane finansowe firmy w zadanym roku obrachunkowym (minimum plan i wykonanie sprzedaży). Przyjąć, że w roku obrachunkowym jest maksymalnie 12 okresów miesięcznych (zastosuj wzorzec multiton). Dane mogą być przechowywane w pliku tekstowym, xml lub w bazie danych (mysql, postgres, sqlite). L2. Metoda wytwórcza, Fabryka abstrakcyjna. Metoda wytwórcza definiuje interfejs tworzenia obiektów, przy jednoczesnym odłożeniu do klas pochodnych decyzji dotyczącej konkretnej klasy do utworzenia. Fabryka abstrakcyjna stanowi uogólnienie metody wytwórczej o dostarczenie interfejsu do tworzenia rodzin zależnych obiektów bez specyfikowania ich konkretnych klas. Przykładowe zadanie. Zrealizuj komis pojazdów obsługujący samochody, motory i quady. Realizowane zadania: zakup, wypożyczenie, zwrot, sprzedaż. Wymagana jest możliwość obsługi nowych typów pojazdów. L3. Budowniczy. Budowniczy oddziela konstrukcje złożonego obiektu od jego reprezentacji tak, że ten sam proces konstrukcji może tworzyć różne reprezentacje. Przykładowe zadanie. Wczytaj plik wejściowy (tekstowy) i podziel go na słowa (używając wyrażeń regularnych). Znalezione słowa składuj jako: java.util.TreeSet java.util.HashMap (słowo, ilość wystąpień) Użyj wzorca budowniczego. L4. Iterator. Iterator dostarcza sekwencyjny sposób dostępu do elementów kolekcji obiektów, bez eksponowania szczegółów reprezentacji kolekcji. Przykładowe zadanie. Utwórz drzewo na podstawie pliku konfiguracyjnego. Zbuduj iterator, który w zależności od parametru przegląda drzewo warstwami, lub ścieżkami do liści. L5. Obserwator. Obserwator definiuje zależność wiele do jednego (N-1) pomiędzy obiektami tak, że w przypadku zmiany stanu (danych) pojedynczego obiektu, wszystkie jego obiekty zależne są o tym notyfikowane automatycznie. Przykładowe zadanie. Skonstruuj aplikację zawierającą: Jako obiekt obserwowany panel, w którym użytkownik klikając myszką zostawia ślady punktów. Panele lub ramki, stanowiące obserwatory wyświetlające: o Liczbę utworzonych punktów o Listę współrzędnych utworzonych punktów. o Wykres słupkowy – w osi x kolejne punkty, a wysokość słupków proporcjonalna do odległości danego punktu od środka panelu obserwowanego. Zapewnij możliwość rejestrowania i wyrejestrowywania poszczególnych obserwatorów. L6. Metoda szablonowa. Metoda szablonowa definiuje szkielet algorytmu, pozostawiając doprecyzowanie pewnych kroków klasom dziedziczącym. Podejście to pozwala podklasom na przedefiniowanie pewnych kroków algorytmu bez zmiany całościowej struktury algorytmu. Przykładowe zadanie. Stwórz model zarządzania przepływem dokumentami dla dużego i małego przedsiębiorstwa. W każdym przedsiębiorstwie ilość i kolejność kroków w przepływie dokumentów jest taka sama. Kroki różnią się funkcjonalnie. L7. Mediator. Mediator definiuje obiekt, który enkapsuluje interakcje pomiędzy zbiorem obiektów. Strategia ta promuje luźne powiązania poprzez uniknięcie bezpośrednich odwołań pomiędzy obiektami, umożliwiając zarazem niezależne zmiany struktury interakcji. Przykładowe zadanie. Stwórz model systemu telekomunikacyjnego służącego do przesyłania krótkich komunikatów tekstowych (SMS) złożonego z co najmniej pięciu telefonów i jednej centrali telefonicznej. Telefony rejestrują swoje numery w centrali oraz mają możliwość nadania i odebrania wiadomości. L8. Odwiedzający. Wzorzec reprezentuje operacje do wykonania na elementach struktury obiektów. Umożliwia to zdefiniowanie nowej operacji bez konieczności modyfikacji klas, do których jest ona dodawana. Przykładowe zadanie. W magazynie przechowywane są dwa rodzaje towarów: Jednostkowe, posiadające określoną wartość Ważone, z określoną ilością (wagą) i ceną za 1 kg Skonstruuj klasę, która korzystając z wzorca odwiedzający umożliwi wyznaczenie łącznej wartości towarów w magazynie. L9. Pamiątka. Wzorzec umożliwia pozyskanie oraz składowanie wewnętrznego stanu obiektu, w celu jego późniejszego odtworzenia, bez naruszenia koncepcji enkapsulacji. Przykładowe zadanie: Zbuduj model edytora tekstu z możliwością cofania wprowadzonych zmian. Zrealizuj wariant memento poprzez serializację. L10. Polecenie. Polecenie enkapsuluje zadanie wykonania jako obiekt, pozwalając na parametryzacje zadań klientów, kolejkowanie, logowanie zgłoszeń, a także na wsparcie cofania wykonanych operacji. Przykładowe zadanie: Zbuduj model sterownika czterech sygnalizatorów świetlnych na skrzyżowaniu. Każdy sygnalizator składa się z trzech świateł, które są włączane lub wyłączane. Sterowanie odbywa się z konsoli za pomocą poleceń. L11. Stan, Pełnomocnik. Wzorzec pozwala na zmianę zachowania obiektu w zależności od jego wewnętrznego stanu, wykazując zachowanie jak gdyby obiekt zmienił swoją klasę. Drugi wzorzec dostarcza obiekt pośredniczący lub zaślepkę do innego obiektu w celu kontroli dostępu do obiektu zasadniczego. Przykładowe zadanie: Zbuduj prosty parser języka opisanego składnią XML, posiadającego dwa elementy: <liczba> z wartością liczbową <tekst> z wartością tekstową. L12. Strategia, Łańcuch zobowiązań. Strategia definiuje rodzinę algorytmów, opakowując każdy z nich w obiekt, czyniąc je wymiennymi. Umożliwia to zmiany algorytmu niezależnie od używającego je klienta. Łańcuch zobowiązań stanowi rekurencyjne rozszerzenie strategii. Umożliwia uniknięcie ścisłego powiązania zgłoszeniodawcy i zgłoszeniobiorcy wywołania poprzez umożliwienie więcej niż jednemu obiektowi obsługi zgłoszenia. Powoduje to utworzenie łańcucha zgłoszeń, obsługiwanych tak długo, aż zakończy się to sukcesem (lub skończą dalsze możliwości). Przykładowe zadanie: Stwórz abstrakcyjny model procesu naprawy komputerów. Zakładamy, że każdy komputer ma co najmniej jedną usterkę, proces naprawy składa się co najmniej z 5 akcji naprawczych. L13. Adapter, Fasada. Adapter zapewnia dopasowanie interfejsu klasy do innego interfejsu oczekiwanego przez klienta. Umożliwia to współpracę klas o różnorodnych interfejsach, które bez zastosowania adaptera nie mogłyby ze sobą współpracować. Fasada dostarcza zunifikowany interfejs do zbioru interfejsów w podsystemie. Zdefiniowanie interfejsu wyższego poziomu ułatwia użycie podsystemów. Przykładowe zadanie: System z powodów historycznych działa na 5 bazach danych. W każdej z baz danych znajdują się po dwa parametry wykorzystywane przez system. Zaimplementuj pojedyncze miejsce zapisu i odczytu wszystkich parametrów wykorzystywanych przez system, tak aby ukryć wszystkie szczegóły związane z dostępem do tych danych. L14. Most. Rozdziela abstrakcję od jej implementacji tak, że obie mogą się zmieniać niezależnie. Przykładowe zadanie: Zorganizuj konkurs olimpiady informatycznej. Przygotuj zadania (opis wybranej abstrakcji, łącznie z uszczegółowieniem), a następnie umożliw ich implementację poprzez poszczególnych zawodników. Porównaj oraz oceń zrealizowane rozwiązania (np. czas ich wykonania). L15. Dekorator. Dekorator dynamicznie dołącza dodatkowe zadania do obiektu, dostarczając łatwej do zmian alternatywy dla dziedziczenia w celu rozszerzenia funkcjonalności. Przykładowe zadanie: Zrealizuj system wspomagający pracę pizzerii. Wymagana jest realizacja menu w wariantach: z możliwością zamawiania dodatków, a także pomijania pewnych składników oferty standardowej.