Visual Basic. Wzorce projektowe

Podobne dokumenty
Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Wprowadzenie do programowania aplikacji mobilnych

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie obiektowe

Java. Wzorce projektowe

Zaawansowane programowanie w C++ (PCP)

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Zaawansowane programowanie obiektowe - wykład 5

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne

Smarty PHP. Leksykon kieszonkowy

Testowanie oprogramowania Wzorce projektowe

Technologia Programowania 2016/2017 Wykład 4

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Wzorce projektowe. dr inż. Marcin Pietroo

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Technologia Programowania 2016/2017 Wykład 5

problem w określonym kontekście siły istotę jego rozwiązania

Projektowanie obiektowe Wzorce projektowe

Wzorce projektowe Michał Węgorek

Program szkolenia: Wzorce projektowe w C++

Diagramy klas. dr Jarosław Skaruz

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Wzorce projektowe i refaktoryzacja

Matematyka z komputerem dla gimnazjum

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Programowanie obiektowe

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Programowanie obiektowe

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

Wypożyczalnia VIDEO. Technologie obiektowe

Wprowadzenie (17) Część I. Makra w Excelu - podstawy (23)

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

UML [ Unified Modeling Language ]

AutoCAD Pierwsze kroki

EXSO-CORE - specyfikacja

Wzorce projektowe. dr inż. Marcin Pietroo

Szczegółowy opis zamówienia:

Programowanie obiektowe

Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33

Wzorce projektowe / Eric Freeman [et al.]. Gliwice, cop Spis treści

KATEGORIA OBSZAR WIEDZY

Programowanie obiektowe

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Programowanie obiektowe

Programowanie MorphX Ax

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

P³atnik. Przewodnik IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG ONLINE

Programowanie obiektowe

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

Język Java część 2 (przykładowa aplikacja)

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Programowanie obiektowe

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

OpenOffice.ux.pl 2.0. Æwiczenia praktyczne

Wykład 8: klasy cz. 4

OpenOfficePL. Zestaw szablonów magazynowych. Instrukcja obsługi

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Analiza i projektowanie aplikacji Java

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PRZEWODNIK PO PRZEDMIOCIE

Programowanie Zespołowe

Wprowadzenie do projektu QualitySpy

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Wykład 5: Klasy cz. 3

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

C++. Æwiczenia zaawansowane

Spis treści 3. Spis treści

Projektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)

PHP: bazy danych, SQL, AJAX i JSON

MySQL. Æwiczenia praktyczne

Scenariusz lekcji. wymienić podstawowe typy danych omówione na lekcji; wymienić funkcje konwertujące typy danych, omawiane na lekcji.

1 TEMAT LEKCJI: 2 CELE LEKCJI: 3 METODY NAUCZANIA 4 ŚRODKI DYDAKTYCZNE. Scenariusz lekcji. 2.1 Wiadomości: 2.2 Umiejętności: Scenariusz lekcji

Programowanie obiektowe

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Wzorce projektowe [ wstęp ]

Informatyka Europejczyka. Zeszyt æwiczeñ dla szko³y podstawowej. Czêœæ II

Wykład 3 Składnia języka C# (cz. 2)

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Plan nauczania informatyki Opracował: mgr Daniel Starego

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Podstawy Programowania Obiektowego

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Programowanie w języku Java WYKŁAD

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C


5. Arkusz kalkulacyjny Excel 205

Transkrypt:

IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOŒCIACH ZAMÓW CENNIK CZYTELNIA SPIS TREŒCI KATALOG ONLINE DODAJ DO KOSZYKA FRAGMENTY KSI EK ONLINE Visual Basic. Wzorce projektowe Autorzy: James W. Cooper T³umaczenie: Jaromir Senczyk Tytu³ orygina³u: Visual Basic. Design Patterns. VB 6.0 and VB.NET ISBN: 83-7197-710-7 Liczba stron: 440 Ta ksi¹ ka jest praktycznym podrêcznikiem tworzenia programów w jêzyku Visual Basic (w wersji 6 oraz.net) wykorzystuj¹cych wzorce projektowe. Mo e s³u yæ tak e jako krótkie wprowadzenie do programowania w nowej wersji.net jêzyka Visual Basic. Wzorce projektowe omówiono w niej w szeregu krótkich rozdzia³ów, z których ka dy przedstawia jeden wzorzec i ilustruje jego wykorzystanie za pomoc¹ jednego lub wiêcej kompletnych i dzia³aj¹cych programów z okienkowym interfejsem u ytkownika. Ka dy rozdzia³ zawiera te diagramy UML ilustruj¹ce powi¹zania pomiêdzy klasami wystêpuj¹cymi w implementacji wzorca. Dziêki niniejszej ksi¹ ce czytelnik dowie siê, e wzorce projektowe stanowi¹ powszechnie stosowany sposób organizacji obiektów w programach w celu ich uproszczenia i u³atwienia póÿniejszych modyfikacji. Wzorce projektowe wprowadzaj¹ tak e zasób nowych pojêæ, dziêki któremu ³atwiej mo na opisaæ konstrukcje tworzonych programów. Programiœci w trakcie zapoznawania siê z tematyk¹ wzorców projektowych doznaj¹ zwykle momentu olœnienia odkrywaj¹c potêgê poznawanego wzorca. Moment ten oznacza, e w³aœnie uœwiadomili sobie, w jaki sposób mog¹ wykorzystaæ dany wzorzec w swojej pracy. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl

Spis treści Przedmowa... 13 Część I Programowanie obiektowe w języku Visual Basic...15 Rozdział 1. Czym są wzorce projektowe?... 17 Definicja wzorców projektowych...w...18 Proces uczenia się...w...w...20 Studiowanie wzorców projektowych...w...21 Uwagi na temat podejścia obiektowego...w...21 Wzorce projektowe w Visual Basicu...w...22 Jak zorganizowana jest ta książka?...w...22 Rozdział 2. Diagramy UML... 23 Dziedziczenie...w...w...2 4 Interfejsy...w...w......25 Kompozycja...w...w...26 Adnotacje...w...w....27 Diagramy UML program WithClass...w...27 Pliki projektów Visual Basica...w...28 Rozdział 3. Klasy i obiekty w Visual Basicu... 29 Prosty program konwersji temperatur...w...29 Tworzenie klasy Temperature...w...30 Konwersja na stopnie Kelvina...w...32 Przesunięcie decyzji do klasy Temperature...w...32 Zastosowanie klas do konwersji wartości i formatu...w...34 Obsługa niedozwolonych wartości...w...36 Klasa String Tokenizer...w...36 Klasy i obiekty...w...w...3 8 Zawieranie klas...w...w.40 Inicjalizacja klasy...w...w...4 0 Klasy i metody typu Property...w...41 Kolejny przykład interfejsu klasy woltomierz...w...43 Klasa vbfile...w...w... 43 Styl programowania w Visual Basicu...w...45 Podsumowanie...w...w...46 Rozdział 4. Programowanie obiektowe... 47 Tworzenie obiektów w Visual Basicu...w...48 Tworzenie instancji obiektów...w...49 Program do pomiaru odległości...w...49 Metody wewnątrz obiektów...w...50 Zmienne...w...w....50

4 Visual Basic. Wzorce projektowe Przekazywanie parametrów przez referencję i przez wartość...51 Żargon obiektowy...w...w...51 Rozdział 5. Tworzenie kontrolek w Visual Basicu... 53 Podświetlone pole tekstowe...w...53 Zmiana wymiarów kontrolki...w...55 Testowanie kontrolki HiText...w...55 Właściwości i metody kontrolki...w...56 Kompilacja...w...w... 57 Podsumowanie...w...w...57 Rozdział 6. Dziedziczenie i interfejsy... 59 Interfejsy...w...w......59 Symulator inwestycji...w...w60 Implementacja symulatora...w...61 Kiedy użyć interfejsu?...w...62 Metody wspólne...w...w...65 Interfejsy ukryte...w...w...6 6 Podsumowanie...w...w...67 Rozdział 7. Wprowadzenie do języka Visual Basic.NET... 69 Różnice w składni Visual Basic.NET...w...69 Ulepszona składnia funkcji...w...70 Deklaracje zmiennych i ich zakresy...w...71 Obiekty w Visual Basic.NET...w...72 Opcje kompilatora...w...w...73 Zmienne numeryczne w Visual Basic.NET...w...74 Właściwości w języku Visual Basic wersja 6 i VB.NET...74 Skrócona notacja operacji przypisania...w...75 Języki prekompilowane i zarządzanie pamięcią...w...76 Klasy w Visual Basic.NET...w...76 Tworzenie aplikacji w środowisku Visual Basic.NET...78 Najprostszy program okienkowy w Visual Basic.NET...79 Zastosowanie dziedziczenia...w...81 Konstruktory...w...w...8 2 Programowanie grafiki w Visual Basic.NET...w...84 Podpowiedzi i kursory...w...85 Przeciążanie metod...w...w..85 Dziedziczenie w języku Visual Basic.NET...w...86 Przestrzenie nazw...w...w...87 Klasa Square...w...w...88 Dostęp do składowych klasy...w...89 Zastępowanie metod w klasach pochodnych...w...89 Przeciążanie i przesłanianie...w...90 Zastępowanie kontrolek...w...92 Interfejsy...w...w......93 Podsumowanie...w...w...94 Rozdział 8. Tablice, pliki oraz wyjątki w Visual Basic.NET... 95 Tablice...w...w......95 Kolekcje...w...w.....97 Klasa ArrayList...w...w.97 Tablice z kodowaniem mieszającym...w...98 Klasa SortedList...w...w98 Wyjątki...w...w......98 Obsługa wielu wyjątków...w...99

Spis treści 5 Wywoływanie wyjątków...w...100 Operacje na plikach...w...w100 Klasa File...w...w...101 Odczyt danych z pliku tekstowego...w...102 Zapis danych w pliku tekstowym...w...102 Wyjątki a operacje na plikach...w...102 Sprawdzanie osiągnięcia końca pliku...w...103 Klasa FileInfo...w...w...10 3 Klasa vbfile...w...w...10 4 Część II Wzorce konstrukcyjne...107 Rozdział 9. Wzorzec Simple Factory... 109 Sposób działania wzorca Simple Factory...w...109 Przykładowy program...w...110 Klasy pochodne...w...w...110 Klasa Simple Factory...w...111 Użycie fabryki...w...w.112 Implementacja fabryki w Visual Basic.NET...w...113 Fabryki w obliczeniach matematycznych...w...114 Zagadnienia do przemyślenia...w...115 Rozdział 10. Wzorzec Factory Method... 117 Klasa Swimmer...w...w...120 Klasa Events i jej klasy pochodne...w...120 Rozstawienie bezpośrednie...w...122 Rozstawienie okalające...w...123 Program rozstawiający...w...124 Jeszcze jedno zastosowanie fabryki...w...124 Program rozstawiający w Visual Basic.NET...w...125 Kiedy należy używać wzorca Factory Method?...w...127 Zagadnienia do przemyślenia...w...128 Rozdział 11. Wzorzec Abstract Factory... 129 Abstract Factory i projektowanie ogrodów...w...129 Interfejs użytkownika programu Gardener...w...131 Abstract Factory w Visual Basic.NET...w...133 PictureBox...w...w...135 Obsługa zdarzeń wyboru...w...135 Rozbudowa programu o kolejne klasy...w...137 Konsekwencje stosowania wzorca Abstract Factory...w137 Zagadnienia do przemyślenia...w...137 Rozdział 12. Wzorzec Singleton... 139 Wzorzec Singleton i metody statyczne...w...139 Obsługa błędów...w...w...141 Globalny punkt dostępu...w...141 Kontrolka MSComm i wzorzec Singleton...w...142 Porty dostępne w systemie...w...143 Wzorzec Singleton w Visual Basic.NET...w...144 Zastosowanie konstruktora o dostępie prywatnym...145 Obsługa błędów...w...145 Program SpoolDemo...w...146 Globalny punkt dostępu...w...148 Inne konsekwencje wzorca Singleton...w...148 Zagadnienia do przemyślenia...w...148

6 Visual Basic. Wzorce projektowe Rozdział 13. Wzorzec Builder... 149 Program do śledzenia inwestycji...w...150 Zastosowanie wzorca Builder...w...151 Budowniczy okna listy wyboru...w...153 Budowniczy okna pól wyboru...w...154 Implementacja wzorca Builder w Visual Basic.NET...155 Klasa StockFactory...w...156 Klasa CheckChoice...w...157 Klasa ListboxChoice...w...158 Kolekcje obiektów klasy Items...w...159 Ostateczna wersja programu...w...160 Konsekwencje zastosowania wzorca Builder...w...160 Zagadnienia do przemyślenia...w...162 Rozdział 14. Wzorzec Prototype... 163 Klonowanie obiektów w Visual Basicu wersja 6...w...164 Zastosowanie prototypu...w...164 Zastosowanie wzorca Prototype...w...167 Dodatkowe metody w klasach pochodnych...w...168 Różne klasy o wspólnym interfejsie...w...169 Menedżer prototypów...w...171 Wzorzec Prototype w Visual Basic.NET...w...172 Konsekwencje stosowania wzorca Prototype...w...175 Zagadnienia do przemyślenia...w...176 Podsumowanie wzorców konstrukcyjnych...w...176 Część III Wzorce strukturalne...o177 Rozdział 15. Wzorzec Adapter... 179 Przenoszenie danych pomiędzy listami...w...179 Zastosowanie MSFlexGrid...w...180 Wykorzystanie TreeView...w...183 Adapter obiektów...w...183 Adaptery w Visual Basic.NET...w...184 Adapter kontrolki TreeView w VisualBasic.NET...w...186 Zastosowanie DataGrid...w...187 Adapter klas...w...w...18 8 Adaptery podwójne...w...w189 Adaptery obiektów i adaptery klas w Visual Basic.NET...190 Adaptery dynamiczne...w...190 Adaptery w języku Visual Basic...w...190 Zagadnienia do przemyślenia...w...190 Rozdział 16. Wzorzec Bridge... 191 Klasy vislist...w...w...19 4 Diagram klas...w...w...194 Rozbudowa mostu...w...w..195 Kontrolki ActiveX jako mosty...w...196 Wzorzec Bridge w Visual Basic.NET...w...198 Klasa ProductList...w...198 Klasa ProductTable...w...199 Wczytywanie danych...w...200 Zamiana stron mostu...w...201 Konsekwencje stosowania wzorca Bridge...w...202 Zagadnienia do przemyślenia...w...202

Spis treści 7 Rozdział 17. Wzorzec Composite... 203 Implementacja kompozytu...w...204 Obliczanie wynagrodzeń...w...204 Klasa Employee...w...w...205 Klasa Subords...w...w...207 Klasa Boss...w...w...2 08 Tworzymy drzewo pracowników...w...209 Awans pracownika...w...w.211 Listy dwukierunkowe...w...212 Konsekwencje stosowania wzorca Composite...w...213 Uproszczony wzorzec Composite...w...213 Kompozyty w języku Visual Basic...w...214 Wzorzec Composite w Visual Basic.NET...w...214 Wyliczenie...w...w...215 Konstruktory klasy Boss...w...216 Inne zagadnienia implementacji wzorca...w...217 Zagadnienia do przemyślenia...w...217 Rozdział 18. Wzorzec Decorator... 219 Dekorator CoolButton...w...219 Zastosowanie dekoratora...w...222 Kontrolki ActiveX jako dekoratory...w...225 Dekorator w Visual Basic.NET...w...225 Dekoratory niewizualne...w...227 Dekoratory, adaptery i kompozyty...w...228 Konsekwencje stosowania wzorca Decorator...w...228 Zagadnienia do przemyślenia...w...228 Rozdział 19. Wzorzec Facade... 229 Czym jest baza danych?...w...229 Uzyskiwanie informacji z bazy danych...w...231 Systemy baz danych...w...231 ODBC...w...w... 232 Połączenia do baz danych w języku Visual Basic...w...232 Struktura dostępu do bazy danych...w...232 Klasa DBase...w...w...233 Budujemy fasadę...w...w...235 Klasa Stores...w...w...237 Tworzymy tabele Stores oraz Foods...w...239 Tabela Price...w...w...2 39 Zapytanie o cenę...w...241 Podsumowanie wzorca Facade...w...242 Wykorzystanie interfejsu ADO w języku Visual Basic...243 Połączenia ADO...w...243 Przeszukiwanie i dodawanie rekordów...w...244 Wykorzystanie rozszerzeń interfejsu ADO...w...244 Klasa DBase wykorzystująca ADO...w...245 Dostęp do baz danych w Visual Basic.NET...w...248 Wykorzystanie ADO.NET...w...249 Połączenie do bazy danych...w...249 Odczyt danych z bazy...w...249 Wykonanie zapytania...w...250 Usuwanie danych z tabeli...w...250 Dodawanie rekordów do tabeli za pomocą ADO.NET...251 Fasada ADO w Visual Basic.NET...w...252 Klasa DBTable...w...w253

8 Visual Basic. Wzorce projektowe Klasy Stores i Foods...w...254 Klasa Prices...w...w...2 56 Załadowanie danych do bazy...w...257 Końcowa postać programu...w...259 W jaki sposób działa fasada?...w...260 Konsekwencje stosowania wzorca Facade...w...260 Zagadnienia do przemyślenia...w...260 Rozdział 20. Wzorzec Flyweight... 261 Omówienie...w...w...262 Przykład zastosowania wzorca Flyweight...w...262 Diagram klas...w...w...265 Wybór folderu...w...w.265 Implementacja wzorca Flyweight w języku Visual Basic.NET...267 Zastosowanie wzorca Flyweight w języku Visual Basic...270 Obiekty współdzielone...w...271 Obiekty kopiowane podczas zapisu...w...271 Zagadnienia do przemyślenia...w...271 Rozdział 21. Wzorzec Proxy... 273 Przykładowy program...w...274 Implementacja wzorca Proxy w języku Visual Basic.NET...275 Wzorzec Proxy w języku Visual Basic...w...277 Kopiowanie podczas zapisu...w...277 Porównanie z innymi wzorcami...w...278 Zagadnienia do przemyślenia...w...278 Podsumowanie wzorców strukturalnych...w...278 Część IV Wzorce czynnościowe...279 Rozdział 22. Wzorzec Chain of Responsibility... 281 Zastosowania wzorca...w...282 Przykładowy program...w...282 Listy...w...w......285 Implementacja systemu pomocy...w...287 Obsługa polecenia pomocy...w...289 Łańcuch czy drzewo?...w...290 Wzorzec Chain of Responsibility w Visual Basic.NET...291 Rodzaje obsługiwanych żądań...w...293 Zastosowanie wzorca w języku Visual Basic...w...293 Konsekwencje stosowania wzorca Chain of Responsibility...294 Zagadnienia do przemyślenia...w...294 Rozdział 23. Wzorzec Command... 295 Motywacja...w...w...29 5 Polecenie jako obiekt...w...296 Konstrukcja obiektów Command...w...297 Tablice poleceń...w...w...298 Konsekwencje stosowania wzorca Command...w...301 Implementacja funkcji Undo...w...301 Wzorzec Command w Visual Basic.NET...w...305 Interfejs CommandHolder...w...307 Implementacja funkcji Undo w Visual Basic.NET...w..310 Wzorzec Command w języku Visual Basic...w...312 Zagadnienia do przemyślenia...w...312

Spis treści 9 Rozdział 24. Wzorzec Interpreter... 313 Motywacja...w...w...31 3 Zastosowania...w...w...313 Przykład prostego raportu...w...314 Interpreter języka...w...w...315 Obiekty używane podczas parsowania...w...316 Redukcja tokenów do operacji...w...319 Implementacja wzorca Interpreter...w...320 Drzewo składni...w...w321 Implementacja wzorca Interpreter w Visual Basicu wersja 6...324 Obiekty używane podczas parsowania...w...326 Konsekwencje stosowania wzorca Interpreter...w...327 Zagadnienia do przemyślenia...w...328 Rozdział 25. Wzorzec Iterator... 329 Motywacja...w...w...32 9 Przykład iteratora w Visual Basicu wersja 6...w...330 Pobranie iteratora...w...331 Iteratory filtrujące...w...w..332 Wyliczenie filtrowane...w...332 Iteratory w Visual Basic.NET...w...333 Konsekwencje stosowania wzorca Iterator...w...335 Rozdział 26. Wzorzec Mediator... 337 Przykładowy system...w...337 Interakcje pomiędzy elementami interfejsu...w...338 Przykładowy program...w...339 Inicjalizacja systemu...w...342 Mediatory i obiekty poleceń...w...342 Wzorzec Mediator w języku Visual Basic.NET...w...342 Inicjalizacja...w...w...344 Obsługa zdarzeń dla nowych kontrolek...w...345 Konsekwencje stosowania wzorca Mediator...w...346 Mediator z pojedynczym interfejsem...w...347 Kwestie implementacji...w...347 Rozdział 27. Wzorzec Memento... 349 Motywacja...w...w...34 9 Implementacja...w...w...350 Przykładowy program...w...350 Ostrzeżenie...w...w...356 Obiekty poleceń interfejsu użytkownika...w...356 Obsługa pozostałych zdarzeń...w...357 Implementacja wzorca Memento w języku Visual Basic.NET...358 Konsekwencje stosowania wzorca Memento...w...360 Zagadnienia do przemyślenia...w...360 Rozdział 28. Wzorzec Observer... 361 Obserwacja zmian kolorów...w...362 Implementacja wzorca Observer w języku Visual Basic.NET...364 Inne rodzaje komunikatów...w...366 Konsekwencje stosowania wzorca Observer...w...366 Zagadnienia do przemyślenia...w...367

10 Visual Basic. Wzorce projektowe Rozdział 29. Wzorzec State... 369 Przykładowy program...w...369 Przełączanie stanów...w...373 Interakcja pomiędzy klasami Mediator i StateManager...374 Klasa FillState...w...w...37 7 Lista wycofań operacji...w...378 Wypełnianie okręgów w Visual Basicu wersja 6...380 Implementacja wzorca Pattern w języku Visual Basic.NET...381 Mediator klasa wszechwiedząca?...w...385 Konsekwencje stosowania wzorca State...w...386 Przejścia pomiędzy stanami...w...386 Zagadnienia do przemyślenia...w...386 Rozdział 30. Wzorzec Strategy... 387 Motywacja...w...w...38 7 Przykładowy program...w...388 Kontekst...w...w... 389 Polecenia programu...w...w390 Strategie dla wykresu liniowego i wykresu słupkowego...390 Tworzenie wykresów w języku Visual Basic...w...391 Implementacja wzorca Strategy w języku Visual Basic.NET...392 Konsekwencje stosowania wzorca Strategy...w...396 Rozdział 31. Wzorzec Template Method... 397 Motywacja...w...w...39 7 Rodzaje metod w klasie bazowej...w...398 Przykładowy program...w...399 Klasa StdTriangle...w...400 Klasa IsoscelesTriangle...w...401 Program rysujący trójkąty...w...402 Szablony i wywołania zwrotne...w...403 Konsekwencje stosowania wzorca Template Method...404 Rozdział 32. Wzorzec Visitor... 405 Motywacja...w...w...40 5 Zastosowania wzorca Visitor...w...406 Przykładowy program...w...407 Wizytowanie obiektów jednej klasy...w...408 Wizytowanie obiektów wielu klas...w...409 Kierownicy są także pracownikami!...w...410 Uniwersalność wizytatora...w...411 Podwójne wywołania...w...412 Po co to wszystko?...w...w.412 Wizytowanie serii obiektów...w...413 Implementacja wzorca Visitor w Visual Basicu wersja 6...413 Konsekwencje stosowania wzorca Visitor...w...416 Zagadnienia do przemyślenia...w...416

Spis treści 11 Dodatki...o...417 Dodatek A Przykłady na serwerze FTP... 419 Bibliografia... 423 Skorowidz... 425

Rozdział 28. Wzorzec Observer Rysunek 28.1. Prezentacja danych za pomocą listy oraz w postaci graficznej W tym rozdziale przedstawimy, w jaki sposób zastosoiwać wzorzec Observer do prezentacji tych samych danych jednocześnie w kilku różnych formach. Jest to częste wymaganie w programach pisanych dla systemów posiadających okienkowy interfejs użytkownika. Na przykład program umożliwiający analizę cen akcji może prezentować dane za pomocą wykresu, tabeli i listy. Każda zmiana cen akcji powinna automatycznie spowodować odpowiednią zmianę we wszystkich formach iprezentacji. Do takiego sposobu działania przyzwyczaiły nas popularne programy, jak na przykład arkusz kalkulacyjny Excel. Z drugiej strony system Windows nie zawiera żadnego wsparcia umożliwiającego jego łatwą implementację. Gdyby nawet tak było, to i tak programowanie z wykorzystaniem API systemu Windows w języku C jest dość skomplikowane. Tymczasem w programach pisanych w języku Visual Basic możemy osiągnąć pożądany efekt stosując wzorzec Observer. Wzorzec Observer zakłada, że osobne obiekty reprezentują dane programu, a osobne zajmują się ich prezentacją, oraz że te drugie obserwują zmiany zachodzące w danych. Sytuację tę ilustruje schemat przedstawiony na rysunkiu 28.1. Implementując wzorzec Observer, dane określamy zwykle jako podmiot (ang. Subject), a każdą z form jego prezentacji mianem obserwatora (ang. Observer). Każdy z obserwatorów zgłasza podmiotowi zainteresowanie jego danymi poprzez wywołanie metody podmiotu. Każdy z obserwatorów musi też posiadać znany podmiotowi interfejs, którego metody podmiot wywołuje, gdy zajdzie zmiana w jego danych. Oba te interfejsy możemy zdefiniować na przykład jak poniżej.

362 Część IV Wzorce czynnościowe Korzyścią płynącą ze zdefiniowania tych interfejsów jest to, że mogą je łatwo implementować praktycznie dowolne klasy bez względu na ich rizeczywistą funkcjonalność. Obserwacja zmian kolorów Napiszmy zatem prosty program ilustrujący wykorzystanie opisanej koncepcji. Jego interfejs użytkownika zawierać będzie trzy przyciski wyboru, jak przedstawiono to na rysunku 28.2. Rysunek 28.2. Program umożliwiający zmianę danych o kolorach Klasa okna programu będzie implementować interfejs. Oznacza to, że musi udostępnić metodę umożliwiającą obserwatorom zgłoszenie zainteresowania przechowywanymi przez nią danymi. Metoda będzie umieszczać kolejnego obserwatora w kolekcji. W programie utworzymy dwa obiekty reprezentujące obserwatorów. Jeden będzie pokazywał wybrany kolor i jego nazwę, a drugi doda kolor do listy.

Rozdział 28. Wzorzec Observer 363 Tworząc okno zgłosimy jego zainteresowanie danymi głównego okna programu. Okno prezentujące listę wybranych dotąd kolorów będzie także pełnić rolę obserwatora. Reprezentująca je klasa pokazana jest poniżej. Wybór jednego z kolorów za pomocą przycisku w głównym ioknie programu spowoduje wywołanie metody dla każdego zarejestrowanego obserwatora. W przypadku okna spowoduje to zmianę koloru wypełniającego obszar kontrolki typu, a okno doda nazwę wybranego koloru do swojej listy. Działanie programu pokazano na rysunku 28.3.

364 Część IV Wzorce czynnościowe Rysunek 28.3. Wybór koloru w głównym oknie programu prezentowany jednocześnie w formie graficznej i na liście. Efekt zastosowania wzorca Observer Implementacja wzorca Observer w języku Visual Basic.NET Podobnie jak w poprzedniej wersji programu, zdefiniujemy najpierw oba interfejsy wzorca Observer. Główne okno programu również będzie zawierać trzy przyciski wyboru i reprezentować podmiot zawiadamiający obserwatorów o zmianach. Aby uprościć program, wszystkie trzy przyciski otrzymają wspólną metodę obsługi zdiarzeń. Metoda ta przesyła obserwatorom łańcuch znaków opisująicy wybrany przycisk.

Rozdział 28. Wzorzec Observer 365 Klasa reprezentująca obserwatora dodającego nazwę koloru do listy jest praktycznie taka sama jak w poprzedniej wersji programu. Natomiast klasa reprezentująca obserwatora wypełniającego swoje okno kolorem będzie nieco inna. Tekst prezentujący nazwę wybranego koloru pokażemy bezpośrednio w kodzie metody obsługi zdarzenia odrysowania, kolor tła zmienimy w kodzie metody.

366 Część IV Wzorce czynnościowe Inne rodzaje komunikatów Zastanówmy się teraz, jakie rodzaje komunikatów może wysyłać podmiot do obserwatorów? W naszym przykładowym programie rolę komunikatu spełniała etykieta przycisku zawierająca nazwę koloru. Nie zawsze jednak obserwator będzie oczekiwał komunikatu w postaci łańcucha znaków. Łatwo też zauważyć, że w naszym przykładzie dokonujemy dla komunikatu dwu prostych konwersji danych: 1. Pobieramy etykietę przycisku i wysyłamy ją jako ciąg znaków do obserwatora. 2. Obserwator zamienia ciąg znaków na odpowiedni kolor. W bardziej złożonych programach obserwatorzy mogą wymagać różnych, często złożonych komunikatów. Każdy z nich może dokonywać wtedy niezbędnej konwersji, ale w tym celu lepiej będzie zastosować wzorzec Adapter. Innym problemem związanym z zastosowaniem wzorca Observer będzie obserwacja podmiotu, którego dane mogą zmieniać się w różny sposób. Na przykład pozycje listy mogą być dodawane lub usuwane, ale mogą być też modyfikowane. W takim przypadku musimy wysyłać do obserwatorów różne rodzaje komunikatów. Można też wysyłać nadal jeden rodzaj komunikatu, a w odpowiedzi obserwator zapyta o charakter zaistniałych zmian. Rysunek 28.4. Klasy implementujące interfejsy obserwatora i podmiotu w przykładowym programie wykorzystującym wzorzec Observer Konsekwencje stosowania wzorca Observer Wzorzec Observer wprowadza abstrakcyjne powiązania z podmiotem. Podmiot nie zna szczegółów działania żadnego z obserwatorów. Może więc się okazać, że wobec wystąpienia szeregu przyrostowych zmian danych podmiotu zostanie wysłana do obserwatora

Rozdział 28. Wzorzec Observer 367 seria powtarzających się komunikatów, których obsługa wiązać się będzie ze zbyt dużym kosztem. Rozwiązaniem problemu będzie oczywiście wprowadzenie pewnej dodatkowej logiki, tak by informacje o zmianach nie były wysyłanie zbyt wcześnie lub zbyt często. Inny problem występuje w przypadku, gdy zmiana danych podmiotu dokonywana jest przez pewne części kodu lub systemu zwane dalej klientami. Pojawia się wtedy pytanie, kto powinien inicjować wysłanie komunikatu o zmianach. Jeśli odpowiedzialny będzie za to, jak dotychczas, sam podmiot, to w przypadku wykonywania zmian przez kilku klientów znowu mogą pojawić się serie komunikatów o nieznacznych w istocie zmianach. Można ich uniknąć, jeśli to klient będzie informował podmiot, że należy wysłać komunikat. Jeśli jednak któryś z klientów zapomni o poinformowaniu podmiotu, to program nie będzie już działał zgodnie z oczekiwaniami. Stosując wzorzec Observer można także zdefiniować kilka rodzajów komunikatów. W tym celu interfejs obserwatora może definiować kilka różnych metod powiadomienia. Dzięki temu w pewnych sytuacjach obserwator będzie mógł ignorować niektóre z nich. Zagadnienia do przemyślenia Wersja przykładowego programu, którą napisaliśmy korzystając z wersji 6 języka Visual Basic różni się w działaniu od wersji napisanej w Visual Basic.NET tym, że zamknięcie któregokolwiek z okien obserwatorów nie powoduje zamknięcia pozostałych okien i zakończenia pracy programu. W jaki sposób można zastosować dodatkowego obserwatora, aby uzyskać efekt w postaci zakończenia proigramu?