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



Przykład (powiadomienia – wykorzystanie wzorca Obserwator)

Poprzedni przykład spełniał początkowe założenia systemu – jego prosta implementacja wystarczyła do przesyłania powiadomień pomiędzy dwoma, ściśle określonymi typami obiektów. Jeśli jednak wprowadzi się założenie, iż obiekt klasy Proces ma współpracować również z innymi klasami (np. dziennik zapisu) lub z większą liczbą klas tego samego rodzaju (np. trzy różne alarmy określające trzy stopnie niebezpieczeństwa) trzeba by było modyfikować zarówno interfejs klasy jak i jego implementację oraz wprowadzać ścisłe zależności pomiędzy klasami (klasa Proces musi znać interfejsy klas do których wysyła powiadomienia). Stanowi to istotny problem, ponieważ z każdym nowym elementem do którego wymagano by przesyłania powiadomień należy modyfikować i ponownie kompilować klasę Proces.

Wzorzec Obserwator umożliwia uelastycznienie mechanizmu powiadomień. Poprzez wprowadzenie wspólnej klasy bazowej dla wszystkich klas powiadamianych rozluźniane są związki pomiędzy klasami (Proces musi znać tylko interfejs klas bazowej klas powiadamianych). Dzięki temu mechanizm rejestracji i wyrejestrowania obiektów powiadamianych nie musi być po zaimplementowaniu modyfikowany. Co więcej - wzorzec Obserwator dzięki swojej strukturze umożliwia współpracę z klasami, których nawet nie zna na etapie projektowania systemu.

Dwie podstawowe klasy, stanowiące istotę zachowania wzorca to klasa Obserwatora (abstrakcyjnego) i Obserwowanego.

Deklaracja klasy Obserwator posiada czystowirtualną metodę aktualizuj(), której implementacja w klasach pochodnych jest reakcją na powiadomienie.

class Obserwator {
public:
	virtual ~Obserwator () {}
	virtual void aktualizuj (double wartosc) = 0;
};
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11