Wzorce projektowe Analiza kodu sposobem na ich poznanie.pdf

(723 KB) Pobierz
Wzorce projektowe. Analiza kodu sposobem na ich poznanie
IDZ DO
PRZYK£ADOW Y ROZDZIA£
Wzorce projektowe.
Analiza kodu sposobem
na ich poznanie
SPIS TREŒCI
KATALOG KSI¥¯EK
Autor: Allen Holub
ISBN: 83-7361-948-8
Tytu³ orygina³ u: Holub on Patterns:
Format: B5, stron: 464
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Opanuj zasady stosowania wzorców projektowych na praktycznych przyk³adach
• Dowiedz siê, czym s¹ wzorce projektowe
Zaimplementuj wzorce we w³asnych programach
Poznaj rodzaje wzorców projektowych
Wzorce projektowe to zapisane w sposób formalny sposoby rozwi¹zywania
najczêstszych problemów, z jakimi borykaj¹ siê twórcy oprogramowania stosuj¹cy
jêzyki obiektowe. Najczêœciej stosowane wzorce zosta³y skatalogowane i przedstawione
w postaci diagramów UML, jednak do poprawnego ich wykorzystywania niezbêdna jest
wiedza praktyczna. Przystêpuj¹c do implementacji wzorca projektowego, nale¿y poznaæ
zakres jego zastosowania. Tak¹ wiedzê najlepiej zdobywa siê, analizuj¹c przyk³ady
kodów Ÿród³owych.
Dziêki ksi¹¿ce „Wzorce projektowe. Analiza kodu sposobem na ich poznanie” poznasz
wzorce w taki w³aœnie sposób — badaj¹c programy, w których je zastosowano. Ka¿dy
z omawianych w ksi¹¿ce wzorców zaprezentowany jest w oparciu o dwie implementacje
szczegó³owo wyjaœniaj¹ce zasadê jego dzia³ania. Dziêki takim opisom wzorców
opanujesz tê technologiê znacznie szybciej ni¿ w przypadku nauki teoretycznych
podstaw oraz prób ich samodzielnego wdra¿ania we w³asnych aplikacjach. Unikniesz
typowych b³êdów i dowiesz siê, jak prawid³owo wykorzystywaæ ka¿dy z wzorców.
Zastosowanie wzorców projektowych
Klasyfikacja wzorców
Podstawowe pojêcia z dziedziny obiektowoœci
Interfejsy i wzorce konstrukcyjne
Implementacja wzorców obserwatora i fasady
Wykorzystanie wzorców projektowych w aplikacjach bazodanowych
Ksi¹¿ka zawiera równie¿ zestawienie najczêœciej wykorzystywanych wzorców
projektowych wraz z opisem ich zastosowañ.
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ONOWOŒCIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
319815126.001.png 319815126.002.png 319815126.003.png 319815126.004.png
Spis treści
O Autorze ......................................................................................... 9
Przedmowa ..................................................................................... 11
Rozdział 1. Wstęp: programowanie obiektowe i wzorce projektowe .................... 15
Wzorce kontra cechy języków programowania .............................................................. 16
Czym właściwie jest wzorzec projektowy? .................................................................... 17
Czemu te wzorce mają w ogóle służyć? ......................................................................... 21
Rola wzorców w procesie projektowania ....................................................................... 22
Napięcia pomiędzy wzorcami a prostotą .................................................................. 23
Klasyfikacja wzorców .................................................................................................... 25
O programowaniu, ogólnie ....................................................................................... 26
Programowanie języka FORTRAN w Javie ............................................................. 28
Programowanie z otwartymi oczami ........................................................................ 31
Czym jest obiekt? ........................................................................................................... 32
Nonsens! .................................................................................................................. 32
Obiekt jest zbiorem zdolności .................................................................................. 33
Jak nie należy tego robić? ........................................................................................ 35
Jak zatem należy to robić „prawidłowo”? ................................................................ 38
Automat komórkowy ...................................................................................................... 42
Metody zwracające i ustawiające są złe ............................................................................. 48
Sam wizualizuj swoje dane ...................................................................................... 52
JavaBeans i Struts .................................................................................................... 54
Dostrajanie ............................................................................................................... 55
Życie bez metod get i set .......................................................................................... 56
Kiedy stosowanie akcesorów i mutatorów jest uzasadnione? .................................. 59
Podsumowanie problematyki metod zwracających i ustawiających ........................ 62
Rozdział 2. Programowanie z interfejsami i kilka wzorców konstrukcyjnych ........ 67
Dlaczego słowo kluczowe extends jest złe ..................................................................... 67
Interfejsy kontra klasy .................................................................................................... 69
Utrata elastyczności ................................................................................................. 69
Sprzęganie ................................................................................................................ 71
Problem ułomnej klasy bazowej ............................................................................... 73
Dziedziczenie wielokrotne ....................................................................................... 80
Szkielety ................................................................................................................... 81
Wzorce metody szablonowej i metody wytwórczej ................................................. 82
Podsumowanie problemu ułomnych klas bazowych ................................................ 88
 
6
Wzorce projektowe. Analiza kodu sposobem na ich poznanie
Kiedy stosowanie słowa extends jest uzasadnione ......................................................... 90
Eliminowanie relacji extends ......................................................................................... 93
Wzorce wytwórni i singletonów ............................................................................... 94
Singleton .................................................................................................................. 96
Problem z przetwarzaniem wielowątkowym w przypadku singletonów .................. 98
Blokowanie DCL (nigdy tego nie rób) ................................................................... 100
Zabijanie singletonu ............................................................................................... 101
Wytwórnia abstrakcji ............................................................................................. 103
Pomieszanie wzorców ............................................................................................ 107
Dynamiczne tworzenie obiektów w ramach wytwórni ........................................... 109
Polecenie i strategia ............................................................................................... 112
Podsumowanie ............................................................................................................. 116
Rozdział 3. Gra w życie .................................................................................. 119
Zdobywanie życia ........................................................................................................ 120
Sporządzanie mapy struktury życia .............................................................................. 122
Podsystem zegara: obserwator ..................................................................................... 125
Implementacja wzorca obserwatora: klasa Publisher ............................................. 132
Podsystem zegara: wzorzec wizytatora ........................................................................ 143
Podsystem menu: kompozyt ......................................................................................... 148
Podsystem menu: fasada i most .................................................................................... 156
Klasa MenuSite ............................................................................................................ 158
Klasy rdzenne ............................................................................................................... 177
Klasa Universe ....................................................................................................... 178
Interfejs Cell ........................................................................................................... 182
Klasa Resident ....................................................................................................... 185
Klasa Neighborhood .............................................................................................. 188
Mediator ....................................................................................................................... 197
Jeszcze jedno spojrzenie na wzorzec kompozytu ......................................................... 199
Prototyp .................................................................................................................. 201
Jeszcze raz o wzorcu projektowym kompozytu ............................................................ 205
Waga piórkowa ............................................................................................................ 210
Pula wagi piórkowej ............................................................................................... 215
Memento ...................................................................................................................... 217
Dokończenie ................................................................................................................. 220
Podsumowanie ............................................................................................................. 225
Rozdział 4. Implementacja osadzonego interpretera języka SQL ....................... 227
Wymagania .................................................................................................................. 228
Architektura .................................................................................................................. 229
Warstwa składowania danych ...................................................................................... 231
Interfejs Table ........................................................................................................ 231
Wzorzec mostu ....................................................................................................... 237
Tworzenie tabeli: wzorzec projektowy wytwórni abstrakcji .................................. 240
Tworzenie i zapisywanie tabel: pasywne iteratory
i wzorzec projektowy budowniczego ................................................................... 243
Wypełnianie tabeli danymi ..................................................................................... 255
Przeszukiwanie tabeli: wzorzec projektowy iteratora ............................................ 258
Implementacja transakcji (funkcji cofania)
przy użyciu wzorca projektowego polecenia ....................................................... 267
Modyfikowanie tabeli: wzorzec projektowy strategii ............................................ 273
Selekcja i złączenia ................................................................................................ 276
Rozmaitości ............................................................................................................ 282
Odmiany interfejsu Table: wzorzec dekoratora ...................................................... 290
Spis treści
7
Rozbudowa całego systemu o obsługę języka SQL ..................................................... 300
Struktura modułu języka SQL ................................................................................ 301
Podział danych wejściowych, ponowne omówienie wzorca wagi piórkowej
i analiza wzorca łańcucha odpowiedzialności ...................................................... 301
Skaner: wzorzec łańcucha odpowiedzialności ....................................................... 311
Klasa ParseFailure .................................................................................................. 319
Klasa Database ............................................................................................................. 321
Stosowanie klasy Database .................................................................................... 322
Wzorzec pośrednika ............................................................................................... 325
Zbiór tokenów i pozostałe stałe .............................................................................. 330
Wzorzec interpretatora ................................................................................................. 337
Obsługiwana część języka SQL ............................................................................. 337
Analiza funkcjonowania interpretera języka SQL .................................................. 359
Warstwa JDBC ............................................................................................................. 366
Wzorzec stanu i klasa JDBCConnection ...................................................................... 373
Wyrażenia .............................................................................................................. 379
Wzorzec adaptera (zbiory wynikowe) .................................................................... 380
Wykańczanie kodu ................................................................................................. 385
Kiedy mosty nie zdają egzaminu ............................................................................ 386
Uff! ............................................................................................................................... 387
Dodatek A Krótki podręcznik o wzorcach projektowych ................................... 389
Wzorce konstrukcyjne .................................................................................................. 391
Wytwórnia abstrakcji ............................................................................................. 392
Budowniczy ........................................................................................................... 394
Metoda wytwórcza ................................................................................................. 396
Prototyp .................................................................................................................. 398
Singleton ................................................................................................................ 400
Wzorce strukturalne ..................................................................................................... 403
Adapter ................................................................................................................... 404
Most ....................................................................................................................... 406
Kompozyt ............................................................................................................... 408
Dekorator ............................................................................................................... 410
Fasada .................................................................................................................... 412
Waga piórkowa ...................................................................................................... 414
Pośrednik ............................................................................................................... 416
Wzorce czynnościowe .................................................................................................. 419
Łańcuch odpowiedzialności ................................................................................... 420
Polecenie ................................................................................................................ 422
Interpretator ............................................................................................................ 424
Iterator .................................................................................................................... 426
Mediator ................................................................................................................. 428
Memento ................................................................................................................ 430
Obserwator (publikowanie-abonament) ................................................................. 432
Stan ........................................................................................................................ 434
Strategia ................................................................................................................. 436
Metoda szablonowa ................................................................................................ 438
Wizytator ............................................................................................................... 440
Skorowidz ..................................................................................... 443
Rozdział 1.
Wstęp: programowanie
obiektowe
i wzorce projektowe
W zwykłych okolicznościach tego typu książka powinna się rozpoczynać cytatem z Chri-
stophera Alexandra, architekta (budynków, nie oprogramowania), który jako pierwszy
wprowadził termin wzorca projektowego. Odkryłem, że chociaż Alexander jest wspa-
niałym człowiekiem i pisze naprawdę świetne książki, jego dzieła mogą być zrozumiałe
nie dla wszystkich, zatem pozwolę sobie w tym miejscu pominąć „obowiązkowy” cytat.
Warto jednak pamiętać, że tezy prezentowane przez Alexandra stanowią podstawowe
źródło współczesnych koncepcji wzorców projektowych.
Podobnie, prawdziwym przełomem w kwestii zastosowań wzorców projektowych
w świecie oprogramowania była książka Design Patterns: Elements of Reusable Object-
-Oriented Software autorstwa Gammy, Helma, Johnsona i Vlissidesa (Addison-Wesley,
1995). (Czterej autorzy tej książki są przez większość projektantów dowcipnie nazywani
Bandą Czworga .) Moja książka nie mogłaby powstać, gdyby nie powstała książka Bandy
Czworga , zatem ja sam (podobnie jak chyba wszyscy programiści stosujący techniki
obiektowe) jestem winien autorom tej książki ogromne podziękowania. Tak czy ina-
czej, wspomniana przeze mnie książka jest akademicką prezentacją wzorców, która dla
większości początkujących programistów z natury rzeczy będzie po prostu niezrozu-
miała. Postanowiłem podjąć ryzyko zatracenia tej akademickiej precyzji i stworzyć coś
bardziej przystępnego.
Zgłoś jeśli naruszono regulamin