Zpo-6-wyk-Slajd36: 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:
==Self-Encapsulate Field==
==Prototype: przykład==


[[Image:zpo-6-wyk-Slajd36.PNG|Self-Encapsulate Field]]
[[Image:zpo-6-wyk-Slajd36.PNG|Prototype: przykład]]




Fowler wyróżnił dwa przekształcenia dotyczące hermetyzacji pól, w zależności od celu ich stosowania. W pierwszym przypadku jest on związany z koniecznością zmiany sposobu odczytywania wartości pola w podklasach. Ponieważ pola nie są polimorficzne, dlatego konieczne jest hermetyzowanie ich poprzez metody get/set.
W języku Java wzorzec ten jest zaimplementowany bezpośrednio w maszynie wirtualnej. Każdy obiekt posiada metodę ''clone'' ''(),'' a co za tym idzie – potencjalną możliwość klonowania siebie. Jednak aby skorzystać z tej możliwości, konieczne jest zaimplementowanie w wybranej klasie interfejsu ''Cloneable'' . Interfejs ten nie definiuje żadnych metod, a jedynie pełni rolę znacznika, wskazującego, że dana klasa posiada uprawnienie do klonowania samej siebie. Próba wywołania tej metody bez zaimplementowania interfejsu powoduje zgłoszenie wyjątku.


Mechanika jest intuicyjnie prosta: należy utworzyć parę metod get/set i zadeklarować w nich niepubliczny poziom widoczności (ponieważ użytkownikami tych metod mają być podklasy, a nie klasy dostępne w inny sposób). Następnie odwołania do pola występujące w podklasach należy zastąpić wywołaniami metod get/set i zadeklarować pole jako prywatne.
Domyślnie wywołanie metody ''clone'' ''()'' powoduje utworzenie tzw. płytkiej kopii obiektu, tzn. obiekty zależne są kopiowane jako referencje, a nie jako obiekty. Płytka kopia jest bezpieczna, ponieważ nie powoduje rekurencyjnego alokowania znacznych obszarów pamięci. Jeżeli istnieje potrzeba realizacji tzw. głębokiej kopii, zadanie jej zaimplementowania leży po stronie programisty.




[[zpo-6-wyk-Slajd35 | << Poprzedni slajd]] | [[zpo-6-wyk-toc|Spis treści ]] | [[zpo-6-wyk-Slajd37 | Następny slajd >>]]
[[zpo-6-wyk-Slajd35 | << Poprzedni slajd]] | [[zpo-6-wyk-toc|Spis treści ]] | [[zpo-6-wyk-Slajd37 | Następny slajd >>]]

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

Prototype: przykład

Prototype: przykład


W języku Java wzorzec ten jest zaimplementowany bezpośrednio w maszynie wirtualnej. Każdy obiekt posiada metodę clone (), a co za tym idzie – potencjalną możliwość klonowania siebie. Jednak aby skorzystać z tej możliwości, konieczne jest zaimplementowanie w wybranej klasie interfejsu Cloneable . Interfejs ten nie definiuje żadnych metod, a jedynie pełni rolę znacznika, wskazującego, że dana klasa posiada uprawnienie do klonowania samej siebie. Próba wywołania tej metody bez zaimplementowania interfejsu powoduje zgłoszenie wyjątku.

Domyślnie wywołanie metody clone () powoduje utworzenie tzw. płytkiej kopii obiektu, tzn. obiekty zależne są kopiowane jako referencje, a nie jako obiekty. Płytka kopia jest bezpieczna, ponieważ nie powoduje rekurencyjnego alokowania znacznych obszarów pamięci. Jeżeli istnieje potrzeba realizacji tzw. głębokiej kopii, zadanie jej zaimplementowania leży po stronie programisty.


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