Bardzo ważnym elementem metodologii projektowania systemów informatycznych jest PMBoK
Obiektowe metody projektowania systemów
description
Transcript of Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów
Design Patterns
STRATEGY
Wstęp:
Strategy (strategia):
- należy do tzw. behawioralnych wzorców projektowych, czyli charakteryzujących oddziaływania pomiędzy obiektami.
- ma za zadanie zdefiniowanie rodziny algorytmów i rozdzielenie ich tak aby działały zależnie od potrzeb klienta
Plan:
• Zastosowanie
• Struktura
• Kosekwencje (zalety i wady)
• Implementacja
• Przykład kodu
• Zakończenie
Zastosowanie
Strategię stosujemy jeśli: Wiele powiązanych klas różni się tylko
zachowaniem. Potrzeba kilku wariantów algorytmu. Algorytm używa danych o których klient
nie powinien wiedzieć. Klasa definiuje wiele zachowań jako
wielokrotne instrukcje warunkowe.
Struktura
Struktura - powiązania
Klasy Strategy i Context współdziałają aby zaimplementować wybrany algorytm.
Context przekazuje żądanie klienta do odpowiedniej strategii.
Konsekwencje
Zalety Strategia pozwala utworzyć rodziny
powiązanych algorytmów. Hermetyzacja algorytmów w oddzielnych
klasach pozwala na ich modyfikację niezależnie od kontekstu, zwiększa czytelność, oraz łatwość rozbudowy.
Eliminuje instrukcje wyboru (warunkowe).
Konsekwencje
Wady Klient musi być świadomy różnych
algorytmów, aby mógł wybrać właściwy. Nadmiarowa komunikacja pomiędzy
Strategy i Context. Zwiększona liczba obiektów.
Implementacja
Interfejsy klas Context i Strategy Strategia jako szablon Strategia jako rozwiązanie
opcjonalne
Przykładowy kod 1
class Composition {
private:
Compositor* compositor1;
Component* components1;
int lineWidth;
public:
Composition(Compositor*);
void Repair();
};
Przykładowy kod 2class Compositor {
public:virtual int Compose(int lineWidth) = 0;
protected:Compositor();
};
Class SimpleCompositor : public Compositor { public:
SimpleCompositor(); int Compose(int lineWidth);
// ... }; class TeXCompositor : public Compositor {
public:TeXCompositor();int Compose(int lineWidth);// ...
};
Przykładowy kod 3
void Composition::Repair () {int breakCount;
breakCount = compositor1->Compose(lineWidth);}
Composition* quick = new Composition(new SimpleCompositor);Composition* slick = new Composition(new TeXCompositor);
Podsumowanie:
Strategia umożliwia zdefiniowanie rodziny algorytmów realizujących to samo zadanie, ale różniących się implementacją
Strategia zwiększa czytelność programu i ułatwia jego późniejszą modyfikację.
Bibliografia:
Stroustrup B.: The C++ Programming Language, Addison-Wesley, 2004
Shalloway A., Trott J.R.: Projektowanie zorientowane obiektowo. Wzorce projektowe, Helion 2002
Gamma E., Helm R., Johnson R., Vlissides R.:Design Patterns: Elements of Reusable Object-Oriented Software
Fin