Zpo-10-wyk-Slajd25: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
== | ==Replace Delegation with Inheritance== | ||
[[Image:zpo-10-wyk-Slajd25.PNG| | [[Image:zpo-10-wyk-Slajd25.PNG|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. | |||
[[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
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.