Zpo-5-wyk-Slajd24: 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:
==Przekształcenia trudne==
==Observer: konsekwencje==


[[Image:zpo-5-wyk-Slajd24.PNG|Przekształcenia trudne]]
[[Image:zpo-5-wyk-Slajd24.PNG|Observer: konsekwencje]]




W przypadku przekształceń trudnych analiza statyczna nie jest wystarczającym narzędziem. Niektóre warunki poprawności tych przekształceń można zweryfikować jedynie poprzez analizę dynamiczną, np. wykorzystanie testów jednostkowych. Testy sprawdzają wówczas, czy asercje istotne z punktu widzenia przekształcenia są zachowane.
Wzorzec Observer pozwala na znaczne ograniczenie powiązań i zależności pomiędzy obserwatorami i obiektem obserwowanym. Wprawdzie obiekt obserwowany posiada referencje do obserwatorów, jednak  wiedza jest ograniczona tylko do znajomości interfejsu Observer. Także obserwatory nie muszą znać obiektu Subject w momencie wywołania ich metody ''update'' ''(),'' ponieważ otrzymują powiadomienia asynchroniczne.  


Należy jednak zauważyć, że testy nie pozwalają na dowiedzenie poprawności przekształcenia; przeciwnie – niepowodzenie wykonania testu wskazuje na niepoprawność, natomiast poprawności w ten sposób nie można pokazać. Dlatego weryfikacja poprawności jest realizowana dla tej kategorii przekształceń w sposób niepełny i nie dający pewności, że transformacja została przeprowadzona poprawnie.
Dzięki ogólności interfejsu Observer obiekty uczestniczące we wzorcu mogą należeć do różnych warstw abstrakcji. Wzorzec pozwala zachować spójność pomiędzy warstwami aplikacji, ponieważ informacje o zmianach w jednej warstwie są przekazywane natychmiast do pozostałych obiektów. Jest to szczególnie często jest wykorzystywane do komunikacji w wielu systemach okienkowych. Zamiennie zamiast nazwy Observer wykorzystuje się nazwę Listener.
 
Ponieważ ilość informacji przekazywanych obiektom Observer może istotnie wpływać na wydajność systemu, dlatego istnieją dwa podejścia do implementacji tego wzorca. W modelu ''push'' każdy obserwator otrzymuje w postaci parametru metody ''update'' ''()'' pełną informację o stanie obiektu Subject. W modelu ''pull'' obserwatory otrzymują tylko referencję do obiektu Subject, dzięki której mogą następnie odpytać go o szczegóły dotyczące zmiany. Ten ostatni model jest zatem znacznie lepiej skalowalny, szczególnie w przypadku wywoływania tych metod w środowisku rozproszonym.




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

Aktualna wersja na dzień 11:03, 17 paź 2006

Observer: konsekwencje

Observer: konsekwencje


Wzorzec Observer pozwala na znaczne ograniczenie powiązań i zależności pomiędzy obserwatorami i obiektem obserwowanym. Wprawdzie obiekt obserwowany posiada referencje do obserwatorów, jednak wiedza jest ograniczona tylko do znajomości interfejsu Observer. Także obserwatory nie muszą znać obiektu Subject w momencie wywołania ich metody update (), ponieważ otrzymują powiadomienia asynchroniczne.

Dzięki ogólności interfejsu Observer obiekty uczestniczące we wzorcu mogą należeć do różnych warstw abstrakcji. Wzorzec pozwala zachować spójność pomiędzy warstwami aplikacji, ponieważ informacje o zmianach w jednej warstwie są przekazywane natychmiast do pozostałych obiektów. Jest to szczególnie często jest wykorzystywane do komunikacji w wielu systemach okienkowych. Zamiennie zamiast nazwy Observer wykorzystuje się nazwę Listener.

Ponieważ ilość informacji przekazywanych obiektom Observer może istotnie wpływać na wydajność systemu, dlatego istnieją dwa podejścia do implementacji tego wzorca. W modelu push każdy obserwator otrzymuje w postaci parametru metody update () pełną informację o stanie obiektu Subject. W modelu pull obserwatory otrzymują tylko referencję do obiektu Subject, dzięki której mogą następnie odpytać go o szczegóły dotyczące zmiany. Ten ostatni model jest zatem znacznie lepiej skalowalny, szczególnie w przypadku wywoływania tych metod w środowisku rozproszonym.


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