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

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

Wzorce projektowe. dr inż. Marcin Pietroo

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

Projektowanie obiektowe Wzorce projektowe


Technologia Programowania 2016/2017 Wykład 4

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

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

Zaawansowane programowanie w C++ (PCP)

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

Abstract Factory (fabryka abstrakcyjna)

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

Technologia Programowania 2016/2017 Wykład 5

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

Programowanie obiektowe

Wzorce projektowe kreacyjne

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

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

Programowanie obiektowe

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

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

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

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

Wzorce projektowe. Wstęp

Builder (budowniczy) Cel: Przykład:

Wprowadzenie do programowania aplikacji mobilnych

Wykład 4. Projektowanie. MIS n Inżynieria oprogramowania Październik 2014

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Projektowanie obiektowe oprogramowania Wykład 4 - SOLID GRASP Wiktor Zychla 2012

Wzorce projektowe. dr inż. Marcin Pietroo

Testowanie oprogramowania Wzorce projektowe

Technologie i usługi internetowe cz. 2

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

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

Klasy abstrakcyjne, interfejsy i polimorfizm

PHP 5 język obiektowy

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

Aplikacje w środowisku Java

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

Podstawy Programowania Obiektowego

Programowanie obiektowe w języku

Diagramy klas. dr Jarosław Skaruz

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Klasy abstrakcyjne i interfejsy

Scala - programowanie obiektowo-funkcyjne

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Java: interfejsy i klasy wewnętrzne

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

Dokumentacja do API Javy.

Programowanie obiektowe

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Programowanie obiektowe

ASP.NET Wprowadzenie. provided by Przemysław Bykowski

Podstawy Języka Java

Programowanie Zespołowe

Przykładowa implementacja

Rozdział 1. Przegląd języka UML Diagram klas...24 Diagram współpracy...36 Diagram stanów...45

Programowanie obiektowe

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Podstawy Programowania Programowanie Obiektowe

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

Wykład 1 Inżynieria Oprogramowania

Polimorfizm. dr Jarosław Skaruz

Wzorce oprogramowania Gof. zastosowane w modelu obiektowym

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe

Programowanie obiektowe

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie w języku Java WYKŁAD

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

Wywoływanie metod zdalnych

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

Programowanie 2. Język C++. Wykład 3.

Technologie obiektowe

Wzorce projektowe i refaktoryzacja

Wzorce projektowe Michał Węgorek

Programowanie w języku Java WYKŁAD

Wywoływanie metod zdalnych

Wprowadzenie niektórych zagadnień OOP oraz wzorce operacyjne

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY POLIMORFIZM

Zaawansowane programowanie w języku C++ Klasy w C++

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017

Programowanie bez fabryki. Po co używać wzorca fabryki?

Wykład 4: Klasy i Metody

Modelowanie i Programowanie Obiektowe

Wprowadzenie do programowanie obiektowego w języku C++

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Decorator (dekorator)

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Transkrypt:

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass Client «używa» «interface» IInterface AbstractService + Operation() : void Serv ice ConcreteServ ice + Operation() : void klasa abstrakcyjna może zawierać implementacje, interfejs nie klasa może dziedziczyć tylko z jednej klasy abstrakcyjnej i wielu interfejsów przykłady IEnumerable vs Stream 1.2 Delegation (Prefer Delegation over Inheritance) dziedziczenie jest relacją statyczną, delegacja może być dynamiczna delegujący obiekt może ukrywać metody delegowanego (i ogólniej zmieniać kontrakt), co jest niemożliwe w przypadku dziedziczenia dobra praktyka: klasa domeny nie dziedziczymy z klas użytkowych (Person nie dziedziczy z Hashtable), ale delegacja jest ok. delegacja powoduje że jest więcej kodu w językach programowania brakuje wsparcia dla delegacji (por. https://github.com/dotnet/roslyn/issues/13952 - dyskusja nad propozycją rozszerzenia składni C# o wsparcie dla delegacji) 2 Wzorce kreacyjne

2.1 Singleton class Singleton Singleton - _instance: Singleton + Instance: Singleton - Singleton() Zalety: Jedna i ta sama instancja obiektu dla wszystkich klientów Często punkt wyjścia dla innych elementów architektury aplikacji Uniwersalność Leniwa konstrukcja Rozszerzenia: Możliwość sterowania czasem życia obiektu wspierającego ( pseudosingleton, singleton z określoną polityką czasu życia) Singleton parametryzowany (zainicjowanie wymaga parametrów inicjalizacyjnych) 2.2 Monostate Usuwa ograniczenie liczby instancji w Singletonie, pozostawia właściwość współdzielenia stanu

2.3 (Parametrized) Factory class Factory Client uses «interface» Product asks for object ConcreteProduct creates Factory + CreateFineProduct(string) : Product + CreateProduct(int) : Product Product CreateProduct( int Type ) { switch ( Type ) { case ProductType.P1 : return new ConcreteProduct1(); case ProductType.P2 : return new ConcreteProduct2(); } } To jeden z częściej stosowanych wzorców, realizacja odpowiedzialności Creator z GRASP Interfejs klasy fabryki może mieć wiele metod, ułatwiających tworzenie konkretnych obiektów (parametryzacja przez typ metody fabryki, przez wiele metod jednej fabryki); fabryka może też zwracać obiekt typu pochodnego względem oczekiwanego, w ten sposób być przygotowana na zmiany funkcjonalności klient spodziewa się obiektu typu A, dostaje B dziedziczące z A i korzysta z niego jak z A, ale w rzeczywistości B realizuje swoją odpowiedzialność być może inaczej niż A Fabryka może kontrolować czas życia tworzonych obiektów (zwracając obiekty o różnych czasach życia) Fabryka może być przygotowana na rozszerzenia, w ten sposób realizując postulat Open- Closed Principle (przykład z wykładu: Factory + FactoryWorker zamiast switch ) W praktyce zamiast z singletonów i monostates lepiej używać fabryk, są bardziej uniwersalne w implementacji i zapewniają stabilny interfejs dla klienta (w ten sposób fabryka realizuje też postulat Protected Variations (Law of Demeter) z GRASP

2.4 Factory Method Delegowanie tworzenia obiektu użytkowego do metody tworzącej, zwykle abstrakcyjnej (FactoryMethod) Metoda fabrykująca mimo że nie ma implementacji, może już być używana (w AnOperation) Podklasy dostarczają implementacji metody fabrykującej 2.5 Abstract Factory Nazywany też tookit Abstrakcyjna fabryka całej rodziny obiektów klient nie używa abstrakcji ale potrzebuje konkretnej implementacji Konstrukcja podobna jak w Factory Metod ale inny zasięg:

o w FM klasa użytkowa sama realizuje jakieś funkcjonalności i do nich potrzebuje obiektu pomocniczego który sama sobie tworzy o w AF klasa klienta nie tworzy sobie sama obiektu pomocniczego tylko deleguje jego tworzenie do fabryki Potrzeba refaktoryzacji FM do AF pojawia się zwykle wtedy, kiedy w klasie implementującej FM pojawia się druga/trzecia (i kolejna) potrzeba wykreowania obiektu pomocniczego o nieznanej implementacji 2.6 Prototype Istnieje kilka prototypowych instancji obiektów Tworzenie nowych polega na kopiowaniu prototypów Nie ma znaczenia kto i jak wyprodukował instancje prototypów 2.7 Object Pool class Pool Client asks for Reusable uses ReusablePool + AcquireReusable() : Reusable + Instance() : ReusablePool + ReleaseReusable(Reusable) : void Reusable Reużywanie / współdzielenie obiektów które są kłopotliwe w tworzeniu (np. czasochłonne) Metoda tworzenia/pobierania obiektu bywa parametryzowana

2.8 Builder Ukrywanie szczegółów kodu służącego do kreowania obiektu/obiektów Ukrywanie wewnętrznej struktury obiektu Przykład XmlTextWriter Przykład z wykładu: http://www.wiktorzychla.com/2012/02/simple-fluent-and-recursive-tagbuilder.html