Wzorce_projektowe_Elementy_oprogramowania_obiektowego_wielokrotnego_uzytku_wzoele.pdf
(
445 KB
)
Pobierz
Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku
Wzorce projektowe. Elementy
oprogramowania obiektowego
wielokrotnego u¿ytku
Autorzy: Erich Gamma, Richard Helm,
Ralph Johnson, John M. Vlissides
T³umaczenie: Tomasz Walczak
ISBN: 978-83-246-2662-5
Tytu³ orygina³u
:
Design Patterns: Elements
of Reusable Object-Oriented Software
Format: 180
×
235, stron: 376
Naucz siê wykorzystywaæ wzorce projektowe i u³atw sobie pracê!
Jak wykorzystaæ projekty, które ju¿ wczeœniej okaza³y siê dobre?
Jak stworzyæ elastyczny projekt obiektowy?
Jak sprawnie rozwi¹zywaæ typowe problemy projektowe?
Projektowanie oprogramowania obiektowego nie jest ³atwe, a przy za³o¿eniu, ¿e powinno
ono nadawaæ siê do wielokrotnego u¿ytku, staje siê naprawdê skomplikowane.
Aby stworzyæ dobry projekt, najlepiej skorzystaæ ze sprawdzonych i efektywnych
rozwi¹zañ, które wczeœniej by³y ju¿ stosowane. W tej ksi¹¿ce znajdziesz w³aœnie
najlepsze doœwiadczenia z obszaru programowania obiektowego, zapisane w formie
wzorców projektowych gotowych do natychmiastowego u¿ycia!
W ksi¹¿ce „Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego
u¿ytku” opisano, czym s¹ wzorce projektowe, a tak¿e w jaki sposób pomagaj¹ one
projektowaæ oprogramowanie obiektowe. Podrêcznik zawiera studia przypadków,
pozwalaj¹ce poznaæ metody stosowania wzorców w praktyce. Zamieszczono tu równie¿
katalog wzorców projektowych, podzielony na trzy kategorie: wzorce konstrukcyjne,
strukturalne i operacyjne. Dziêki temu przewodnikowi nauczysz siê skutecznie
korzystaæ z wzorców projektowych, ulepszaæ dokumentacjê i usprawniaæ konserwacjê
istniej¹cych systemów. Krótko mówi¹c, poznasz najlepsze sposoby sprawnego
opracowywania niezawodnego projektu.
Wzorce projektowe w architekturze MVC
Katalog wzorców projektowych
Projektowanie edytora dokumentów
Wzorce konstrukcyjne, strukturalne i operacyjne
Dziedziczenie klas i interfejsów
Okreœlanie implementacji obiektów
Obs³uga wielu standardów wygl¹du i dzia³ania
Zastosowanie mechanizmów powtórnego wykorzystania rozwi¹zania
Wykorzystaj zestaw konkretnych narzêdzi do programowania obiektowego!
S
PIS TREŚCI
Przedmowa ............................................................................................................................. 9
Wstęp ..................................................................................................................................... 11
Przewodnik dla Czytelników ............................................................................................ 13
Rozdział 1.
Wprowadzenie ..................................................................................................................... 15
1.1. Czym jest wzorzec projektowy? ................................................................................. 16
1.2. Wzorce projektowe w architekturze MVC w języku Smalltalk ............................. 18
1.3. Opisywanie wzorców projektowych ......................................................................... 20
1.4. Katalog wzorców projektowych ................................................................................. 22
1.5. Struktura katalogu ........................................................................................................24
1.6. Jak wzorce pomagają rozwiązać problemy projektowe? ....................................... 26
1.7. Jak wybrać wzorzec projektowy? ............................................................................... 42
1.8. Jak stosować wzorce projektowe? .............................................................................. 43
Rozdział 2.
Studium przypadku — projektowanie edytora dokumentów ................................... 45
2.1. Problemy projektowe ................................................................................................... 45
2.2. Struktura dokumentu ................................................................................................... 47
2.3. Formatowanie ................................................................................................................ 52
2.4. Ozdabianie interfejsu użytkownika ........................................................................... 55
2.5. Obsługa wielu standardów wyglądu i działania ..................................................... 59
2.6. Obsługa wielu systemów okienkowych .................................................................... 63
2.7. Działania użytkowników ............................................................................................. 69
2.8. Sprawdzanie pisowni i podział słów ......................................................................... 74
2.9. Podsumowanie ..............................................................................................................86
Rozdział 3.
Wzorce konstrukcyjne ........................................................................................................ 87
BUDOWNICZY (BUILDER) ....................................................................................... 92
FABRYKA ABSTRAKCYJNA (ABSTRACT FACTORY) ..................................... 101
METODA WYTWÓRCZA ........................................................................................ 110
PROTOTYP (PROTOTYPE) ..................................................................................... 120
SINGLETON (SINGLETON) .................................................................................... 130
Omówienie wzorców konstrukcyjnych ......................................................................... 137
8
SPIS TREŚCI
Rozdział 4.
Wzorce strukturalne .......................................................................................................... 139
ADAPTER (ADAPTER) ............................................................................................ 141
DEKORATOR (DECORATOR) ................................................................................ 152
FASADA (FACADE) ................................................................................................. 161
KOMPOZYT (COMPOSITE) .................................................................................... 170
MOST (BRIDGE) ....................................................................................................... 181
PEŁNOMOCNIK (PROXY) ....................................................................................... 191
PYŁEK (FLYWEIGHT) ............................................................................................. 201
Omówienie wzorców strukturalnych ............................................................................. 213
Rozdział 5.
Wzorce operacyjne ............................................................................................................ 215
INTERPRETER (INTERPRETER) ............................................................................ 217
ITERATOR (ITERATOR) .......................................................................................... 230
ŁAŃCUCH ZOBOWIĄZAŃ (CHAIN OF RESPONSIBILITY) ................................... 244
MEDIATOR (MEDIATOR) ....................................................................................... 254
METODA SZABLONOWA (TEMPLATE METHOD) ............................................ 264
OBSERWATOR (OBSERVER) ................................................................................. 269
ODWIEDZAJĄCY (VISITOR) .................................................................................. 280
PAMIĄTKA (MEMENTO) ........................................................................................ 294
POLECENIE (COMMAND) ...................................................................................... 302
STAN (STATE) .......................................................................................................... 312
STRATEGIA (STRATEGY) ...................................................................................... 321
Omówienie wzorców operacyjnych ............................................................................... 330
Rozdział 6.
Podsumowanie ................................................................................................................... 335
6.1. Czego można oczekiwać od wzorców projektowych? ......................................... 335
6.2. Krótka historia ............................................................................................................. 339
6.3. Społeczność związana ze wzorcami ......................................................................... 340
6.4. Zaproszenie .................................................................................................................. 342
6.5. Słowo na zakończenie ................................................................................................ 342
Dodatek A
Słowniczek .......................................................................................................................... 343
Dodatek B
Przewodnik po notacji ...................................................................................................... 347
B.1. Diagram klas ................................................................................................................ 347
B.2. Diagram obiektów ...................................................................................................... 349
B.3. Diagram interakcji ...................................................................................................... 350
Dodatek C
Klasy podstawowe ............................................................................................................. 351
C.1. List ................................................................................................................................. 351
C.2. Iterator .......................................................................................................................... 354
C.3. ListIterator ................................................................................................................... 354
C.4. Point .............................................................................................................................. 355
C.5. Rect ............................................................................................................................... 355
Bibliografia ......................................................................................................................... 357
Skorowidz ........................................................................................................................... 363
R
OZDZIAŁ
3.
Wzorce konstrukcyjne
Konstrukcyjne wzorce projektowe pozwalają ująć w abstrakcyjnej formie proces tworzenia
egzemplarzy klas. Pomagają zachować niezależność systemu od sposobu tworzenia, składania
i reprezentowania obiektów. Klasowe wzorce konstrukcyjne są oparte na dziedziczeniu i służą
do modyfikowania klas, których egzemplarze są tworzone. W obiektowych wzorcach kon-
strukcyjnych tworzenie egzemplarzy jest delegowane do innego obiektu.
Wzorce konstrukcyjne zyskują na znaczeniu wraz z coraz częstszym zastępowaniem w syste-
mach dziedziczenia klas składaniem obiektów. Powoduje to, że programiści kładą mniejszy
nacisk na trwałe zapisywanie w kodzie określonego zestawu zachowań, a większy — na defi-
niowanie mniejszego zbioru podstawowych działań, które można połączyć w dowolną liczbę
bardziej złożonych zachowań. Dlatego tworzenie obiektów o określonych zachowaniach wy-
maga czegoś więcej niż prostego utworzenia egzemplarza klasy.
We wzorcach z tego rozdziału powtarzają się dwa motywy. Po pierwsze, wszystkie te wzorce
kapsułkują informacje o tym, z których klas konkretnych korzysta system. Po drugie, ukry-
wają proces tworzenia i składania egzemplarzy tych klas. System zna tylko interfejsy obiektów
zdefiniowane w klasach abstrakcyjnych. Oznacza to, że wzorce konstrukcyjne dają dużą ela-
styczność w zakresie tego,
co
jest tworzone,
kto
to robi,
jak
przebiega ten proces i
kiedy
ma miejsce.
Umożliwiają skonfigurowanie systemu z obiektami-produktami o bardzo zróżnicowanych
strukturach i funkcjach. Konfigurowanie może przebiegać statycznie (w czasie kompilacji) lub
dynamicznie (w czasie wykonywania programu).
Niektóre wzorce konstrukcyjne są dla siebie konkurencją. Na przykład w niektórych warunkach
można z pożytkiem zastosować zarówno wzorzec Prototyp (s. 120), jak i Fabryka abstrakcyjna
(s. 101). W innych przypadkach wzorce się uzupełniają. We wzorcu Budowniczy (s. 92) można
wykorzystać jeden z pozostałych wzorców do określenia, które komponenty zostaną zbudowane,
a do zaimplementowania wzorca Prototyp (s. 120) można użyć wzorca Singleton (s. 130).
Ponieważ wzorce konstrukcyjne są mocno powiązane ze sobą, przeanalizujemy całą ich piątkę
razem, aby podkreślić podobieństwa i różnice między nimi. Wykorzystamy też jeden przykład
do zilustrowania implementacji tych wzorców — tworzenie labiryntu na potrzeby gry kom-
puterowej. Labirynt i gra będą nieco odmienne w poszczególnych wzorcach. Czasem celem
gry będzie po prostu znalezienie wyjścia z labiryntu. W tej wersji gracz prawdopodobnie będzie
88
Rozdział 3. • WZORCE KONSTRUKCYJNE
widział tylko lokalny fragment labiryntu. Czasem w labiryntach trzeba będzie rozwiązać pro-
blemy i poradzić sobie z zagrożeniami. W tych odmianach można udostępnić mapę zbadanego
już fragmentu labiryntu.
Pominiemy wiele szczegółów dotyczących tego, co może znajdować się w labiryncie i czy gra
jest jedno-, czy wieloosobowa. Zamiast tego skoncentrujemy się na tworzeniu labiryntów.
Labirynt definiujemy jako zbiór pomieszczeń. Każde z nich ma informacje o sąsiadach. Mogą
to być następne pokoje, ściana lub drzwi do innego pomieszczenia.
Klasy
Room
,
Door
i
Wall
reprezentują komponenty labiryntu używane we wszystkich przykła-
dach. Definiujemy tylko fragmenty tych klas potrzebne do utworzenia labiryntu. Ignorujemy
graczy, operacje wyświetlania labiryntu i poruszania się po nim oraz inne ważne funkcje nie-
istotne przy generowaniu labiryntów.
Poniższy diagram ilustruje relacje między wspomnianymi klasami:
Każde pomieszczenie ma cztery strony. W implementacji w języku C++ do określania stron
północnej, południowej, wschodniej i zachodniej służy typ wyliczeniowy
Direction
:
enum Direction {North, South, East, West};
W implementacji w języku Smalltalk kierunki te są reprezentowane za pomocą odpowiednich
symboli.
MapSite
to klasa abstrakcyjna wspólna dla wszystkich komponentów labiryntu. Aby uprościć
przykład, zdefiniowaliśmy w niej tylko jedną operację —
Enter
. Jej działanie zależy od tego,
gdzie gracz wchodzi. Jeśli jest to pomieszczenie, zmienia się lokalizacja gracza. Jeżeli są to drzwi,
mogą zajść dwa zdarzenia — jeśli są otwarte, gracz przejdzie do następnego pokoju, a o za-
mknięte drzwi użytkownik rozbije sobie nos.
class MapSite {
public:
virtual void Enter() = 0;
};
Enter
to prosty podstawowy element bardziej złożonych operacji gry. Na przykład jeśli gracz
znajduje się w pomieszczeniu i zechce pójść na wschód, gra może ustalić, który obiekt
MapSite
znajduje się w tym kierunku, i wywołać operację
Enter
tego obiektu. Operacja
Enter
specyficzna
Plik z chomika:
sq9nip
Inne pliki z tego folderu:
Visio_2002_dla_kazdego_vis22k.pdf
(1008 KB)
Vademecum_hakera_Zabezpieczenia_w_Windows_vahawi.pdf
(1381 KB)
Vademecum_hakera_Edycja_plikow_binarnych_vahace.pdf
(239 KB)
USB_Praktyczne_programowanie_z_Windows_API_w_C_usbppr.pdf
(574 KB)
UNIX_Sztuka_programowania_unszpr.pdf
(532 KB)
Inne foldery tego chomika:
Acrobat
After Effects
Bezpieczeństwo Sieci
Bezpieczeństwo Systemów
Bezpieczeństwo WWW
Zgłoś jeśli
naruszono regulamin