Zpo-11-wyk-Slajd37: 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: konsekwencje==
==Extract Subclass==


[[Image:zpo-11-wyk-Slajd37.PNG|Visitor: konsekwencje]]
[[Image:zpo-11-wyk-Slajd37.PNG|Extract Subclass]]




Najważniejszą zaletą tego wzorca jest możliwość wykonania przy odwiedzinach każdego elementu w strukturze pewnego kodu zależnego od typu tego elementu. Ta cecha decyduje o popularności i szerokich możliwościach stosowania tego wzorca.
Przekształceniem analogicznym jest wyłączenie podklasy. Stosuje się je w sytuacjach, gdy część metod należących do klasy w niektórych sytuacjach nie jest wykorzystywana. Oznacza to, że klasa w rzeczywistości powinna być podzielona na dwie części – ogólniejszą i bardziej szczegółową, czyli nadklasę i podklasę, połączone relacją dziedziczenia.


Dodawanie nowych implementacji interfejsu Visitor jest łatwe, ponieważ wymaga jedynie stworzenia nowej klasy i zaimplementowanie jej metod. Z drugiej strony, dodanie nowego elementu do odwiedzenia jest trudne, ponieważ wymaga dodania nowej metody do wszystkich obiektów Visitor.
Przekształcenie rozpoczyna się od zdefiniowania nowej podklasy i jej konstruktora, który zwykle odwołuje się bezpośrednio do konstruktora nadklasy. Następnie należy podzielić instancje klasy utworzone przez klientów na te, które wymagają pełnego zbioru metod, i wymagające jedynie części z nich. Te pierwsze powinny być zastąpione przez instancje podklasy (jednak na tym etapie różnica ta nie odgrywa żadnej roli, ponieważ obie klasy posiadają identyczny zbiór metod). Ostatnim krokiem jest  przeniesienie metod i pól wymaganych jedynie przez niektóre instancje do podklasy (stosując przekształcenie Push Down Field/Method).
 
Wzorzec ten w szczególności nadaje się do akumulacji stanu podczas przejścia przez strukturę obiektów (akumulacja odbywa się wówczas wewnątrz obiektu Visitor).
 
Należy jednak zwrócić uwagę, że wzajemne wywoływanie swoich metod ''visit'' ''()'' i ''accept'' ''()'' w obiektach Visitor i Element wymaga, aby metody te były dla siebie wzajemnie dostępne. W C++ można wykorzystać do tego klasy zaprzyjaźnione, natomiast w Javie konieczne jest upublicznienie metod, co w pewnym stopniu narusza ich hermetyzację.




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

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

Extract Subclass

Extract Subclass


Przekształceniem analogicznym jest wyłączenie podklasy. Stosuje się je w sytuacjach, gdy część metod należących do klasy w niektórych sytuacjach nie jest wykorzystywana. Oznacza to, że klasa w rzeczywistości powinna być podzielona na dwie części – ogólniejszą i bardziej szczegółową, czyli nadklasę i podklasę, połączone relacją dziedziczenia.

Przekształcenie rozpoczyna się od zdefiniowania nowej podklasy i jej konstruktora, który zwykle odwołuje się bezpośrednio do konstruktora nadklasy. Następnie należy podzielić instancje klasy utworzone przez klientów na te, które wymagają pełnego zbioru metod, i wymagające jedynie części z nich. Te pierwsze powinny być zastąpione przez instancje podklasy (jednak na tym etapie różnica ta nie odgrywa żadnej roli, ponieważ obie klasy posiadają identyczny zbiór metod). Ostatnim krokiem jest przeniesienie metod i pól wymaganych jedynie przez niektóre instancje do podklasy (stosując przekształcenie Push Down Field/Method).


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