Wykład 5
Transkrypt
Wykład 5
Problemy projektowania obiektowego Czy podobne problemy można rozwiązywac w podobny sposób? Czy te problemy można przedstawić w abstrakcyjny sposób, tak aby były pomocne w tworzeniu rozwiązań w różnych kontekstach? Technologie obiektowe Wzorzec „Wzorzec opisuje problem, który powtarza się wiele razy oraz podaje istotę jego rozwiązania, w taki sposób, by mógł być wielokrotnie zastosowany” Technologie obiektowe Wzorce w inżynierii oprogramowania - Wzorce architektoniczne – poziom integracji komponentów - Wzorce projektowe – poziom interakcji między klasami - Wzorce analityczne – poziom opisu rzeczywistości - Wzorce implementacyjne – poziom języka programowania Technologie obiektowe Wzorce Dobry wzorzec to nazwana, dobrze rozpoznana para PROBLEM – ROZWIĄZANIE, którą można odnieść do nowych kontekstów i której towarzyszą wskazówki na temat stosowania rozwiązania w nowej sytuacji i wynikającuch z tej sytuacji konsekwencji. Technologie obiektowe Wzorce mają nazwy Nadanie wzorcowi nazwy: - Łatwiej jest zrozumieć i zapamiętać nazwany koncept - Łatwiej jest o nim rozmawiać. Kiedy wzorzec zostanie nazwany i rozpowszechniony, a wszyscy zgodzą się na używanie nadanej mu nazwy, o skomplikowanych ideach projektowych można, dzieki abstrakcji, rozmawiać za pomocą krótkich zdań (lub diagramów). Technologie obiektowe Rozmowa Cześć Jasiu, myślę że dostęp do podsystemu trwałych danych powinien się odbywać przez Fasadę. Użyjemy też Fabryki abstrakcyjnej i Odzwzorowywacza danych, a w celu leniwego tworzenia obiektów zastosujemy Pełnomocnika. Technologie obiektowe Wzorce projektowe Ideę nazwanych wzorców projektowych do informatyki wprowadził Kent Beck (twórca programowania ekstremalnego) w połowie lat 80tych. W 1994 ukazał się HIT WYDAWNICZY „Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku” Biblia wzorców projektowych – 23 wzorce. HELION 2010 Technologie obiektowe Gang of Four (GoF) Wzorce opisane w książce, to Wzorce bandy czterech Technologie obiektowe Wzorce projektowe Wzorce kreacyjne: - Abstrakcyjne metody tworzenia obiektów Uniezależnienie systemu od tworzenia obiektów Wzorce strukturalne - Sposób wiązania obiektów w struktury Właściwe korzystanie z dziedziczenia i kompozycji Wzorce behawioralne - Algorytmy i przydział odpowiedzialności Opis przepływu kontroli i interakcji Technologie obiektowe Wzorce Wzorce kreacyjne: Abstract factory, Builder, Factory Method, Prototype, Singleton Wzorce strukturalne: Adapter, Bridge, Composite, Decorator, Facade, Proxy, Flyweight Wzorce behawioralne: Chain of resposnibilty, Command, Interpreter, Mediator, Iterator, Memento, Observer, State, Strategy, Template Method, Visitor Technologie obiektowe Singleton - Najprostszy wzorzec - Zapewnienie, że klasa posiada tylko jedną instancję wewnątrz całej aplikacji - Udostępnienie tej instancji w łatwo dostepny i intuicyjny sposób - Obiektowa alternatywa dla zmiennych globalnych Technologie obiektowe Singleton - Dostęp do instancji klasy Singleton należy uzyskiwać za pośrednictwem publiczne właściwości statyczne Instance. Jeżeli ta właściwość zostanie użyta wielokrotnie, za każdym razem zwróci referencję do tej samej instancji. Singleton nie definiuje publicznych konstruktorów i jako taka nie stwarza możliwości tworzenia instancji bez pośdrednictwa właściwości Instance Singleton s1=Singleton.Instance; Singleton s2=Singleton.Instance; Assert.AreSame(s1,s2); Technologie obiektowe Singleton - rozwiązanie Singleton składa się z jednej klasy, która zarządza swoją własną instancją. Instancja klasy jest przechowywana w polu prywatnym, dostęp do niej jest realizowany przez getter (w C# właściwość). Jeżeli pole przechowują instancje klasy ma wartość null, wtedy tworzona jest taka instancja. W przeciwnym razie zwraca instancję. Dzięki temu, niezależnie od tego, który raz wywoływane jest metoda , zawsze zwraca ona utworzona i jedyną instancję klasy. Technologie obiektowe Singleton - implementacja public class Singleton { private static Singleton theInstance=null; private Singleton() {}; public static Singleton Instance { get { if(theinstance==null) theInstance=new Singleton(); return theInstance; } } } Technologie obiektowe Singleton - zalety 1. Możliwość stosowania dla dowolnej klasy – dowolna klasa może stać się Singletonem 2. Możliwość tworzenia przez dziedziczenia – klasy pochodne mogą też być singletonami 3. „Leniwe” konstruowanie – jeśli Singleton nigdy nie jest wykorzystywany, także nigdy nie zostanie utworzony. Technologie obiektowe Singleton - wady • Niezdefiniowany proces destrukcji • Niedziedziczność – klasa dziedzicząca po klasie singletonowej sama nie jest singletonem. Jeśli chcemy by nim była musimy dodać odpowiednią funkcję i zmienną statyczną. • Efektywność – każde użycie właściwości Instance, wiąże się z koniecznością wykonania wyrażenia warunkowego • Nieprzejrzystość – użytkownicy klasy singletonowej muszą wiedzieć z jaką konstrukcją mają do czynienia. Technologie obiektowe Wzorzec Monostate Dwie instancje tej samej klasy zachowują się zupełnie tak, jakby były jednym obiektem. Niezależnie od tego ile instacji klasy utworzymy, wszystkie one będą się zachowywały jak jeden obiekt. Monostate m1=new Monostate(); Monostate m2=new Monostate(); for(int i=0;i<10;i++) { m1.X=i; Assert.AreEqual(i,m2.X); } Technologie obiektowe Monostate - implementacja public class Monostate { private static int itsX; public int X { get {return itsX;} set {istX=value;} } } Technologie obiektowe Monostate - zalety Przejrzystość – użytkownicy korzystajć z obiektów klas Monostate jak ze zwykłych obiektów – mogą nie wiedzieć że mają do czynienia z taką konstrukcja Dziedziczność – klasy potomne także implementują ten wzorzec Polimorfizm – metody nie są statyczne ` Technologie obiektowe Template method • Stworzenie szkieletu algorytmu w postaci klasy • Przesunięcie niektórych operacji do podklas • Prosty wzorzec opisujący sposób współpracy pomiędzy nadklasą i jej podklasami. • Celem wzorca jest określenie szkieletu algorytmu w nadklasie i określenie jego kroków w podklasach. Technologie obiektowe Template method • Klasa abstrakcyjna posiada metodę TemplateMtehod() definiującą szkielet algorytmu. • Metoda ta odwołuje się do innych metod w tej klasie definiujących podstawowe kroki algorytmu. • Część z nich to metody wykorzystywane przez wszystkie podklasy, dlatego zdefiniowane są w nadklasie. • Niektóre kroki algorytmu, mają różną postać w każdym algorytmie, dlatego na poziomie klasy AbstractClass są one deklarowane jako abstrakcyjne. • Ich implementacja jest przesunięta do klas dziedziczących. Technologie obiektowe Template Method AbstractClass • • definiuje szkielet algorytmu w postaci metody szkielet odwołuje się do prostych metod abstracyjnych ConcreteClass • • implementuje proste metody abstrakcyjne pokrywa inne, wybrane metody odziedziczone z AbstractClas Technologie obiektowe TemplateMethod - przykład Technologie obiektowe State/Strategy Wzorce State i Strategy mają identyczną strukturę i zbliżone cele Dotyczą one funkcjonalnej zmiany zachowania obiektu w trakcie działania programu. Pozornie obiekt zmienia klasę do której należy. W przypadku wzorca State celem jest zmiana zachowania obiektu w zależoności od stanu w jakim się znajduje. Wzorzec Strategy służy do modelowania algorytmu realizacji pewnej czynności , który może zostać zmieniony w trakcie wykonywania programu. Technologie obiektowe State Centralnym obiektem jest Context. Jego metody wywoływane przez klientów delegują żądania do skojarzonego z nim relacją kompozycji obiektu typu State, reprezentującego jego stan. Metody obiektu state są polimorficzne – wraz ze zmianą obiektu zmienia się funkcjonalność. Technologie obiektowe Strategia Wzorzec Strategy stosuje podobne rozwiązanie tylko, że na większą skalę. Obiekt Context realizuję pewien algorytm, którego realizacja może zmieniać się w zależności od wyboru algorytmu. Z obiektem tym skojarzony jest obiekt (także za pomoca kompozycji) obiekt algorytmu, którego metody go implementują. Technologie obiektowe State/Strategy Context - Posiada referencję do obiektu reprezentującego bieżący stan/algorytm State/Strategy - Definiuje interfejs pozwalający hermetyzować zachowanie związane z każdym stanem/strategią Concrete State - Definiuje własne metody implementujące zachowanie specyficzne dla tego stanu/strategii Technologie obiektowe Strategia - sortowanie Technologie obiektowe