Projektowanie obiektowe Wzorce projektowe

Podobne dokumenty
Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

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

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

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

Wzorce projektowe. dr inż. Marcin Pietroo

Zaawansowane programowanie w C++ (PCP)

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

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

Wzorce projektowe. dr inż. Marcin Pietroo

Wprowadzenie do programowania aplikacji mobilnych

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

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

Technologia Programowania 2016/2017 Wykład 4

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

Programowanie obiektowe

Testowanie oprogramowania Wzorce projektowe

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

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Technologia Programowania 2016/2017 Wykład 5

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

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

Wzorce projektowe. dr inż. Marcin Pietroo

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

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

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


Zaawansowane programowanie obiektowe - wykład 5

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

Wypożyczalnia VIDEO. Technologie obiektowe

Wzorce projektowe kreacyjne

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Builder (budowniczy) Cel: Przykład:

Abstract Factory (fabryka abstrakcyjna)

Wzorce projektowe Michał Węgorek

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

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

Programowanie obiektowe

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Forum Client - Spring in Swing

Wzorce projektowe i refaktoryzacja

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

Program szkolenia: Wzorce projektowe w C++

PHP 5 język obiektowy

Programowanie i projektowanie obiektowe

Wzorce projektowe. Wstęp

Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design

Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016

Command (action, transaction, polecenie)

Projektowanie logiki aplikacji

Technologie obiektowe

UML w Visual Studio. Michał Ciećwierz

Wzorce projektowe [ wstęp ]

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

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Przykładowa implementacja

Wykład 8: klasy cz. 4

1) Wzorzec projektowy Adapter. Zastosowanie:

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe

Język programowania. Andrzej Bobyk

Programowanie obiektowe

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

Paweł Kurzawa, Delfina Kongo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

MVVM Light Toolkit. Julita Borkowska

Klasy abstrakcyjne, interfejsy i polimorfizm

Wprowadzenie do systemów informacyjnych

Programowanie w języku Java WYKŁAD

Pojęcie wzorca projektowego Sposób opisu wzorców projektowych Notacja UML podstawowe diagramy zapisu wzorców projektowych

Programowanie obiektowe

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

TEMAT : KLASY DZIEDZICZENIE

Modelowanie i Programowanie Obiektowe

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

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

Wzorce projektowe warstwy danych

WYKŁAD 11. Wzorce projektowe czynnociowe Iterator TemplateMethod

Programowanie obiektowe

Programowanie obiektowe - 1.

Programowanie obiektowe

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Transkrypt:

Projektowanie obiektowe Wzorce projektowe Gang of Four Kreacyjne wzorce projektowe (wzorce konstrukcyjne) 1

Roadmap Memento Factory Method Abstract Factory Prototype Builder 2

Wzorce konstrukcyjne wzorce konstrukcyjne (builder, factory method, abstract factory, prototype oraz memento) pozwalają klientom tworzyć nowe obiekty inaczej niż tylko przez wywołanie konstruktorów klas. 3

Memento GoF - wzorzec behawioralny wzorzec konstrukcyjny Zrekonstruowanie obiektu na podstawie jego starszej wersji, zawierającej wyłącznie stan wewnętrzny. 4

Memento problem Gdy potrzebujemy możliwość przywracania poprzedniego (lub dawnego) stanu obiektu. 5

Memento rozwiązanie Stosujemy metody undo i rollback. magiczne ciasteczko hermetyzuje zapamiętanie stanu z określonego punktu ( check-point ). 6

Memento diagram klas 7

Memento przykład 8

Memento konsekwencje Dane zapamiętywanej obiektu (originatora), do których powinien mieć tylko on dostęp pozostają prywatne. Upraszcza klasę originatora delegując zapisywanie i odtwarzanie do klasy memento. Przechowywanie stanów wymaga dodatkowej pamięci. Za oszczędną strategie wykorzystania memento odpowiedzialny jest klient (caretaker). 9

Zależności między wzorcami memento i command Mają działanie przekazywanych i wywoływanych w późniejszym czasie tokenów, które reprezentują: żądanie command, zapamiętany wewnętrzny stan obiektu memento. Command może wykorzystywać memento by zachować stan potrzebny do operacji undo. 10

Wzorce kreacyjne wzorce kreacyjne ułatwiają proces tworzenia obiektów, gdy wymaga on podejmowania decyzji. 11

Factory Method Zwolnienie klienta z obowiązku znajomości konkretnej klasy, której instancja ma być stworzona. 12

Factory Method problem Framework potrzebuje standaryzować model architektury dla wielu aplikacji, ale pozwolić indywidualnym aplikacjom definiować obiekty własnej domeny i dostarczać ich instancje. Klasy muszą inicjować kreacje obiektów nie mając zależności z klasą utworzonego obiektu. Zbiór tworzonych klas może się dynamicznie rozrastać, gdy nowe klasy zostaną udostępnione. 13

Factory Method rozwiązanie Pośrednie tworzenie przez dziedziczenie. Stosujemy konstruktor wirtualny. Unikamy konstrukcji new (uznając ją za szkodliwą) 14

Factory Method diagram klas 15

Factory Method przykład: iteracja w javie Iterators static void filter(collection<?> c) { for (Iterator<?> it = c.iterator(); it.hasnext(); ) if (!cond(it.next())) it.remove(); } for-each Construct for (Object o : collection) System.out.println(o); 16

Factory Method diagram klasy fabryka 17

Factory Method przykład 18

Factory Method konsekwencje Klasa prosząca o kreacje obiektu jest niezależna od klas wyprodukowanych obiektów. Zbiór klas produktów, które mogą być utworzone, może być dynamicznie zmieniany. Dodatkowa warstwa pośrednicząca pomiędzy inicjacją kreacji obiektów a określeniem, której klasy obiekt zostanie utworzony utrudnia zrozumienie kodu programistom. 19

Abstract Factory Stworzenie rodziny obiektów posiadających określoną cechę wspólną. 20

Abstract Factory przykład 21

Abstract Factory problem Tworzymy aplikacje, która ma być przenośna. Potrzeba hermetyzacji wieloplatformowości, np.: systemu okienkowego, operacyjnego, bazy danych. Istniejące wyrażenia #ifdef case często nie mogą być w pełni przewidziane i obsłużone. Nasz system powinien być niezależny od wielu produktów, z którymi współpracuje. 22

Abstract Factory rozwiązanie Dodajemy warstwę pośredniczącą, która dostarcza usługę tworzenia. Zapewniamy wsparcie dla rodziny produktów. Zapewniamy wsparcie wielu strategii tworzenia: wybór klasy pochodnej, ponowne użycie obiektów w cache u, rozproszone tworzenie, wybór platformy lub przestrzeni adresowej. Unikamy konstrukcji new (uznając ją za szkodliwą) 23

Abstract Factory diagram klas 24

Abstract Factory diagram klas 25

Abstract Factory konsekwencje Klasy klienta są niezależne od konkretnych klas produktów (widgetów), które używają. Dodawanie (w odróżnieniu od pisania) klasy fabryki, aby klient mógł pracować z dodatkowymi produktami jest proste. Wymuszenie klasom klienta przechodzenia przez interfejs fabryki, aby utworzyć konkretne obiekty produktu, zapewnia, że klient używa spójny zestaw obiektów do pracy z produktem. Napisanie nowego zestawu klas do wzajemnego oddziaływania z produktem jest pracochłonne. 26

Abstract Factory i Bridge Obiekty klienta mogą potrzebować zorganizowanie klas (widgetów) w hierarchie. Podstawowa wersja wzorca Abstract Factory uniemożliwia to ponieważ konkretna hierarchia klas produktów (widgetów) jest niezależna od obiektów klienta. Stosując wzorzec Bridge należy utworzyć po stronie klienta hierarchie klas widgetów niezależną od produktów. Każdą taką klasę należy wyposażyć w delegacje logiki zależnej od produktu do klasy produktu (widgeta). 27

Prototype Stworzenie obiektu na podstawie obiektu przykładowego. 28

Prototype problem System ma tworzyć obiekty nie znając dokładnie ich klasy, sposobu tworzenia oraz jakie dane reprezentują. Klasy, których instancje mają być utworzone przez system, nie są znane aż do czasu wykonania. Następujące sposoby tworzenia różnorodnych obiektów są niepożądane: bezpośrednie tworzenie (pełna zależność), factory method (ciężkie w utrzymaniu). abstract factory (wiele dodatkowych klas fabryk) 29

Prototype rozwiązanie Tworzymy obiekt niebezpośrednio przez delegacje. Stosujemy tzw. klonowanie Unikamy konstrukcji new (uznając ją za szkodliwą) 30

Prototype diagram klas 31

Prototype diagram klas z z klasą PrototypeBuilder

Prototype konsekwencje Program może dynamicznie dodawać i usuwać prototypy w czasie wykonania. Obiekt tworzący prototypy PrototypeBuilder może dostarczać określony zestaw prototypów, dodatkową elastyczność pozwalając nowym prototypom być tworzonym. (rozszerzenie zestawu obiektów prototypów lub zmiany wartości atrybutów prototypów). Obiekt klienta może tworzyć nowe rodzaje prototypów. Klient jest niezależny od klas prototypów. 33

Prototype konsekwencje, c.d. Obiekt tworzący PrototypeBuilder hermetyzuje szczegóły konstrukcji obiektów prototypów. Klient ma określony spójny zestaw metod, które prototyp dostarcza. Prototypy nie muszą być organizowane w żadną hierarchię. Konieczny jest dodatkowy czas na napisanie klas tworzących prototypy PrototypeBuilder. Programy wykorzystujące prototype polegają na dynamicznym wiązaniu (lub podobnych mechanizmach). Utrudnia to instalacje programu. 34

Zależności między wzorcami Często projekt ewoluuje z factory method do innego bardziej elastycznego wzorca konstrukcyjnego. Klasy abstract factory są często implementowane jako factory methods lub prototype. Factory methods są często wywoływane jako template methods. 35

Zależności między wzorcami Tworzenie przez: dziedziczenie factory method, delegację prototype. Abstract factory może być użyte jako alternatywa dla facade by ukryć klasy zależne od platformy 36

Builder Stopniowe zbieranie informacji o obiekcie przed przystąpieniem do jego konstrukcji. 37

Builder problem Program ma umożliwiać wytworzenie wiele typów zewnętrznych reprezentacji tych samych danych. Zawartość znajduje się na drugorzędnej pamięci (secondary storage), a reprezentacja ma być zbudowana w głównej pamięci (primary storage) Klasy odpowiedzialne za dostarczanie zawartości powinny być niezależne od dowolnych zewnętrznych reprezentacji danych i klas, które je tworzą. Klasy odpowiedzialne za budowę zewnętrznych reprezentacji danych mają być niezależne od klas dostarczających zawartość. 38

Builder rozwiązanie Za pomocą jednego wejścia umożliwiamy uzyskanie wielu wyników ( wyjść ). Struktura: Osłona/Delegacja: osłona kieruje algorytm tworzenia/kompozycji, każda delegacja hermetyzuje docelowe wyjście. 39

Builder diagram klas 40

Builder konsekwencje Określanie zawartości i konstrukcja konkretnej reprezentacji danych są niezależne. Zewnętrzna reprezentacja produktu może zmieniać się bez wpływu na obiekty dostarczające zawartość. Obiekty Builder-a mogą pracować z różnymi obiektami dostarczającymi zawartość bez potrzeby żadnych zmian. 41

Zależności między wzorcami Builder dostarcza lepszą kontrolę nad konstrukcją niż inne wzorce (np. factory method) dając obiekt zarządzający krok po kroku kreacją obiektu. Pozostałe wzorce tworzą obiekt w jednym kroku. Builder często tworzy composite. Builder odnosi się do tworzenia jak strategia do algorytmu 42