Zpo-5-wyk-Slajd43: 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:
==Feature Envy==
==Command: przykład cd.==


[[Image:zpo-5-wyk-Slajd43.PNG|Feature Envy]]
[[Image:zpo-5-wyk-Slajd43.PNG|Command: przykład cd.]]




Problem ten dotyczy sytuacji, w której metoda częściej odwołuje się do metod obcych klas niż do metod własnej klasy. Zazdrość o funkcje jest także związana z niewłaściwą hermetyzacją, jednak podstawowym problemem opisywanym przez ten przykry zapach jest niepoprawne rozmieszczenie metod w klasach. Typowym ilościowym wskaźnikiem tego przykrego zapachu jest niska spójność klasy: jej metody nie realizują spójnego zbioru funkcji.
Na slajdzie przedstawiono przykładową implementację klasy Bank, która pełni role Invoker i Client, oraz klasy Account, będącej odbiorcą poleceń.


Podobnie jak w opisanym wcześniej przypadku niewłaściwej hermetyzacji, z problemem tym można poradzić sobie przenosząc składowe do klasy najbardziej je wykorzystujących. Czasem jednak jest to niemożliwe, ponieważ zwiększałoby liczbę powiązań między pozostałymi klasami. Wówczas zastosowanie znajduje np. wzorzec projektowy Visitor, w którym obiekt wywołując metodę przekazuje jej referencję do samego siebie, umożliwiając tzw. odwrócenie sterowania. Pozwala to ograniczyć liczbę zbędnych asocjacji między klasami.
Klasa Bank definiuje metodę ''income'' ''(),'' która służy do wykonywania wpłaty na określony rachunek. W tym celu tworzy on instancję odpowiedniej operacji (klasy Income), a następnie przekazuje jej wykonanie obiektowi Account.
 
Klasa Account wykonuje dowolną abstrakcyjną operację przekazaną z zewnątrz, np. przez klasę Bank. Dzięki temu dodanie nowej operacji bankowej nie powoduje konieczności jakiejkolwiek zmiany w klasie Account.




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

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

Command: przykład cd.

Command: przykład cd.


Na slajdzie przedstawiono przykładową implementację klasy Bank, która pełni role Invoker i Client, oraz klasy Account, będącej odbiorcą poleceń.

Klasa Bank definiuje metodę income (), która służy do wykonywania wpłaty na określony rachunek. W tym celu tworzy on instancję odpowiedniej operacji (klasy Income), a następnie przekazuje jej wykonanie obiektowi Account.

Klasa Account wykonuje dowolną abstrakcyjną operację przekazaną z zewnątrz, np. przez klasę Bank. Dzięki temu dodanie nowej operacji bankowej nie powoduje konieczności jakiejkolwiek zmiany w klasie Account.


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