Zaawansowane metody programowania – Wykład V dr inż. Wojciech Tarnawski e-mail:wojciech.tarnawski@pwr.wroc.pl www.zssk.pwr.wroc.pl
Plan wykładu: Wzorce projektowe Analiza przykładowych projektów – część „interaktywna”
Pojęcie wzorca projektowego Wzorce projektowe „funkcjonują” w praktyce programistycznej od drugiej połowy lat 90. ubiegłego wieku (Design Patterns: Elements of Reusable Object-Oriented Software, E. Gamma, R. Helm, R. Johnson, J. Vlissides) W dziedzinie zwanej inżynierią oprogramowania stanowią abstrakcyjny opis zależności pomiędzy klasami ( pojęciami abstrakcyjnymi) W efekcie stosowania wzorców projektowych uzyskujemy pewną standaryzację kodu, tym samym czyniąc go bardziej zrozumiałym, efektywniejszym i mniej zawodnym
Klasyfikacja wzorców projektowych Wzorce konstrukcyjne – do pozyskiwania obiektów zamiast bezpośredniego tworzenia obiektów klas (np. Dekorator, Budowniczy, Singleton) Wzorce strukturalne – pomagające łączyć obiekty w większe struktury udostępniając interfejs do ich obsługi (np. Adapter, Fasada) Wzorce czynnościowe – definiujące komunikację pomiędzy obiektami oraz kontrolujące przepływ danych w złożonej aplikacji (np. Obserwator,Strategia)
Wzorzec konstrukcyjny: Budowniczy Wzorzec ten pozwala na rozdzielenie skomplikowanej struktury klasy od jej reprezentacji, dzięki czemu proces konstrukcji może tworzyć różne reprezentacje Podstawowe elementy wzorca: interfejs budowniczego do tworzenia obiektu (Builder) budowniczy konstruujący i łączący części produktu dostarczonego przez klasę, a także interfejs dostępu do budowanego produktu (Concrete Builder) kierownik konstruujący obiekt przez interfejs budowniczego (Director) konstruowany produkt (Product)
Wzorzec konstrukcyjny: Singleton Singleton to klasa, która może mieć tylko jedną instancję (obiekt) class Singleton { private Singleton() { } private static Singleton S; public static Singleton getInstance() if (S == null) S = new Singleton(); return S; } Singleton a = new Singleton(); Singleton b = Singleton.getInstance(); Singleton c = Singleton.getInstance();
Wzorzec strukturalny: Adapter Zadaniem tego wzorca jest przetworzenie interfejsu danej klasy w inny interfejs, którego oczekuje Klient Adapter umożliwia współpracę klasom o niekompatybilnych interfejsach
Wzorzec strukturalny: Fasada Wzorzec ten jest pomyślany jako środek dostępu do złożonego systemu prezentujący na zewnątrz uproszczony lub uporządkowany interfejs programistyczny. Wzorzec ten definiuje interfejs wyższego poziomu, sprawiający, że łatwiej jest używać podsystemów.
Dobrym przykładem zastosowania Fasady jest aplikacja bankomatowa – od strony urządzenia (bankomat) mamy ograniczony dostęp do systemu bankowego, obsługiwany przez odpowiednie metody Model Fasady jest dwuczęściowy interfejs zewnętrzny, który wie, który z podsystemów odpowiada za konkretne zadanie i wyśle we właściwe miejsce żądanie wykonania podsystemy, przejmujące jedynie zadanie zlecone przez interfejs zewnętrzny
Wzorzec czynnościowy: Obserwator Wzorzec obserwatora służy do powiadamiania wielu obiektów (obserwatorów) o zmianie w obiekcie – przedmiocie obserwacji