Zpo-11-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:
==Visitor: przykład cd.==
==Introduce Null Object==


[[Image:zpo-11-wyk-Slajd39.PNG|Visitor: przykład cd.]]
[[Image:zpo-11-wyk-Slajd39.PNG|Introduce Null Object]]




Dwie klasy reprezentujące produkty bankowe: Account i Credit implementują metodę ''accept'' ''().'' W przypadku klasy Account wymagane jest uprawnienie weryfikowane przez metodę ''isPriviliged'' ''(),'' natomiast w przypadku kredytu weryfikacja ta nie jest przeprowadzana
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.
 
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'' .
 
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-11-wyk-Slajd38 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd40 | Następny slajd >>]]
[[zpo-11-wyk-Slajd38 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd40 | Następny slajd >>]]

Aktualna wersja na dzień 17:37, 4 lis 2006

Introduce Null Object

Introduce Null Object


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.

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 .

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żą.


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