Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Środa, 18 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Model powiadomień

Wzorzec projektowy Obserwator nie narzuca postaci metody aktualizuj() definiowanej przez klasy dziedziczące po klasie Obserwatora. Implikuje to istnienie dwóch modeli podejścia do mechanizmu powiadomień.

W pierwszym z nich metoda aktualizuj() jest metodą nie posiadającą żadnych argumentów. Zostaje ona wywołana tylko w celu powiadomienia o tym, że stan obiektu obserwowanego się zmienił. Klasa obserwującą musi więc wysłać zapytanie zwrotne (np. poprzez metodę zwrocStan()), aby sprawdzić jakie zmiany zaszły w obiekcie. Mimo prostoty i ogólności model taki ma poważna wadę – wydajność. Klasa obserwatora musi bowiem dokładnie przejrzeć stan wewnętrzny klasy powiadamiającej w celu ustalenia faktycznej zmiany. Opisany model nosi nazwę modelu ciągnącego.

Drugi model (tzn. model pchający) pozwala na przesyłanie za pośrednictwem metody aktualizuj odpowiedniej wartości przez co klasa Obserwatora nie musi wykonywać zapytań do obiektu obserwowanego. Dodatkowo liczba argumentów metody aktualizuj() może być większa, np. w przypadku gdy obiekt musi powiadamiać o swoich zmianach, a jego stan wewnętrzny nie jest reprezentowany przez jedną wartość. Dość uniwersalnym rozwiązaniem jest wykorzystywanie pary argumentów – jednego do specyfikowania identyfikatora wielkości, drugiego do wyrażenia artości tej wielkości. Dodatkowo drugi parametr może być parametrem ogólnym, mogącym przechowywać wartość dowolnego typu (np. łańcucha, liczby, tablicy). Zachowanie takie można uzyskać korzystając np. z bibliotek boost::any<T> lub boost::variant<T>.

Jeśli proces umożliwia powiadamianie o zmianie różnych części swojego stanu wewnętrznego mechanizm rejestracji obserwatorów można uzupełnić o dodatkowy parametr, który specyfikuje które powiadomienia interesują obiekt. Dzięki temu nie będzie on powiadamiany o wszystkich zmianach, ale tylko o wybranych.

Zamieszczone dotychczas przykłady wykorzystywały model pchający.

Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11