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

Podobne dokumenty
Projektowanie obiektowe Wzorce projektowe

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Wzorce projektowe. dr inż. Marcin Pietroo

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

Technologia Programowania 2016/2017 Wykład 4

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

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

Wprowadzenie do programowania aplikacji mobilnych

Testowanie oprogramowania Wzorce projektowe

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

Zaawansowane programowanie w C++ (PCP)

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

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

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

Programowanie obiektowe

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

Wzorce projektowe. dr inż. Marcin Pietroo

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

Wypożyczalnia VIDEO. Technologie obiektowe

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Technologia Programowania 2016/2017 Wykład 5

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

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

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


Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

1) Wzorzec projektowy Adapter. Zastosowanie:

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

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

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

Analiza i projektowanie obiektowe 2016/2017. Wykład 8: Przypisywanie obiektom odpowiedzialności (2)

Technologie obiektowe

Wzorce projektowe Michał Węgorek

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

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

Programowanie w języku Java WYKŁAD

Program szkolenia: Wzorce projektowe w C++

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

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Wykład 1 Inżynieria Oprogramowania

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

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

UML [ Unified Modeling Language ]

MVVM Light Toolkit. Julita Borkowska

Wzorce logiki dziedziny

Techniki projektowania wzorce projektowe

Zasady projektowania obiektowego

WYKŁAD 12. Wzorce projektowe czynnociowe State Mediator

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

Programowanie i projektowanie obiektowe

Wzorce projektowe i refaktoryzacja

Przykładowa implementacja

Projektowanie obiektowe oprogramowania Wykład 7 wzorce czynnościowe (2) Wiktor Zychla 2018

Wprowadzenie do systemów informacyjnych

Forum Client - Spring in Swing

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

Programowanie obiektowe

Zagadnienia projektowania aplikacji J2EE

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

Builder (budowniczy) Cel: Przykład:

Programowanie obiektowe

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control Wiktor Zychla 2013

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

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

Podstawy Programowania Obiektowego

Język programowania. Andrzej Bobyk

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej

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

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

Procesowa specyfikacja systemów IT

Projektowanie logiki aplikacji

Programowanie obiektowe

Modelowanie i analiza. warstwy biznesowej aplikacji

Wykład 8: klasy cz. 4

Historia modeli programowania

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++

Wzorce projektowe kreacyjne

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

Programowanie obiektowe - 1.

Programowanie Obiektowe i C++ Marcin Benke

Programowanie obiektowe

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

Adaptywny kod : zwinne programowanie, wzorce projektowe i SOLID-ne zasady / Gary McLean Hall. Gliwice, cop Spis treści

Modelowanie obiektowe

Michał Adamczyk. Język UML

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Jarosław Kuchta. Projektowanie Aplikacji Internetowych. Wprowadzenie

Enkapsulacja, dziedziczenie, polimorfizm

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

Programowanie w języku Java WYKŁAD

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Wzorce projektowe [ wstęp ]

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Transkrypt:

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

Roadmap Singleton Observer Mediator Proxy Flyweight 2

Wzorce odpowiedzialności Udostępniają techniki centralizacji, delegowania i ograniczania odpowiedzialności zwykłych obiektów 3

Odpowiedzialność Kontrakt lub zobowiązanie klasyfikatora Zobowiązania związane z działaniem, to np.: wykonywanie pewnej czynności przez obiekt, jak tworzenie innego obiektu lub przeprowadzanie obliczeń inicjalizacja czynności wykonywanych przez inny obiekt (zmuszenie innego obiektu do wykonania czynności) kontrola i koordynacja czynności wykonywanych przez inne obiekty Zobowiązania związane z wiedzą, to np.: znajomość prywatnych, ukrytych danych, wiedza o obiektach powiązanych, wiedza nt. możliwości operacyjnych obiektu. 4

Singleton GoF wzorzec kreacyjny Umożliwienie skupienia całej odpowiedzialności w jednej instancji klasy 5

Singleton problem Aplikacja potrzebuje dokładnie jednej instancji klasy. Obiekt ten ma być dostępny globalnie, a jego inicjalizacja z reguły opóźniona do pierwszej próby dostępu. 6

Singleton rozwiązanie Wymuszamy określoną liczbę instancji klasy. Leniwa inicjalizacja. Dostęp globalny. 7

Singleton diagram klas 8

Singleton przykład 9

Singleton konsekwencje Istnieje dokładnie jedna instancja klasy singleton Metoda getinstance() klasy singleton hermetyzuje politykę tworzenia dla klasy singleton tak, że klasy ją używające nie zależą od szczegółów implementacyjnych tej metody. Inne klasy, które chcą się odwoływać do jedynej instancji singleton, muszą użyć statycznej metody getinstance(). Dziedziczenie po klasie singleton jest niewygodne: trzeba utworzyć nie prywatny konstruktor, nie można przesłonić statycznej getinstance(). 10

Zależności między wzorcami Następujące wzorce mogą użyć singletona w swojej implementacji: abstract factory, builder, prototype. Singletony często to obiekty: facade (jest potrzebny tylko jeden), state. 11

Observer GoF wzorzec behawioralny Umożliwia oddzielić obiekt od znajomości obiektów od niego zależnych 12

Observer problem Duży monolityczny kod nie skaluje się dobrze, gdy rośną wymagania w stosunku do wizualizacji i monitorowania aplikacji. Obiekt jest obarczony odpowiedzialnością informowania swoich klientów o zmianach istotnych atrybutów, mimo że to klient wie, które atrybuty są dla niego istotne. 13

Observer rozwiązanie Struktura: Osłona/Delegacja. osłona hermetyzuje (enkapsuluje) rdzeń logiki biznesowej każda delegacja dostarcza konfigurowalną przez użytkownika, opcjonalną funkcjonalność 14

Observer diagram klas 15

Observer przykład 16

Observer konsekwencje Objekt dostarcza powiadomienia innym obiektom bez świadomości nadawcy i odbiorcy o sobie nawzajem. Dostarczanie powiadomień może trwać długo. Ryzyko cyklicznych powiadomień. 17

Zasada hermetyzacji zmienności Polega na ukryciu za jednolitym interfejsem wielu różnych implementacji. Pozwala: wyeliminować powtarzalność kodu, wykorzystywać różne elementy aplikacji w jednolity sposób. 18

Mediator GoF wzorzec behawioralny Pozwala skupić odpowiedzialność w jednej klasie, nadzorującej interakcję innych obiektów 19

Mediator problem Potrzebujemy zaprojektować komponenty wielokrotnego użytku, ale zależności między fragmentami, które mogą być potencjalnie wielokrotnie używane, wykazuje fenomen kodu spagetti. Złożoność interakcji między obiektami zbliża się do najbardziej skomplikowanego układu. 20

Mediator rozwiązanie Wprowadzamy dodatkowy poziom pośredniczący, który hermetyzuje relacje wiele-do-wielu między innymi komponentami Struktura: Osłona/Delegacja. osłona jest obiektem mapującym. delegacje są sieci współpracujących obiektów Stosujemy poprawny politycznie menadżer (tzw. God object) 21

Mediator diagram klas 22

Mediator przykład 23

Mediator konsekwencje Większość złożoności związanej z zarządzaniem zależnościami jest przesunięte do obiektu mediatora. To ułatwia implementacje i utrzymanie innych obiektów. Przesunięcie logiki zależności dla innych klas w jednej klasie mediatora ułatwia programistom znalezienie zależności. Klasy mediatora z reguły nie umożliwiają ponownego użycia, ponieważ kod obsługujący zależności jest specyficzny dla aplikacji. 24

Zależności między wzorcami Mediator Mediator jest podobny do facade wyławiając funkcjonalność istniejących klas, z tym że mediator jest znany przez klasy podsystemu i wprowadza do niego nową funkcjonalność. Mediator i observer są rywalizującymi wzorcami: observer rozprasza komunikacje, mediator hermetyzuje komunikacje. Mediator może skorzystać z observera w celu dynamicznej rejestracji i zarządzenia kolegów. 25

Proxy GoF wzorzec strukturalny Pozwala obiektowi działać w imieniu innego obiektu 26

Proxy problem Potrzebujemy obsługiwać zasobo-żerne obiekty, ale możemy odłożyć ich tworzenie do momentu, gdy będą faktycznie zażądane przez klienta. Poprawny obiekt z jakiegoś względu nie jest w stanie przeprowadzić zadeklarowanych działań (np. z uwagi długiego czasu ładowania obiektu) 27

Proxy rozwiązanie Wprowadzamy dodatkową warstwę pośredniczącą, która dostarcza dodatkową funkcjonalność: rozproszoną komunikację logowanie, rewizje, smart-pointer (sprytny wskaźnik). Struktura: Osłona/Delegacja. 28

Proxy diagram klas 29

Proxy przykład 30

Proxy konsekwencje Dostęp do klas przez pozostałą część programu jest realizowany przez wirtualne proxy. Udostępniane objekty są tworzone dopiero, gdy są potrzebne. Klasy wykorzystujące proxy nie potrzebują wiedzieć, która obsługująca klasa jest załadowana, albo czy taka klasa bądź jej instancja istnieje Wszystkie klasy inne niż proxy muszą odwoływać się do usług pośrednio przez klasę proxy. (Inaczej usługa może być załadowana zanim będzie potrzebna) 31

Odpowiedzialność Diagram klas z błędami 32

Zasada podstawienia (LSP) Barbary Liskov Instancja klasy powinna funkcjonować jako instancja jej klasy nadrzędnej. np.: Wyrażenie pi = new Liczba(3.14159); Elipsa o = new Okrag(6); 33

Flyweight (waga piórkowa) GoF wzorzec strukturalny Ma na celu skupienie odpowiedzialności w drobnych, współużytkowanych obiektach 34

Flyweight problem Zaprojektowanie obiektów, tak aby otrzymać możliwie najniższy poziom ziarnistości, dostarcza optymalnej elastyczności, ale może być nie akceptowalne z punktu widzenia wydajności i zużycia pamięci. 35

Flyweight rozwiązanie Pozostawiamy w klasie stan niezależny od instancji. Stan zależny od instancji dostarcza klient. Stosujemy fabrykę wspomagającą ponowne użycie 36

Flyweight diagram klas 37

Flyweight przykład Java String s1 = "hello"; String s2 = "hello"; //store in a string pool. String s3 = new String("hello"); System.out.println(s1==s2); //true, share the same memory address System.out.println(s1==s3); //false 38

Flyweight przykład 39

Flyweight konsekwencje Korzystanie z współdzielonych obiektów flyweight może drastycznie zredukować liczbę obiektów w pamięci. Zwiększa się złożoność programu. Nie jest możliwe rozróżnienie między bytami, a obiektami, które je reprezentują. Współdzielone obiekty flyweight nie mogą zawierać wskaźników do obiektów rodziców. 40

Zależności między wzorcami Flyweight Pokazuje jak stworzyć wiele małych obiektów, a facade jeden reprezentujący cały podsystem. Jest często stosowany w połączeniu z composite, aby zaimplementować współdzielone węzły liście. 41