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



Moment powiadomień

Przy stosowaniu wzorca projektowego Obserwator należy mieć na uwadze, kiedy klasa obserwowana powiadamia zainteresowane obiekty o zmianie swojego stanu. W dotychczas prezentowanych przykładach powiadomienia zostały wysyłane, gdy obiekt już zmienił swój stan. Obiekty, które zostały powiadamiane przyjmowały otrzymywaną wiadomość przetwarzając ją w określony sposób bądź ignorując.

Nic nie stoi jednak na przeszkodzie, aby mechanizm powiadomień zmienić w ten sposób, by zostały one wysyłane na moment przez "fizyczną" zmianą stanu w klasie. Umożliwi to obiektom Obserwatorów< wetowanie niepoprawnych wartości i np. rzucanie wyjątków, które nie powalą na aktualizację stanu.

Przykład takiego rozwiązania można odnieść do klasy Alarm, która w momencie uzyskania przez klasę Proces zbyt dużej (przewidywalnej) wartości wyjściowej zatrzyma cały system.

Modyfikacja klasy Alarm o określonej deklaracji (przykład 2):

class Alarm : public Obserwator {
public:
	Alarm (double wartGraniczna);
	virtual void aktualizuj (double wartosc);
	bool sprawdz (double wartosc) const;
private:
	double s_wartGraniczna;
};

sprowadza się do zmiany implementacji metody sprawdz() i rzucania wyjątku:

bool Alarm::sprawdz (double wartosc) const {
	if (std::abs(wartosc) > std::abs(s_wartGraniczna)) {
		std::clog << " ALARM! - przekroczono wartosc graniczna |" << s_wartGraniczna << "|" << std::endl;
		throw std::exception("Niepoprawna wartosc biezaca procesu.");
		//return true;
	} else
		return false;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11