Zpo-10-wyk-Slajd21: 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:
==Builder: cel==
==Replace Inheritance with Delegation==


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




Builder jest wzorcem strukturalnym i służy do tworzenia złożonych struktur obiektowych. Jego celem jest oddzielenie sposobu reprezentacji tych struktur od mechanizmu ich konstrukcji. Pozwala to także wykorzystać te same mechanizmy konstrukcyjne do tworzenia różnych struktur.
Kolejne przekształcenie pełni bardzo istotną rolę nie tylko jako metoda refaktoryzacji, ale również poznawczą: pokazuje, że w rzeczywistości dziedziczenie i delegacja są sobie równoważne na poziomie fizycznych struktur danych, różnią się jedynie sposobem implementacji relacji. Pamiętamy jednak z pierwszego wykładu, że stosowanie delegacji zamiast dziedziczenia przyczynia się do większej elastyczności systemu i jego otwartości na zmiany.
 
Przekształcenie to służy do zmiany dziedziczenia w relację delegacji. Klasa, która dotychczas była podklasą, po przekształceniu staje się obiektem delegującym wybrane odwołania do swojej dawnej nadklasy, a wywołania poprzedzone kwalifikatorem nadklasy (w Javie jest to słowo ''super'' ) zostaną zastąpione wyrażoną jawnie referencją.
 
Pierwszym krokiem przekształcenia jest wprowadzenie do podklasy pola o typie nadklasy i przypisanie mu wartości ''this'' . Powoduje to utworzenie jawnej referencji do nadklasy; jawnej, ponieważ relacja dziedziczenia wprowadza zawsze inną, niejawną relację pomiędzy podklasą a nadklasą. W rzeczywistości zatem istnieją w tym momencie dwie relacje łączące te same obiekty.
 
Ta sytuacja pozwala na stopniowe zmienianie odwołań do nadklasy przez referencję niejawną (czyli oznaczaną słowem ''this'' lub pomijaną) na odwołania przez referencję jawną. W tej fazie zapewniona jest możliwość odwrócenia przekształcenia i powrotu do stanu wyjściowego.
 
Po aktualizacji wszystkich odwołań można usunąć relację dziedziczenia, co powoduje konieczność wykonania ostatniego kroku przekształcenia: zaimplementowania prostych metod delegujących z "podklasy" do "nadklasy" w miejsce dawnych metod odziedziczonych.  




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

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

Replace Inheritance with Delegation

Replace Inheritance with Delegation


Kolejne przekształcenie pełni bardzo istotną rolę nie tylko jako metoda refaktoryzacji, ale również poznawczą: pokazuje, że w rzeczywistości dziedziczenie i delegacja są sobie równoważne na poziomie fizycznych struktur danych, różnią się jedynie sposobem implementacji relacji. Pamiętamy jednak z pierwszego wykładu, że stosowanie delegacji zamiast dziedziczenia przyczynia się do większej elastyczności systemu i jego otwartości na zmiany.

Przekształcenie to służy do zmiany dziedziczenia w relację delegacji. Klasa, która dotychczas była podklasą, po przekształceniu staje się obiektem delegującym wybrane odwołania do swojej dawnej nadklasy, a wywołania poprzedzone kwalifikatorem nadklasy (w Javie jest to słowo super ) zostaną zastąpione wyrażoną jawnie referencją.

Pierwszym krokiem przekształcenia jest wprowadzenie do podklasy pola o typie nadklasy i przypisanie mu wartości this . Powoduje to utworzenie jawnej referencji do nadklasy; jawnej, ponieważ relacja dziedziczenia wprowadza zawsze inną, niejawną relację pomiędzy podklasą a nadklasą. W rzeczywistości zatem istnieją w tym momencie dwie relacje łączące te same obiekty.

Ta sytuacja pozwala na stopniowe zmienianie odwołań do nadklasy przez referencję niejawną (czyli oznaczaną słowem this lub pomijaną) na odwołania przez referencję jawną. W tej fazie zapewniona jest możliwość odwrócenia przekształcenia i powrotu do stanu wyjściowego.

Po aktualizacji wszystkich odwołań można usunąć relację dziedziczenia, co powoduje konieczność wykonania ostatniego kroku przekształcenia: zaimplementowania prostych metod delegujących z "podklasy" do "nadklasy" w miejsce dawnych metod odziedziczonych.


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