Technologia Programowania 2016/2017 Wykład 4

Podobne dokumenty
Technologia Programowania 2016/2017 Wykład 5

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

Programowanie obiektowe

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

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Zaawansowane programowanie w C++ (PCP)

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

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

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Testowanie oprogramowania Wzorce projektowe

Wzorce projektowe. dr inż. Marcin Pietroo

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

Projektowanie obiektowe Wzorce projektowe

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

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

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

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

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

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

Wprowadzenie do programowania aplikacji mobilnych

Programowanie w języku Java WYKŁAD

Wzorce projektowe Michał Węgorek

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

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

Program szkolenia: Wzorce projektowe w C++

Aplikacje RMI

Wzorce projektowe. dr inż. Marcin Pietroo

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń


Technologia Programowania 2016/2017 Wykład 6

Programowanie obiektowe

Wypożyczalnia VIDEO. Technologie obiektowe

UML [ Unified Modeling Language ]

Programowanie zorientowane obiektowo. Mateusz Kołecki

Builder (budowniczy) Cel: Przykład:

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Wzorce projektowe [ wstęp ]

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

Zaawansowane programowanie obiektowe - wykład 5

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

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

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

Enkapsulacja, dziedziczenie, polimorfizm

Aplikacje RMI Lab4

Wzorce projektowe. dr inż. Marcin Pietroo

Wzorce projektowe kreacyjne

Projektowanie aplikacji JEE z użyciem wzorców projektowych i notacji UML

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

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

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

Wzorce projektowe i refaktoryzacja

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

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

Decorator (dekorator)

Programowanie obiektowe

Wzorce projektowe. Wstęp

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

Wzorce oprogramowania Gof. zastosowane w modelu obiektowym

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

Diagramy klas. dr Jarosław Skaruz

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Programowanie obiektowe

Wywoływanie metod zdalnych

PHP 5 język obiektowy

Wzorce projektowe Wykład 7 część 1

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

Abstract Factory (fabryka abstrakcyjna)

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

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

Różne odmiany budowniczego. Po co używać wzorca budowniczy? Kiedy używać budowniczego

Programowanie obiektowe

Wzorce prezentacji internetowych

Programowanie obiektowe

Aplikacje w środowisku Java

Wywoływanie metod zdalnych

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Przykładowa implementacja

Program szkolenia: Wzorce projektowe i architektoniczne oraz efektywne techniki Object Oriented Design dla projektantów systemów

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

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

Programowanie obiektowe

Model pamięci. Rafał Skinderowicz

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

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie w języku Java WYKŁAD

ASP.NET Wprowadzenie. provided by Przemysław Bykowski

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 2

Wstęp do programowania obiektowego. Wykład 2

Dokumentacja do API Javy.

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Zapytanie ofertowe (RFP)

Wzorce logiki dziedziny

Programowanie obiektowe

Wykład 4: Klasy i Metody

Metody dostępu do danych

Remote Method Invocation 17 listopada 2010

Transkrypt:

Technologia Programowania 2016/2017 Wykład 4 Wzorce projektowe GoF Jakub Lemiesz

Wzorce GRASP a wzorce GoF Znamy 9 wzorców GRASP ogólne zasady Na GRASP opierają się klasyczne wzorce GoF Na wzorcach GoF opiera się wiele rozwiązań, bibliotek i frameworków (nie tylko w Java) 2 / 33

Wzorce projektowe Gang of Four Twórcy: Gamma, Helm, Johnson, Vlissides 1995 3 / 33

Klasyfikacja wzorców GoF Klasyfikacja wzorców GoF: 1 kreacyjne tworzenie i konfiguracja obiektów (Singleton, Factory, Builder... ) 2 strukturalne struktury powiązań obiektów (Adapter, Composite, Facade, Proxy,... ) 3 czynnościowe zachowanie, współpraca obiektów (Observer, Strategy, State... ) Są tez inne wzorce, np. wzorce architektoniczne: ( MVC, Client-Server, Reactor,...) 4 / 33

Wzorce GoF co dzisiaj? Kreacyjne Builder Singleton Simple Factory Factory Method Abstract Factory Prototype Strukturalne Adapter Decorator Proxy Composite Facade Flyweight Bridge Czynnościowe Strategy Template Method Observer State Command Interpreter Iterator Mediator Visitor Memento 5 / 33

GoF: Adapter 2 problemy: Jak zapewnić stabilny interfejs dla róznych, ale podobnych klas? Jak dopasować interfejs starej klasy do nowych potrzeb bez wprowadzania zmian w kodzie? Rozwiązanie: 1 Klasa adaptera implementuje ustalony interfejs 2 Adapter deleguje zadanie do starej klasy, a następnie adaptuje jej odpowiedź. 6 / 33

Problem 1: stabilny interfejs dla podobnych komponentów Kalkulator podatków z poprzedniego wykładu 7 / 33

Problem 1: stabilny interfejs dla podobnych komponentów Kalkulator podatków z poprzedniego wykładu 7 / 33

Problem 2: adapter starej klasy [Kod w Java] 8 / 33

Problem 2: adapter starej klasy [Kod w Java] 8 / 33

Zadania z wzorców na lab??? dziedziczenie klas czy zawieranie obiektów? ( Class Adapter vs. Object Adapter) 9 / 33

GoF: Decorator Problem: Dynamiczna modyfikacja metod danej klasy (np. nie wiadomo z góry jakie metody potrzebne) Przykład: Klasa Coffee ma metodę getcost() Kawa ma dodatki pojawiające się w dowolnej liczbie, np. kawa z mlekiem i potórjną posypką Każdy dodatek ma swoją cenę. CoffeeWithMilkSprinkleSprinkleSprinkle ze specjalnie zdefiniowaną metodą getcost()? 10 / 33

GoF: Decorator Rozwiązanie: 1 Klasa dekoratora opakowuje oryginalną klasę 2 Metody dekoratora wywołują metody oryginalnej klasy i dodatkowo implementują nową funkcjonalnosć 11 / 33

12 / 33

Decorator przykład Źródło wikipedia 13 / 33

Decorator na czym polega dekorowanie? SmallCoffe - $5, BigCoffe - $10 Milk - 2$, Whip - 2$ Sprinkles - 3$ Jan: poproszę malą z mlekiem i potrójną posypką (!) Coffee c = new SmallCoffee(); c = new Milk(c) ; c = new Sprinkle(c); c = new Sprinkle(c); c = new Sprinkle(c); c.getcost(); 14 / 33

Decorator uwagi 1 Dekorator zmienia metody dynamicznie, bez tworzenia hierarchi klas i przesłaniania (wada: trudniej wykryć błedy) 2 Duża elastyczność czasem powoduje trudności (np. kolejność dekorowani bywa ważna) 3 Obiekt klasy dekorowanej można przekazać jako parametr do konstruktora dekoratora ale są inne rozwiązania (np. na lab przez GoF: Builder) 15 / 33

Decorator zadanie na Lab 16 / 33

GoF: Proxy Problem: Jak uniknąć bezpośredniego dostępu do obiektu (np. wstępne przetwarzanie, obiekt zdalny, leniwa inicjalizacja) Rozwiązanie: Wprowadzamy obiekt zastępczy (tzw. proxy), który implementuje ten sam interfejs co właściwy obiekt i odpowiada za kontrolę/poprawę dostępu 17 / 33

GoF: Proxy 18 / 33

Proxy przykład: usługa zdalna Wywołujemy usługę zdalną ale jeśli jest niedostępna chcemy wywołać lokalny zamiennik usługi Np. wysyłanie informacji o sprzedaży do zewnętrznego systemu księgowego 1 Wywołujemy usługę zapisywania przez proxy 2 Proxy wywołuje usługę zdalnego zapisu 3 Jeśli zdalny zapis się nie powiedzie, proxy zapisuje informacje lokalnie 19 / 33

20 / 33

Proxy przykład: leniwa inicjalizacja 21 / 33

Proxy podsumowanie 1 Proxy to obiekt który opakowuje inny obiekt i jednocześnie implementuje ten sam interfejs, co obiekt opakowany. Klient nie wie, że odwołuje się do proxy. 2 Proxy przechwytuje wywołanie w celu kontroli lub usprawnienia dostępu do właściwego obiektu 3 Zastosowanie Proxy jest często wymuszane nie przez logikę biznesową, ale przez wymagania niefunkcjonalne (np. wydajność, bezpieczeństwo) 22 / 33

GoF: Builder Problem: jak efektywnie konstruować różne złożone obiekty w ramach jednego procesu? Przykład: Mamy klasę Customer i chcemy generować różne raporty (np. nazwisko, adres, co kupił,... ) i przedstawić je na różne sposoby (np. kod HTML, JComponent w Swing,...) Nie chcemy wyciągać informacji za pomocą getterów, tylko wygenerować gotowy produkt (Low Coupling, hermetyzacja) 23 / 33

GoF: Builder schemat działania 1 Tworzenie obiektu dzielimy na etapy, o tym jakie etapy mają być uwzględnione decyduje nadzorca (np. jakie dane o z klasy Customer wybrać) 2 O wyniku etapu decyduje budowniczy (np. czy HTML czy pole JComponent) 24 / 33

GoF: Builder schemat działania Klient tworzy budowniczego i przekazuje do wybranego nadzorcy, nadzorca musi znać jedynie interfejs budowniczego. 24 / 33

GoF: Builder przykład Ćwiczenia: Kod w Java - BuilderExample.pdf - tutaj Customer jest jednocześnie nadzorcą, jak można to uogólnić dla wielu nadzorców? 25 / 33

Builder podsumowanie Builder umożliwia dodawanie nowych reprezentacji bez wprowadzania zmian w istniejącym kodzie: nowa reprezentacja to nowy budowniczy (Open-Close Principle) Wprowadzenie wielu nadzorców umożliwi nam łatwe sterowanie treścią raportów (np. różne rodzaje raportów) 26 / 33

GoF: Factory zazwyczaj ma jedną instncję (singleton) 27 / 33

GoF: Singleton jedna instancja widoczna globalnie Dlaczego Singleton? Kontrola dostępu metody ServiceFactory muszą być dostępne dla wielu wątków (np. dostęp do bazy danych lub pliku z logami) Potrzeba strategii zarządzania pamięcią (recykling obiektów, przechowywanie ich w pamięci cache, np. obiekt pomocy aplikacji ) Krytyka: globalna instancja ukrywa zależności 28 / 33

GoF: Singleton - przykład 29 / 33

GoF: Singleton wywołanie public class Register { public void initialize() { taxadapter = ServicesFactory.getInstance().getTaxAdapter();... ServicesFactory publiczna, ale konstruktor prywatny W dowolnym miejscu w kodzie w celu uzyskania dostępu do instancji klasy możemy napisać ServicesFactory.getInstance() Następnie możemy do tej instancji wysłać komunikat, czyli mamy globalne wywołanie gettaxadapter() 30 / 33

Singleton vs. Static Class A może zdefiniować gettaxadapter() jako static? Czyli ServicesFactory.getTaxAdapter() vs. ServicesFactory.getInstance().getTaxAdapter() 1 W Singleton getinstance() jest statyczna, dzięki czemu inne metody mogą być polimorficzne (override static?) 2 Czasem Singleton bywa bardziej uniwersalny (np. okazuje się, że potrzeba 2 instancji...) 31 / 33

Singleton vs. Static Class Ogólna zasada: Singleton: potrzeba jednego punktu do zarządzania, konfiguracji, jednej instancji klasy na każdą maszynę wirtualną Static Class: gdy mamy grupę pomocniczych funkcji, które powinny być trzymane razem (np. klasy Math, Utils) 31 / 33

Singleton inicjalizacja Zachłanna inicjalizacja static Factory instance = new Factory(); static Factory getinstance() { return instance; } Leniwa inicjalizacja problem: wielowątkowość public static synchronized Factory getinstance() { if ( instance == null ) instance = new Factory(); } return instance; O przyspieszeniu przez użycie blokady z podwójnym zatwierdzaniem będzie na ćwiczeniach ( wiki ) 32 / 33

Singleton triki Singleton od Java 6 public enum ServicesFactory { INSTANCE; public void foo() {... } }... ServicesFactory.INSTANCE.foo(); Wada: brak leniwej inicjalizacji Zalety: bez zabawy z synchronized, zabezpiecza przed tworzeniem wielu instancji przez serializację i refleksję Method pc= Class.getDeclaredMethod("privateConstructor", null); pc.setaccessible(true); pc.invoke(...); 33 / 33