Zpo-7-wyk-Slajd30: 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:
==Przykład==
==Visitor: struktura==


[[Image:zpo-7-wyk-Slajd30.PNG|Przykład]]
[[Image:zpo-7-wyk-Slajd30.PNG|Visitor: struktura]]




Przekształcenie to prześledzimy na przykładzie klas Tom, Książka i Autor. Klasa Tom posiada referencję do klasy Książka i publiczną metodę ''książka'' ''(),'' która umożliwia dostęp do tej referencji. Podobną strukturę ma klasa Książka: zawiera referencję do klasy Autor i posiada metodę ''autor'' ''(),'' która zwraca tę referencję. Ostatnia w łańcuchu delegacji klasa Autor przechowuje nazwisko i datę urodzenia Autora Książki. Zatem aby z poziomu Tomu lub Książki otrzymać nazwisko Autora, należy stworzyć łańcuch wywołań: ''tom'' ''.'' ''ksiazka'' ''().'' ''autor'' ''().'' ''nazwisko'' . Łańcuch taki narusza zasady odwołań do obiektów sformułowane przez prawo Demeter (zob. wykład dotyczący metryk obiektowych), ponieważ wymaga od wywołującego cały łańcuch klienta znajomości całego systemu.  
Obiekty wchodzące w skład struktury, które obiekt Visitor ma odwiedzić, implementują interfejs Element. Interfejs ten definiuje tylko jedną metodę ''accept'' ''(),'' przyjmującą jako jedyny parametr obiekt typu Visitor. Co więcej, metoda ta w każdym przypadku ma identyczną postać: w obiekcie Visitor wywoływana jest metoda ''visit'' ''()'' z parametrem ''this'' , oznaczająca referencję do własnego obiektu. W ten sposób następuje tzw. odwrócenie sterowania: zamieniają się nadawca i odbiorca komunikatu


Diagram przedstawia relacje asocjacji oraz zależności występujące pomiędzy klasami.
Z drugiej strony we wzorcu uczestniczą obiekty implementujące interfejs Visitor, który definiuje grupę metod ''visit'' ''(),'' przyjmujących jako parametr obiekty typów, które należy odwiedzić. Każda z tych metod jest zatem przygotowana do odwiedzenia obiektu jednego typu w sposób całkowicie zależny od niego i do niego dostosowany.
 
Jednak konieczne jest automatyczne określenie, która z metod ''visit'' ''()'' zostanie wykonana. Do tego służy właśnie owo odwrócenie sterowania: przekazywany parametr ''this'' jest zawsze typu klasy, w której się znajduje, dzięki czemu metoda zostanie dopasowana automatycznie do typu parametru.




[[zpo-7-wyk-Slajd29 | << Poprzedni slajd]] | [[zpo-7-wyk-toc|Spis treści ]] | [[zpo-7-wyk-Slajd31 | Następny slajd >>]]
[[zpo-7-wyk-Slajd29 | << Poprzedni slajd]] | [[zpo-7-wyk-toc|Spis treści ]] | [[zpo-7-wyk-Slajd31 | Następny slajd >>]]

Aktualna wersja na dzień 19:16, 4 lis 2006

Visitor: struktura

Visitor: struktura


Obiekty wchodzące w skład struktury, które obiekt Visitor ma odwiedzić, implementują interfejs Element. Interfejs ten definiuje tylko jedną metodę – accept (), przyjmującą jako jedyny parametr obiekt typu Visitor. Co więcej, metoda ta w każdym przypadku ma identyczną postać: w obiekcie Visitor wywoływana jest metoda visit () z parametrem this , oznaczająca referencję do własnego obiektu. W ten sposób następuje tzw. odwrócenie sterowania: zamieniają się nadawca i odbiorca komunikatu

Z drugiej strony we wzorcu uczestniczą obiekty implementujące interfejs Visitor, który definiuje grupę metod visit (), przyjmujących jako parametr obiekty typów, które należy odwiedzić. Każda z tych metod jest zatem przygotowana do odwiedzenia obiektu jednego typu w sposób całkowicie zależny od niego i do niego dostosowany.

Jednak konieczne jest automatyczne określenie, która z metod visit () zostanie wykonana. Do tego służy właśnie owo odwrócenie sterowania: przekazywany parametr this jest zawsze typu klasy, w której się znajduje, dzięki czemu metoda zostanie dopasowana automatycznie do typu parametru.


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