Zpo-8-wyk-Slajd39: 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:
==Introduce Null Object==
==Data Clumps==


[[Image:zpo-8-wyk-Slajd39.PNG|Introduce Null Object]]
[[Image:zpo-8-wyk-Slajd39.PNG|Data Clumps]]




Przekształcenie to służy do usunięcia porównań referencji do obiektu z wartością ''null'' . Porównania takie często pojawiają się w kodzie, ponieważ zapobiegają pojawieniu się wyjątku ''NullPointerException'' . Jednak duża ich liczba powoduje ograniczenie czytelności kodu.
Ten problem jest związany z innym przykrym zapachem – długą listą parametrów. Pojawiają się zbiory parametrów, które są wewnętrznie ze sobą związane, tworząc jeden logiczny zestaw informacji. Przekazywanie takich danych osobno ogranicza abstrakcję oraz dodatkowo komplikuje komunikację między metodami.


Celem tego przekształcenia jest wykorzystanie polimorfizmu (podobnie jak w przypadku innych przekształceń dotyczących wyrażeń warunkowych) i stworzenie podklasy analizowanego obiektu reprezentującej wartość ''null'' .
Usunięcie tego przykrego zapachu polega na utworzeniu nowej klasy, która będzie przechowywała dotychczasowe osobne dane jako swoje pola. Warto zauważyć, że łatwo doprowadzić w ten sposób do powstania przykrego zapachu Data Class, jednak rozbudowa funkcjonalności nowej klasy może temu zapobiec. Natomiast przekazywanie pojedynczego obiektu zamiast zbitki danych pozwala na uproszczenie struktury programu.
 
Przekształcenie zaczyna się od stworzenia podklasy, której nazwa – zgodnie z konwencją – zaczyna się od słowa ''Null'' i która będzie reprezentowała niezainicjowane zmienne analizowanej klasy. W obu klasach (nadklasie i podklasie) należy zdefiniować metodę, która pozwoli odróżnić ich instancje – np. ''isNull'' ''().'' W podklasie metoda ta zwraca wartość ''true'' , a w nadklasie – ''false'' ''.'' Następnie wszystkie przypisania wartości ''null'' należy zastąpić utworzeniem instancji podklasy. Dzięki temu można po kolei zmieniać występujące u klientów porównania z wartością ''null'' wywołaniem metody ''isNull'' ''().''
 
Dopiero po zakończeniu tej operacji jest możliwe pełne wykorzystanie polimorfizmu: należy pokryć w podklasie metody zwracające wartości odziedziczone po nadklasie, tak aby ich wyniki odpowiadały tym, których można się spodziewać po obiektach "pustych" (np. nazwisko nieistniejącego studenta może być napisem pustym). To pozwoli usunąć metody ''isNull'' ''()'' i warunkowe ich sprawdzanie, ponieważ wynik pokrytych metod wywoływanych na obiektach będzie zależał od klasy, do której należą.  




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

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

Data Clumps

Data Clumps


Ten problem jest związany z innym przykrym zapachem – długą listą parametrów. Pojawiają się zbiory parametrów, które są wewnętrznie ze sobą związane, tworząc jeden logiczny zestaw informacji. Przekazywanie takich danych osobno ogranicza abstrakcję oraz dodatkowo komplikuje komunikację między metodami.

Usunięcie tego przykrego zapachu polega na utworzeniu nowej klasy, która będzie przechowywała dotychczasowe osobne dane jako swoje pola. Warto zauważyć, że łatwo doprowadzić w ten sposób do powstania przykrego zapachu Data Class, jednak rozbudowa funkcjonalności nowej klasy może temu zapobiec. Natomiast przekazywanie pojedynczego obiektu zamiast zbitki danych pozwala na uproszczenie struktury programu.


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