Zpo-5-wyk-Slajd40: 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:
==Refused Bequest==
==Command: uczestnicy==


[[Image:zpo-5-wyk-Slajd40.PNG|Refused Bequest]]
[[Image:zpo-5-wyk-Slajd40.PNG|Command: uczestnicy]]




Odrzucony spadek bardzo mocno wiąże się z ogólniejszym problemem złego wykorzystania dziedziczenia do współdzielenia kodu. Ma miejsce wówczas, gdy nadklasa oferuje swoim podklasom znaczną funkcjonalność, natomiast one z niej nie korzystają. Oznacza to, że klasy te są znacznie słabiej związane ze sobą niż wskazywałby na rodzaj relacji między nimi.
Role poszczególnych obiektów zostaną omówione na przykładzie. W aplikacji okienkowej polecenia znajdujące się w menu są zdefiniowane w postaci obiektów typu Command. Każde polecenie jest inną implementacją tego interfejsu, i posiada innego odbiorcę, ustalanego w momencie wykonywania akcji (np. polecenie zamknięcia okna działa na aktualnie aktywne okno). W momencie kliknięcia na wybranej pozycji menu (czyli obiektu Invoker), wykonuje ona metodę ''execute'' ''()'' skojarzonego z nią polecenia typu Command, ustalając jego odbiorcę. Efekt, w postaci np. zamknięcia okna, jest widoczny dla klienta.
 
Problem ten można usunąć przede wszystkim przesuwając wybrane metody do podklas. Pozwala to na usunięcie ich z tych podklas, które ich nie potrzebują, i jednocześnie odciążenie nadklasy. Drugim rozwiązaniem jest rezygnacja z relacji dziedziczenia na rzecz delegacji. Wówczas relacja w lepszym stopniu odzwierciedla powiązanie pomiędzy obydwiema klasami.




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

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

Command: uczestnicy

Command: uczestnicy


Role poszczególnych obiektów zostaną omówione na przykładzie. W aplikacji okienkowej polecenia znajdujące się w menu są zdefiniowane w postaci obiektów typu Command. Każde polecenie jest inną implementacją tego interfejsu, i posiada innego odbiorcę, ustalanego w momencie wykonywania akcji (np. polecenie zamknięcia okna działa na aktualnie aktywne okno). W momencie kliknięcia na wybranej pozycji menu (czyli obiektu Invoker), wykonuje ona metodę execute () skojarzonego z nią polecenia typu Command, ustalając jego odbiorcę. Efekt, w postaci np. zamknięcia okna, jest widoczny dla klienta.


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