Wypożyczalnia VIDEO Jest to program do obsługi wypożyczalni i wypożyczeń klientów. Głównym zadaniem programu jest zarządzanie wypożyczeniami i drukowanie potwierdzenia wypożyczenia oraz naliczenie punktów stałego klienta Opłaty za wypożyczenie zależą od tego na jak długo film jest wypożyczony oraz od rodzaju filmu (normalne, dziecięce, nowości) każdy rodzaj ma swoją cenę. Punkty stałego klienta zależą od tego czy film jest nowością. Za wypożyczenie normalnego filmu klient otrzymuje 1 punkt/1 dzień, za nowości 2 punkty/1 dzień. Zaprojektuj i zaimplementuj system, który zrealizuje powyższe cele oraz umożliwi: tworzenie klientów, tworzenie filmów, tworzenie wypożyczeń oraz wydruk potwierdzenia określającego: tytuł, długość wypożyczenia, rodzaj filmu, kwota, podsumowanie kwoty, oraz podsumowanie liczby punktów stałego klienta.
VIDEO - modyfikacje Modyfikacja 1 Potwierdzenie powinno być drukowane w formie standardowej lub w formie HTML. Modyfikacja 2 Nowy rodzaj filmu western z inną ceną za wypożyczenie. Modyfikacja 3 Zmiana sposobu naliczania punktów stałego klienta. Za 1 dzień 5 punktów, za następne 1. Jeżeli nowość całość x2.
Video
Filmy - polimorfizm
Filmy - wzorzec
Filmy, punkty
Potwierdzenie - strategia
Potwierdzenie - template
Cel - problem Stworzenie relacji jeden do wielu pomiędzy obiektami Zmiana stanu obiektu po stronie jeden umożliwi automatyczne powiadomienie o niej wszystkich zainteresowanych obiektów
Wzorzec - obserwator Wzorzec składa się z dwóch ról obiektu obserwowanego (Subject) i obiektów obserwujących (Observer). Obiekt Subject posiada metody pozwalające na podłączanie i odłączanie obserwatorów Każdy zainteresowany obiekt może się zarejestrować jako obserwator Subject posiada metodę, służącą do powiadamiania wszystkich zarejestrowanych obserwatorów. Każdy obserwator ma zaimplementowaną metodę wykorzystywaną do powiadamiania obiektów o zmianie stanu obiektu obserwowanego.
Observer
Observer - uczestnicy Subject - utrzymuje rejestr obiektów Observer - umożliwia dołączanie i odłączanie obiektów Observer Observer - udostępnia interfejs do powiadamiania o zmianach Concrete subject - przechowuje stan istotny dla obiektów Concrete Observer - powiadamia obiekty Concrete Observer Concerete observer - aktualizuje swój stan na podstawie powiadomienia
Observer Luźniejsze powiązania pomiędzy obiektami - obiekt Subject komunikuje się z innymi obiektami przez interfejs Observer - obiekty Subject i Observers mogą należeć do różnych warstw abstrakcji Programowe rozgłaszanie komunikatów Spójność stanu pomiędzy obiektami Subject i Observers
Observer - skalowalność push: Observers otrzymują kompletny stan obiektu Subject - parametr metody Update() pełna informacja o stanie obiektu Subject pull: Observers otrzymują powiadomienie i referencję do obiektu Subject - tylko referencja do obiektu Subject, dzieki której mogą następnie odpytać go o szczegóły dotyczące zmiany. - ten model jest znacznie bardziej skalowalny, szczególnie w przypadku wywoływania w środowisku rozproszonym
Observer przykład Totolotek
Adapter Umożliwienie współpracy obiektów o niezgodnych typach Szczególnie istotną rolę odgrywa przy korzystaniu z gotowych bibliotek o interfejsach niezgodnych ze stosowanymi w aplikacji
Adapter Struktura wzorca składa się z trzech podstawowych klas: Target, Apaptee, Adapter. Target - interfejs oczekiwany przez klienta Adaptee - obiekt dostarczający żądanej funkcjonalności, ale niezgodny Adapter - implementuje typ Target i tłumaczy wywołania metody należącej do typu Target poprzez wykonanie innej metody (grupy metod) w klasie Adaptee
Adapater Duża elastyczność - pojedynczy adapter może współpracować z wieloma obiektami Adaptee naraz - Adapter może dodawać funkcjonalność do Adaptee Kompozycja i dziedziczenie jako mechanizmy adaptacji.
Adapter - kompozycja
Adapter - dziedziczenie
Composite Organizowanie obiektów w struktury drzewiaste reprezentujące relacje całość-część Jednolita obsługa pojedynczych obiektów i złożonych struktur
Composite Centralnym elementem wzorca jest interfejs Component, który reprezentuje dowolny obiekt w strukturze drzewiastej. Posiada on możliwość dodawania i usuwania swego obiektu potomnego (także typu Component) oraz odwołania się do wybranego potomka. Zawiera także metodę Operation(), którą należy wykonać na każdym węźle struktury. Interfejs komponent posiada dwie implementacje Leaf i Composite. Leaf obiekty bez potomków Composite dowolny węzeł pośredni.
Composite Każdy węzeł pośredni zarządza swoim poddrzewem, którego jest korzeniem, dlatego metoda operation, poza wywołanie operacji specyficznych dla danego węzła, wywołuje swoje odpowiedniki w obiektach potomnych. Z punktu widzenia klienta taka struktura umożliwa zarządzanie całością za pomocą jednego obiektu. Niepotrzebna jest wiedza o rozmiarze drzewa, ponieważ wywołanie zostanie automatycznie przekazane do wszystkich jego elementów.
Composite - elementy Component - deklaruje wspólny interfejs dla obiektów znajdujących się w strukturze - implementuje wspólną funkcjonalność wszystkich obiektów Leaf - reprezentuje węzeł bez potomków Composite - reprezentuje węzeł z potomkami - przechowuje referencje do potomków - deleguje otrzymane polecenia do potomków
Composite
Cel Zastąpienie obiektu docelowego tymczasowym substytutem, który może pełnić trzy funkcje: - odsunie w czasie moment utworzenia obiektu - będzie kontrolował do niego dostępm - pozwoli odwoływać się do obiektu zdalnego. Z punktu widzenia klienta substytut powinien być przezroczysty i nie może mieć wpływu na sposób interakcji z obiektem docelowym
Proxy
Proxy Interfejs Subject posiada wiele implementacji. Jedna z implementacji RealSubject obiekt docelowy posiadający funkcjonalność oczekiwaną przez klienta. Druga obiekt proxy klient zamiast do obiektu docelowego, odwołuje się do obiektu Proxy, który deleguje żądanie do niego, lub próbuje je obsługiwać
Proxy - rodzaje Zdalny obiekt Proxy (remote proxy) jest lokalnym reprezentantem obiektu znajdującego się w innej przestrzeni adresowej. Proxy przejmuje odpowiedzialność za zdalne wywołania metod poprzez sieć, serializację parametrów i odebranie wyników. Stosowany w większości środowisk przetwarzania rozproszonego (Corba, WCF) Wirtualny obiekt Proxy pełni rolę zamiennika dla obiektu o dużych wymaganiach systemowych (np. dużo pamięci) Obiekt proxy obsługuje wszystkie zadania obiektu RealSubject, które nie wymagają odwołań do tego obszaru pamięci Ochronny obiekt Proxy udostępnia obiekt RealSubject tylko uprawnionym obiektom. Zajmuje się zabezpieczeniem dostępu do obiektu RealSubject. RealSubject nigdu nie jest bezpośrednio dostępny dla klientów w ich imieniu występuje Proxy. Technologie obiektowe