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 (przechowywanie stanu – wzorzec Pamiątka)

Poprzedni przykład umożliwił realizację wyznaczonych celów. Niestety udostępniając klientowi metody dostępu do składowych (zapamiętywania i ustawiania) złamał zasadę enkapsulacji przez co w projekcie może dojść do sytuacji prowadzących do błędnego działania programu. Przykładem takiego działania jest samodzielne stworzenie obiektu pamięci o zerowej pojemności i ustawienie go w procesie - wywołanie metody symuluj() spowoduje ze względu na operację inner_product() odwołanie do nieprawidłowego adresu w pamięci.

Należałoby więc poszukać innej możliwości realizacji tego samego zadania. Taką możliwość daje wzorzec Pamiątka. Jest to prosty obiekt przechowujący podzbiór składowych klasy która go tworzy. Jednocześnie – ponieważ ów składowe są prywatne, a klasa pamiątki nie udostępnia (poza niejawnym destruktorem i konstruktorem kopiującym) żadnego interfejsu publicznego dane są bezpieczne i klient nie może nimi manipulować. Tylko klasa Proces ze względu na deklarację przyjaźni ma dostęp do ów składowych.

Klasa Pamiatka jest zdeklarowana następująco:

class Pamiatka {
private:
	Pamiatka (const std::deque<double> & pamiecU, const std::deque<double> & pamiecY, const std::deque<double> & pamiecE);

	std::deque<double> podajPamiecU () const;
	std::deque<double> podajPamiecY () const;
	std::deque<double> podajPamiecE () const;

	std::deque<double> s_pamiecU;
	std::deque<double> s_pamiecY;
	std::deque<double> s_pamiecE;

	friend class Proces;
};

Odpowiadające deklaracji proste definicje:

Pamiatka::Pamiatka (const std::deque<double> & pamiecU, const std::deque<double> & pamiecY, const std::deque<double> & pamiecE) {
	s_pamiecU = pamiecU;
	s_pamiecY = pamiecY;
	s_pamiecE = pamiecE;
}

std::deque<double> Pamiatka::podajPamiecU () const { 
	return s_pamiecU; 
}

std::deque<double> Pamiatka::podajPamiecY () const { 
	return s_pamiecY;
}

std::deque<double> Pamiatka::podajPamiecE () const {
	return s_pamiecE; 
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11