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



Praca adaptera

W rozpatrywanym przykładzie, zarówno w przypadku adaptera klas jak i adaptera obiektów jego praca polegała na odpowiednim delegowaniu wywołań metod. W przypadku adaptera klas adaptowane metody odwoływały się do metod prywatnych (odziedziczonych po klasie adaptowanej), natomiast w przypadku adaptera obiektów delegowały wywołania metod do składnika klasy celu.

Nic nie szkodzi jednak na przeszkodzie, aby adaptery wykonywały większą pracę, niż przekazywanie wywołań. Modyfikując poprzednią klasę adaptera obiektów metoda symuluj() mogłaby wykorzystywać własne składowe prywatne do przechowywania ostatnich wartości wejścia i wyjścia obiektu, dzięki czemu odwołania do elementów kontenera asocjacyjnego nie musiały by mieć miejsca przy implementacji metod pobierzU() i pobierzY() adaptera (co z pewnością przyczyniłoby się do optymalizacji czasu wykonania tych metod).

Zmiana w deklaracji klasy Adapter wymaga tylko dodania składowych prywatncyh s_wejscie i s_wyjscie, jak poniżej:

class AdapterObiektow : public Regulator {
public:
	AdapterObiektow  (RegulatorZewn * regulatorZewn);
	virtual ~AdapterObiektow  ();
	virtual double symuluj (double wej);
	virtual double pobierzE () const;
	virtual double pobierzWzad () const;
	virtual double pobierzU () const;
	virtual double pobierzY () const;
private:
	RegulatorZewn * s_regulatorZewn;
	double s_wejscie;
	double s_wyjscie;
};

Zmiana implementacji klasy Adapter dotyczy z kolei konstruktora i trzech metod składowych:

AdapterObiektow::AdapterObiektow (RegulatorZewn * regulatorZewn) 
	: s_regulatorZewn(regulatorZewn), s_wejscie(0), s_wyjscie(0)
{
	if (!s_regulatorZewn) 
		throw std::exception ("Adapter musi posiadac odniesienie do istniejacego skladnika");
}

double AdapterObiektow::symuluj (double wej)  {
	// zapamiętanie w składowej adaptera
	s_wejscie = wej;

	// zapamiętanie w składowej adaptera
	s_wyjscie = regulatorZewn_->krokSymulacji(wej);

	return s_wyjscie;
}

double AdapterObiektow::pobierzU () const {
	return s_wejscie;
}

double AdapterObiektow::pobierzY () const {
	return s_wyjscie;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11