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.