Zpo-9-wyk-Slajd22: 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:
==Observer: struktura==
==Przykład==


[[Image:zpo-9-wyk-Slajd22.PNG|Observer: struktura]]
[[Image:zpo-9-wyk-Slajd22.PNG|Przykład]]




Wzorzec składa się z dwóch ról: obiektu obserwowanego (Subject) oraz obserwatorów (Observer). Obiekt Subject posiada metody pozwalające na dołączanie i odłączanie obserwatorów: każdy zainteresowany obiekt może się zarejestrować jako obserwator. Ponadto posiada metodę ''notify'' ''(),'' służącą do powiadamiania wszystkich zarejestrowanych obserwatorów poprzez wywołanie w pętli na ich rzecz metody ''update'' ''().''
Przykładem błędnego przeprowadzenia takiej zmiany jest następujący fragment kodu. Dotyczy on obiektu StringTokenizer, dzielącego napisy na wyrazy i zwracającego je w postaci pojedynczych tokenów.


Interfejs Observer jest bardzo prosty i zawiera tylko jedną metodę – ''update'' ''().'' Metoda ta jest wykorzystywana właśnie do powiadamiania obiektu o zmianie stanu obiektu obserwowanego, a sam interfejs jest jedyną informacją, jaką o obserwatorach posiada ten obiekt.  
Zamiast zapamiętywania wartości metody ''st'' ''.'' ''next'' ''()'' po przekształceniu metoda ta jest wywoływana w każdym miejscu, w którym dotychczas następowało odwołanie do zmiennej. Jednak takie przekształcenie wprowadza błąd do programu, ponieważ metoda ''st'' ''.'' ''next'' ''(),'' która zmienia stan obiektu StringTokenizer, zostanie obecnie wywołana wielokrotnie, co wpłynie na zwracane przez nią wartości. Dlatego w przypadku tego przekształcenia należy zwrócić szczególną uwagę na problem efektów ubocznych.




[[zpo-9-wyk-Slajd21 | << Poprzedni slajd]] | [[zpo-9-wyk-toc|Spis treści ]] | [[zpo-9-wyk-Slajd23 | Następny slajd >>]]
[[zpo-9-wyk-Slajd21 | << Poprzedni slajd]] | [[zpo-9-wyk-toc|Spis treści ]] | [[zpo-9-wyk-Slajd23 | Następny slajd >>]]

Aktualna wersja na dzień 18:05, 4 lis 2006

Przykład

Przykład


Przykładem błędnego przeprowadzenia takiej zmiany jest następujący fragment kodu. Dotyczy on obiektu StringTokenizer, dzielącego napisy na wyrazy i zwracającego je w postaci pojedynczych tokenów.

Zamiast zapamiętywania wartości metody st . next () po przekształceniu metoda ta jest wywoływana w każdym miejscu, w którym dotychczas następowało odwołanie do zmiennej. Jednak takie przekształcenie wprowadza błąd do programu, ponieważ metoda st . next (), która zmienia stan obiektu StringTokenizer, zostanie obecnie wywołana wielokrotnie, co wpłynie na zwracane przez nią wartości. Dlatego w przypadku tego przekształcenia należy zwrócić szczególną uwagę na problem efektów ubocznych.


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