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 (model danych bez iteratora)

W szeregu zastosowań w automatyce wszelkiego typu procesy mogą wyprowadzać dane, które w dalszej kolejności użytkownik będzie chciał wyświetlić na wykresie, zapisać do pliku lub przetworzyć (np. przefiltrować za pomocą filtrów FIR, IIR itp.). Bardzo często, aby odseparować dane od rzeczywistych klas realizujących wspomniane zadania umieszcza się je w osobnej klasie stanowiącej model danych i ustanawia referencję do ów obiektu. Dzięki temu z modelu danych może korzystać jednocześnie wiele klas.

W przykładzie zaprezentowany zostanie model danych, który będzie zapamiętywał dane procesu oraz próbkę czasu w jakim zostały wykonane, a następnie za pomocą iteratorów umożliwi dostęp do ów danych. W kolejnych podsekcjach zostaną natomiast zaprezentowane modyfikacje.

Pierwszy przykład zostanie rozpoczęty od zdefiniowania klasy procesu (w tym konkretnym przypadku będzie proces, który na wyjściu będzie tworzył sumę przyrostu liniowego, składnika sinusoidalnego oraz składnika losowego). Należy jednak zauważyć, że klasa Proces stanowi tylko generator do wypełniania danych modelu – nie stanowi ona części struktury wzorca Iterator.

Deklaracja klasy Proces i definicje jej metod przedstawiają się następująco.

class Proces {
public:
	Proces (double a, double b, double sinAmp, int sinOkres, double maxLos);
	double symuluj ();
private:
	double s_a;
	double s_b;
	double s_sinAmp;
	int s_sinOkres;
	double s_maxLos;
	int s_t;
};

Proces::Proces (double a, double b, double sinAmp, int sinOkres, double maxLos) 
	: s_a(a), s_b(b), s_sinAmp(sinAmp), s_sinOkres(sinOkres), s_maxLos(maxLos), s_t(0)
{
}

double Proces::symuluj () {
	double skladnikLiniowy = s_a*s_t + s_b;
	double skladnikSinusoidalny = 
		s_sinAmp*std::sin((static_cast<double>(s_t % s_sinOkres) / s_sinOkres) * 6.28);
	
	double skladnikLosowy = (((std::rand() % 1000) / 500.0) - 1.0) * s_maxLos;

	++s_t;
	return skladnikLiniowy + skladnikSinusoidalny + skladnikLosowy;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11