Zpo-10-wyk-Slajd29: 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:
==Memento: implementacja==
==Hide Delegate==


[[Image:zpo-10-wyk-Slajd29.PNG|Memento: implementacja]]
[[Image:zpo-10-wyk-Slajd29.PNG|Hide Delegate]]




Struktura wzorca jest dość oczywista i nie wymaga komentarza. Warto jednak zastanowić się nad sposobem zapewnienia zróżnicowanego dostępu do obiektów Memento dla dwóch różnych klas. Implementacja wzorca w znacznym stopniu zależy od możliwości oferowanych przez język programowania. W przypadku języka C++ może to być zaprzyjaźnienie klas, które pozwala wybranym klasom odwoływać się do swoich składowych jak do elementów prywatnych. Niestety, istnieje grupa języków nie posiadających takich możliwości. W języku Java możliwym rozwiązaniem jest zastosowanie klasy wewnętrznej do reprezentacji obiektu Memento. W ten sposób jedynie jej klasa zewnętrzna posiada dostęp do jej składowych niepublicznych, natomiast inne klasy nie mają o niej żadnej wiedzy.
Celem tego przekształcenia jest poprawa hermetyzacji systemu poprzez ukrycie faktu delegowania żądań przez serwer. W układzie składającym się z trzech klas: klienta, serwera i delegata oznacza to, że klient kontaktuje się jedynie z serwerem, pozostając nieświadomym istnienia delegata, któremu serwer zleca obsługę żądania. Dzięki temu nie występuje powiązanie pomiędzy klientem a delegatem. Pozwala to na elastyczną zmianę delegata w trakcie wykonywania programu.  
 
Przekształcenie polega na utworzeniu w klasie serwera prostych delegacji przekierowujących obsługę żądania klienta do delegata. Ponieważ przekształcenie to wiąże się z tworzeniem nowych metod, należy koniecznie upewnić się, że ich powstanie nie zaburza polimorficznego pokrywania w hierarchii dziedziczenia. W takim wypadku przekształcenie to nie może być skutecznie i poprawnie zastosowane.
 
Następnym krokiem jest modyfikacja klas klienckich, tak aby wywoływały żądania jedynie w klasie serwera, a nie bezpośrednio na delegacie. Po zakończeniu tego kroku można ukryć fakt istnienia klienta poprzez uczynienie prywatną referencji do niego w klasie serwera.  




[[zpo-10-wyk-Slajd28 | << Poprzedni slajd]] | [[zpo-10-wyk-toc|Spis treści ]] | [[zpo-10-wyk-Slajd30 | Następny slajd >>]]
[[zpo-10-wyk-Slajd28 | << Poprzedni slajd]] | [[zpo-10-wyk-toc|Spis treści ]] | [[zpo-10-wyk-Slajd30 | Następny slajd >>]]

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

Hide Delegate

Hide Delegate


Celem tego przekształcenia jest poprawa hermetyzacji systemu poprzez ukrycie faktu delegowania żądań przez serwer. W układzie składającym się z trzech klas: klienta, serwera i delegata oznacza to, że klient kontaktuje się jedynie z serwerem, pozostając nieświadomym istnienia delegata, któremu serwer zleca obsługę żądania. Dzięki temu nie występuje powiązanie pomiędzy klientem a delegatem. Pozwala to na elastyczną zmianę delegata w trakcie wykonywania programu.

Przekształcenie polega na utworzeniu w klasie serwera prostych delegacji przekierowujących obsługę żądania klienta do delegata. Ponieważ przekształcenie to wiąże się z tworzeniem nowych metod, należy koniecznie upewnić się, że ich powstanie nie zaburza polimorficznego pokrywania w hierarchii dziedziczenia. W takim wypadku przekształcenie to nie może być skutecznie i poprawnie zastosowane.

Następnym krokiem jest modyfikacja klas klienckich, tak aby wywoływały żądania jedynie w klasie serwera, a nie bezpośrednio na delegacie. Po zakończeniu tego kroku można ukryć fakt istnienia klienta poprzez uczynienie prywatną referencji do niego w klasie serwera.


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