Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 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 (powiadamiania zdefiniowane na sztywno)

Wzorzec projektowy Obserwator zostanie przedstawiony na przykładzie klasy Proces, która powiadamia zainteresowane obiekty o zmianie swojej wartości wyjściowej. Na początku - dla uproszczenia - jedyną klasą powiadamianą będzie klasa Alarm, która po przekroczeniu przez wartość wyjściową z klasy Proces określonej wartości granicznej będzie generowała komunikaty alarmowe.

Pierwszy przykład przedstawi propozycję mechanizmu powiadomień między klasą Proces i Alarm bez korzystania z wzorca Obserwator. Da to dobry pogląd na to, jak jego zastosowanie zwiększa elastyczność projektu.

Wspomniana klasa Proces to prosta klasa, której wyjście w kolejnych krokach symulacji zmierza do określonej wartości wejściowej. Maksymalne zmiany w pojedynczym kroku symulacji są określone przez parametr procesu. Dodatkowo w procesie można zasymulować zakłócenie losowe o określonej amplitudzie oraz zakłócenia deterministyczne w postaci sinusoidy o określonej amplitudzie i okresie.

Klasa Alarm to prosta klasa inicjowana określoną wartością graniczną z publiczną metodą sprawdz(), która w przypadku wartości argumentu przekraczającego (co do wartości bezwzględnej) ów wartość graniczną generuje komunikat alarmowy.

Jej deklaracja:

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

Odpowiadające deklaracji definicje:

Alarm::Alarm (double wartGraniczna) 
	: s_wartGraniczna(wartGraniczna)
{
}
	
void Alarm::sprawdz (double wartosc) const {
	if (std::abs(wartosc) > std::abs(s_wartGraniczna))
		std::clog << " ALARM! - przekroczono wartosc graniczna |" << s_wartGraniczna << "|" << std::endl;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11