Zpo-11-wyk-Slajd36: 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:
==Visitor: uczestnicy==
==Extract Superclass==


[[Image:zpo-11-wyk-Slajd36.PNG|Visitor: uczestnicy]]
[[Image:zpo-11-wyk-Slajd36.PNG|Extract Superclass]]




Rolą interfejsu Visitor jest zdefiniowanie przeciążonych metod dla każdego obiektu typu ConcreteElement, który należy odwiedzić. Zatem Visitor jako cały obiekt reprezentuje pewną operację, którą należy wykonać na wszystkich elementach struktury danych, w sposób od nich zależny.
Przekształcenie to pozwala ujednolicić grupę niespokrewnionych klas o podobnych sygnaturach metod i podobnym zakresie odpowiedzialności. W efekcie powstaje ich nadklasa, do której zostają przeniesione wspólne metody i pola.


Elementy tej struktury posiadają tylko jedną wspólną metodę ''accept'' ''(),'' która przyjmuje parametr typu Visitor i umożliwia mu (poprzez odwrócenie sterowania) wywołanie metod obiektu ''Element'' . Dodatkową zaletą tego rozwiązania jest możliwość zabezpieczenia się niektórych obiektów Element przed odwiedzeniem przez konkretny Visitor, co może mieć znaczenie w niektórych obszarach zastosowań.
Mechanika rozpoczyna się od utworzenia pustej nadklasy i zadeklarowania dziedziczenia po niej w każdej z analizowanych klas (oczywiście, w języku Java warunkiem poprawności takiego przekształcenia jest, aby nie były one już podklasami jakiejkolwiek innej klasy). Następnie, przeprowadzając zmiany w sygnaturach metod, należy doprowadzić do sytuacji, w której sygnatury te (i zakresy odpowiedzialności) będą albo identyczne, albo całkowicie różne. Metody identyczne należy przekopiować do nadklasy, a następnie kolejno usuwać z podklas. W przypadku metod całkowicie różnych można zostawić je w podklasach, w uzasadnionych przypadkach deklarując je w nadklasie jako abstrakcyjne (wówczas jednak wszystkie podklasy muszą je zaimplementować) lub o pustej domyślnej implementacji.


Obiekt ObjectStructure jest kolekcją, która udostępnia wszystkie swoje elementy i pozwala przekazywać im obiekt Visitor.
W efekcie przekształcenia powstaje nadklasa, która definiuje w jednym miejscu wspólne metody i pola grupy klas.




[[zpo-11-wyk-Slajd35 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd37 | Następny slajd >>]]
[[zpo-11-wyk-Slajd35 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd37 | Następny slajd >>]]

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

Extract Superclass

Extract Superclass


Przekształcenie to pozwala ujednolicić grupę niespokrewnionych klas o podobnych sygnaturach metod i podobnym zakresie odpowiedzialności. W efekcie powstaje ich nadklasa, do której zostają przeniesione wspólne metody i pola.

Mechanika rozpoczyna się od utworzenia pustej nadklasy i zadeklarowania dziedziczenia po niej w każdej z analizowanych klas (oczywiście, w języku Java warunkiem poprawności takiego przekształcenia jest, aby nie były one już podklasami jakiejkolwiek innej klasy). Następnie, przeprowadzając zmiany w sygnaturach metod, należy doprowadzić do sytuacji, w której sygnatury te (i zakresy odpowiedzialności) będą albo identyczne, albo całkowicie różne. Metody identyczne należy przekopiować do nadklasy, a następnie kolejno usuwać z podklas. W przypadku metod całkowicie różnych można zostawić je w podklasach, w uzasadnionych przypadkach deklarując je w nadklasie jako abstrakcyjne (wówczas jednak wszystkie podklasy muszą je zaimplementować) lub o pustej domyślnej implementacji.

W efekcie przekształcenia powstaje nadklasa, która definiuje w jednym miejscu wspólne metody i pola grupy klas.


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