Zpo-9-wyk-Slajd38: 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:
==Bridge: struktura==
==Encapsulate Collection==


[[Image:zpo-9-wyk-Slajd38.PNG|Bridge: struktura]]
[[Image:zpo-9-wyk-Slajd38.PNG|Encapsulate Collection]]




Wzorzec składa się z dwóch interfejsów: Abstraction i Implementor, oraz ich implementacji. Oba interfejsy mogą w rzeczywistości być zwykłymi klasami, jeżeli użyty język programowania nie posiada interfejsów jako swoich elementów. Klient kontaktuje się z obiektem Abstraction i nie jest w żaden sposób zależny od obiektu Implementor. Abstraction jest związany relacją kompozycji z wybranym obiektem Implementor, i do niego deleguje wszystkie żądania przesłane przez klienta.  
Problem rozwiązywany przez to przekształcenie został już omówiony w zarysie podczas pierwszego wykładu. Polega on na udostępnieniu do modyfikacji kolekcji poza kontrolą jej właściciela. Właściciel, poprzez metodę typu ''get'' ''(),'' przekazuje klientom referencję do kolekcji, która następnie może być swobodnie modyfikowana. Celem przekształcenia jest przeniesienie odpowiedzialności za modyfikację kolekcji z niej samej do jej właściciela.


Struktura wzorca bardzo przypomina wzorzec Adapter, jednak cel jest zupełnie inny: intencją jest rozdzielenie abstrakcji od implementacji, tak aby implementacja nie była dostępna dla klienta. Taka struktura pozwala także zmianę obiektu Implementor w trakcie działania programu.
Refaktoryzacja rozpoczyna się od zdefiniowania w klasie właściciela metod ''add'' ''()'' i ''remove'' ''()'' dla elementów kolekcji, a następnie przeniesienie wywołań metod kolekcji do nowo utworzonych metod w klasie jej właściciela. Drugim krokiem jest zmiana metody zwracającej referencję do kolekcji w taki sposób, aby nie pozwalała ona na modyfikację tej kolekcji. Istnieje kilka możliwych rozwiązań: użycie specjalizowanego opakowania kolekcji (zob. wzorzec Decorator), który uniemożliwi jej modyfikację (omówionego podczas wykładu nt. kolekcji w języku Java), lub po prostu zwrócenie jej kopii.




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

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

Encapsulate Collection

Encapsulate Collection


Problem rozwiązywany przez to przekształcenie został już omówiony w zarysie podczas pierwszego wykładu. Polega on na udostępnieniu do modyfikacji kolekcji poza kontrolą jej właściciela. Właściciel, poprzez metodę typu get (), przekazuje klientom referencję do kolekcji, która następnie może być swobodnie modyfikowana. Celem przekształcenia jest przeniesienie odpowiedzialności za modyfikację kolekcji z niej samej do jej właściciela.

Refaktoryzacja rozpoczyna się od zdefiniowania w klasie właściciela metod add () i remove () dla elementów kolekcji, a następnie przeniesienie wywołań metod kolekcji do nowo utworzonych metod w klasie jej właściciela. Drugim krokiem jest zmiana metody zwracającej referencję do kolekcji w taki sposób, aby nie pozwalała ona na modyfikację tej kolekcji. Istnieje kilka możliwych rozwiązań: użycie specjalizowanego opakowania kolekcji (zob. wzorzec Decorator), który uniemożliwi jej modyfikację (omówionego podczas wykładu nt. kolekcji w języku Java), lub po prostu zwrócenie jej kopii.


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