Zpo-10-wyk-Slajd25: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Memento: cel==
==Replace Delegation with Inheritance==


[[Image:zpo-10-wyk-Slajd25.PNG|Memento: cel]]
[[Image:zpo-10-wyk-Slajd25.PNG|Replace Delegation with Inheritance]]




Wzorzec Memento umożliwia zapamiętywanie, przechowywanie i odtwarzanie wewnętrznego stanu obiektu. Potrzeba taka często pojawia się w większości aplikacji.
Bieżące przekształcenie jest komplementarne do poprzedniego, tzn. zamienia delegację na dziedziczenie. Zmiana taka wymaga lepszego uzasadnienia niż odwrotna transformacja, ponieważ zwykle powoduje usztywnienie schematu klas i utrudnia jego rozszerzanie. Jednak istnieją sytuacje, w których przekształcenie to jest uzasadnione, np. gdy klasa deleguje niemal wszystkie swoje wywołania do innej klasy, i nie zachodzi konieczność zmiany delegacji do innego obiektu w trakcie wykonywania programu.


Istotą wzorca jest jednak nie zarządzanie samym stanem, ale zapewnienie sposobu bezpiecznego dostępu do niego.
W zasadzie przekształcenie przebiega w sposób dokładnie odwrotny do przedstawionego na poprzednich slajdach. Rozpoczyna się od wprowadzenia relacji dziedziczenia pomiędzy klasą delegowaną (która staje się nadklasą) a klasą bieżącą (od tego momentu podklasą). Następnie pole przechowujące referencję do delegacji ma wartość zmienianą na ''this'' . Od tego momentu klasy są związane podwójną relacją, dzięki której można w podklasie stopniowo zmieniać odwołanie do obiektu nadklasy z delegacji na dziedziczenie. Po przeniesieniu wszystkich odwołań można usunąć pole delegacji.




[[zpo-10-wyk-Slajd24 | << Poprzedni slajd]] | [[zpo-10-wyk-toc|Spis treści ]] | [[zpo-10-wyk-Slajd26 | Następny slajd >>]]
[[zpo-10-wyk-Slajd24 | << Poprzedni slajd]] | [[zpo-10-wyk-toc|Spis treści ]] | [[zpo-10-wyk-Slajd26 | Następny slajd >>]]

Aktualna wersja na dzień 17:52, 4 lis 2006

Replace Delegation with Inheritance

Replace Delegation with Inheritance


Bieżące przekształcenie jest komplementarne do poprzedniego, tzn. zamienia delegację na dziedziczenie. Zmiana taka wymaga lepszego uzasadnienia niż odwrotna transformacja, ponieważ zwykle powoduje usztywnienie schematu klas i utrudnia jego rozszerzanie. Jednak istnieją sytuacje, w których przekształcenie to jest uzasadnione, np. gdy klasa deleguje niemal wszystkie swoje wywołania do innej klasy, i nie zachodzi konieczność zmiany delegacji do innego obiektu w trakcie wykonywania programu.

W zasadzie przekształcenie przebiega w sposób dokładnie odwrotny do przedstawionego na poprzednich slajdach. Rozpoczyna się od wprowadzenia relacji dziedziczenia pomiędzy klasą delegowaną (która staje się nadklasą) a klasą bieżącą (od tego momentu podklasą). Następnie pole przechowujące referencję do delegacji ma wartość zmienianą na this . Od tego momentu klasy są związane podwójną relacją, dzięki której można w podklasie stopniowo zmieniać odwołanie do obiektu nadklasy z delegacji na dziedziczenie. Po przeniesieniu wszystkich odwołań można usunąć pole delegacji.


<< Poprzedni slajd | Spis treści | Następny slajd >>