Zpo-8-wyk-Slajd21: 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:
==Replace Type Code with Polymorphism==
==Predykat noSideEffectsP(1)==


[[Image:zpo-8-wyk-Slajd21.PNG|Replace Type Code with Polymorphism]]
[[Image:zpo-8-wyk-Slajd21.PNG|Predykat noSideEffectsP(1)]]




Przekształcenie to stanowi ciąg dalszy poprzedniego, stosującego do obsługi pola stanu zgodne z wzorcem State. Tym razem ten sam wzorzec zostanie wykorzystany także do usunięcia warunkowego wyboru określonego zachowania obiektu i przeniesienia związanych z nim metod do podklasy reprezentującej stan.
Po ograniczeniu tego problemu do stwierdzenia, czy istnieje taki zbiór wejść, który może spowodować zmianę stanu systemu (czyli znów modyfikację wybranej zmiennej Var), staje się on wprawdzie rozstrzygalny, ale jego złożoność obliczeniowa (jest NP-zupełny) nadal sytuuje go wśród problemów bardzo trudnych.
 
Pierwszym krokiem przekształcenia jest wyłączenie wyrażenia warunkowego do osobnej metody, tak aby było możliwe przeniesienie jej do klasy abstrakcyjnej reprezentującej stan obiektu (zob. przekształcenie Replace Type Code with State). Następnym krokiem jest przeniesienie tej metody do tej klasy i pozostawienie w obiekcie źródłowym delegacji do tej instancji tej klasy. W ten sposób wywołanie metody, której zachowanie zależy od stanu, jest zawsze delegowane do bieżącego obiektu stanu.
 
Gdy metoda znajdzie się w klasie abstrakcyjnej, wówczas należy pokryć ją we wszystkich podklasach, kopiując do nich właściwą gałąź wyrażenia warunkowego, związaną z danym stanem. Po przeniesieniu wszystkich gałęzi metoda w klasie abstrakcyjnej może zostać zadeklarowana jako abstrakcyjna.




[[zpo-8-wyk-Slajd20 | << Poprzedni slajd]] | [[zpo-8-wyk-toc|Spis treści ]] | [[zpo-8-wyk-Slajd22 | Następny slajd >>]]
[[zpo-8-wyk-Slajd20 | << Poprzedni slajd]] | [[zpo-8-wyk-toc|Spis treści ]] | [[zpo-8-wyk-Slajd22 | Następny slajd >>]]

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

Predykat noSideEffectsP(1)

Predykat noSideEffectsP(1)


Po ograniczeniu tego problemu do stwierdzenia, czy istnieje taki zbiór wejść, który może spowodować zmianę stanu systemu (czyli znów modyfikację wybranej zmiennej Var), staje się on wprawdzie rozstrzygalny, ale jego złożoność obliczeniowa (jest NP-zupełny) nadal sytuuje go wśród problemów bardzo trudnych.


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