|
|
Linia 1: |
Linia 1: |
| ==Replace Inheritance with Delegation== | | ==Template Method: cel== |
|
| |
|
| [[Image:zpo-7-wyk-Slajd21.PNG|Replace Inheritance with Delegation]] | | [[Image:zpo-7-wyk-Slajd21.PNG|Template Method: cel]] |
|
| |
|
|
| |
|
| 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.
| | Template Method jest prostym wzorcem opisującym sposób współpracy między nadklasą i jej podklasami. Celem zastosowania tego wzorca jest stworzenie szkieletu algorytmu w nadklasie i określenie jego poszczególnych kroków w podklasach. |
| | |
| 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-7-wyk-Slajd20 | << Poprzedni slajd]] | [[zpo-7-wyk-toc|Spis treści ]] | [[zpo-7-wyk-Slajd22 | Następny slajd >>]] | | [[zpo-7-wyk-Slajd20 | << Poprzedni slajd]] | [[zpo-7-wyk-toc|Spis treści ]] | [[zpo-7-wyk-Slajd22 | Następny slajd >>]] |
Aktualna wersja na dzień 19:16, 4 lis 2006
Template Method: cel
Template Method jest prostym wzorcem opisującym sposób współpracy między nadklasą i jej podklasami. Celem zastosowania tego wzorca jest stworzenie szkieletu algorytmu w nadklasie i określenie jego poszczególnych kroków w podklasach.
<< Poprzedni slajd | Spis treści | Następny slajd >>