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



Ukrywanie nagłówków pamiątek

Zastosowanie wzorca projektowego Pamiatka jest bezpieczne, ponieważ klient, który ma dostęp do obiektów pamiątki nie może odczytywać i dokonywać zmian jej składowych, a jedynie zapamiętywać je do momentu ewentualnego odtworzenia stanu. Nic nie stoi jednak na przeszkodzie, aby mógł on uzyskać podgląd pliku źródłowego z deklaracją klasy Pamiatka i obejrzał jej składowe prywatne. Plik ten bowiem musi być dostępny dla klienta ponieważ zwykle operuje on na jej interfejsie publicznym wywołując niejawnie metodę destruktora, co implikuje brak możliwości posługiwania się wyłącznie deklaracją zapowiadającą. Można jednak zmodyfikować poprzedni przykład, tak aby móc ukryć plik nagłówkowy pamiątki – wystarczy zastosować proste dziedziczenie.

Postać klasy Pamiatka jest teraz zupełnie minimalistyczna. Ogranicza się do określenia wirtualnego destruktora i deklaracji konstruktora jako chronionego w celu uniemożliwienia stworzenia jej egzemplarza przez klienta.

class Pamiatka {
public:
	virtual ~Pamiatka() {}
protected:
	Pamiatka () {}
};

Plik nagłówkowy z tą klasą jest dostępny dla użytkownika. Na bazie klasy Pamiatka zostaje wyprowadzona klasa PamiatkaProcesu:

class PamiatkaProcesu : public Pamiatka {
	PamiatkaProcesu ();

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

	friend class Proces;
};

PamiatkaProcesu::PamiatkaProcesu () 
	: s_pamiecU(3, 0.0), s_pamiecY(3, 0.0), s_pamiecE(2, 0.0)
{
}

Plik nagłówkowy z deklaracją tej klasy nie powinien być dostępny dla klienta końcowego. Wymaga jedynie istnienia podczas etapu kompilacji, bowiem jest dołączany przez implementację klasy Procesu.

Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11