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