1 design-pattern. 2 1. muster begriff und bedeutung geschichte der entwurfsmuster bestandteile und...
Post on 05-Apr-2015
109 Views
Preview:
TRANSCRIPT
1
1. Muster
2. Das Singleton Pattern
3. Weitere Design Pattern
Design-Pattern
2
1. Muster
Begriff und Bedeutung
Geschichte der Entwurfsmuster
Bestandteile und Beschreibung von Mustern
3
1. Wiederverwendung von Wissen in der Softwareentwicklung
Komponenten (Bausteine)
Bibliotheken (Komponentensammlungen)
Rahmenwerken, engl. Frameworks (wiederverwendbare Entwürfe)
Programmgeneratoren, Wizards
Muster, engl. Pattern (Problemlösungen)
Anti-Muster (Problemlösungen, die nicht funktionieren)
Prinzipien und Heuristiken
Handbücher (Anleitungen)
4
1. Muster- allgemeiner Begriff
„Pattern“ im Websters Dictionary
1: a form or model proposed for imitation, see exemplar
2: something designed or used as a model for making things; e.g. a
dressmaker‘s pattern
3: a model for making a mold into which molten metal is poured to form
a casting
4: an artistic, musical, literary, or mechanical design or form
5: a natural or chance configuration; e.g. frost pattern
„Muster“ im Brockhaus, 1993
1) Vorlage, nach der etwas hergestellt wird
2) etwas ins seiner Art Vollkommenes, Vorbild
5
1. Muster- Theorie des Lernens
Ein Mensch lernt, indem
• er Beispiele beobachtet bzw. Erfahrungen macht,
• die Beobachtungen generalisiert, abstrahiert und
• daraus allgemeine Regeln (Muster) ableitet.
• Diese werden dann erprobt und wenn nötig modifiziert
Das gilt auch für Problemlösungen:
• erprobte Lösungen werden immer wieder eingesetzt,
(allerdings oft auch dann, wenn sie unangebracht sind)
damit reduziert sich der Aufwand der Problemlösung
Ein großer Teil der Kultur beruht auf erprobten Lösungen,
z.B. Sprache, Schrift, Technik.
Die praktische Ausbildung eines Menschen umfaßt daher
vor allem die Weitergabe erprobter Lösungen.
6
1. Muster- Katalog vs. Mustersprache
Katalog
• eine beliebige Sammlung von Mustern, die in der Regel nach
demselben Schema beschrieben sind
Mustersprache (pattern language)
• ein System von Mustern,
• die sich mit demselben Gebiet befassen
• die sich gegenseitig ergänzen
• deren Beziehungen und Kombinationsmöglichkeiten explizit
aufgezeigt werden
• es können durch Kombination der Muster größere Probleme gelöst
werden, als das mit einzelnen Mustern möglich ist
• auch zur Herleitung eines Entwurfs verwendbar
7
1. Muster in der Softwareentwicklung- Geschichte (1)
Muster in der Architektur: Christopher Alexander
• In seinem Buch „A Pattern Language“ (1977) beschreibt Alexander
ein System von Mustern zur Architektur auf den Ebenen
• Landschaftsplanung
• Stadtplanung
• einzelne Gebäude
• einzelne Räume
• „Each pattern describes a problem which occurs over and over
again in our environment, and then describes the core of the
solution to that problem, in such a way that you can use this
solution a million times over, without ever doing it the same way
twice.“ (Alexander, 1977, S. x)
• Definition Muster: Lösung eines Problems in einem Kontext
8
1. Muster in der Softwareentwicklung- Geschichte (2)
Muster in der Softwareentwicklung
• Kent und Cunningham bezogen von Alexander ihre
Inspiration für
Entwurfsmuster in der Software-Entwicklung (etwa 1987)
• Ab etwa 1990 gibt es Workshops über Software-
Architektur, bei
denen auch über Entwurfsmuster diskutiert wird.
• Gamma, Vlissides, Johnson und Helm veröffentlichen
1995 das
Buch „Design Patterns“ und machen damit Entwurfsmuster
populär.
• Seither steigt die Anzahl der Publikationen exponentiell.
• Seit 1994 gibt es die Konferenz PLoP (Pattern Languages
of
Program Design); später kamen die Konferenzen EuroPLoP
(1996)
und ChiliPLoP (1997) dazu.
9
1. Muster in der Softwareentwicklung- Begriff „Muster“ (Riehle, 1997)
• Ein Muster ist eine in einem bestimmten Kontext erkennbare Form.
• Es dient als Vorlage zum Erkennen, Vergleichen und Erzeugen von
Musterexemplaren.
• Ein Muster ist die Essenz aus Erfahrung und Analyse
immerwiederkehrender
Situationen.
• Es besitzt eine innere Struktur und Dynamik.
10
1. Muster in der Softwareentwicklung- Arten
• Verbreitet:
• Analysemuster
• Architekturmuster
• Entwurfsmuster
• Idiome
• Noch eher selten:
• Prozeßmuster, Vorgehensmuster (z.B. für Test, Review)
• Organisationsmuster
• Neue Idee:
• Antipatterns: beschreiben häufig gewählte falsche Lösungen für
• bestimmte Probleme und machen alternativen
Lösungsvorschlag
11
1. Muster in der Softwareentwicklung- Begriff „Design Pattern“ (Gamma et.al., 1995)
A description of an object-oriented design technique which names,
abstracts and identifies aspects of a design structure that are
useful for creating an object-oriented design.
The design pattern identifies classes and instances, their roles,
collaborations and responsibilities. Each design pattern focuses
on a particular object-oriented design problem or issue. It
describes when it applies, whether it can be applied in the
presence of other design constraints, and the consequences and
trade-offs of its use.
12
1. Muster in der Softwareentwicklung- Eigenschaften von Entwurfsmustern
• Ein Entwurfsmuster dokumentiert vorhandene, erprobte
Entwurfserfahrung; diese kann dadurch wiederverwendet werden
• Die durch Entwurfsmuster beschriebenen Abstraktionen liegen
über der Stufe einzelner Klassen (Mikroarchitektur)
• Entwurfsmuster können flexibel kombiniert werden
• Entwurfsmuster helfen bei der Erstellung und der Dokumentation
komplexer und heterogener Software-Architekturen
• Entwurfsmuster unterstützen Entwurfseigenschaften wie
Änderbarkeit und Wiederverwendbarkeit
• Entwurfsmuster bilden ein Vokabular für den Entwurf und
erleichtern daher die Kommunikation
• Entwurfsmuster können auch beim Reengineering vorhandener
Software als Analysemittel dienen
13
1. Muster in der Softwareentwicklung- Aufbau eines Musters
4 grundlegende Elemente
1. Mustername
2. Problemabschnitt
3. Lösungsabschnitt
4. Konsequenzabschnitt
14
1. Muster in der Softwareentwicklung- Beschreibung von Entwurfsmustern (Gamma et.al.)
1. Mustername und Klassifizierung
2. Zweck
3. Auch bekannt als
4. Motivation
5. Anwendbarkeit
6. Struktur
7. Teilnehmer
8. Interaktionen
9. Konsequenzen
10. Implementierung
11. Beispielcode
12. Bekannte Verwendungen
13. Verwandte Muster
Leider gibt es bisher kein einheitliches Format zur Musterbeschreibung!
15
1. Muster in der Softwareentwicklung- Beschreibung von Entwurfsmustern
Name
• Problem (problem)• Kontext (context): Bereich, in der das Problem auftritt• Einflußfaktoren (forces), die berücksichtigt werden müssen
• Lösung (solution): Struktur und Dynamik
• Einschränkungen (constraints)
• Implementierung (implementation)• Beispiele, Varianten, bekannte Verwendungen, verwandte Muster,...
Leider gibt es bisher kein einheitliches Format zur Musterbeschreibung!
16
Das Singleton-Pattern
2.1 Das GOF-Singleton-Pattern
2.2 Optimierungen und Implementierungsvarianten des Singleton-Patterns
Design Pattern
17
2.1 Das GOF-Singleton-Pattern (1)- ein objektbasiertes Erzeugungsmuster
Zweck: Sichere ab, daß eine Klasse genau ein Exemplar besitzt und stelle einen globalen Zugriffspunkt darauf bereit. (Garantie eines einzigen Exemplars)
Motivation/Anwendbarkeit: Bei manchen Klassen ist es wichtig, dass es genau ein Exemplar
gibt.
Struktur:
Teilnehmer: Singleton definiert eine Instance()-Operation
Interaktionen: Clienten greifen ausschließlich durch die Instance()-Operation der Singleton-Klasse zu
18
2.1 Das GOF-Singleton-Pattern (2)- ein objektbasiertes Erzeugungsmuster
Implementierung: “Singleton.h“
#ifndef __CSingleton#define __CSingleton
class CSingleton{
public:static CSingleton* Instance();
protected: CSingleton(); private: static CSingleton* _instance;};
#endif // __CSingleton
19
2.1 Das GOF-Singleton-Pattern (3)- ein objektbasiertes Erzeugungsmuster
Implementierung: “Singleton.cpp“
#include ".\Singleton.h"
CSingleton* CSingleton::_instance = 0; CSingleton* CSingleton::Instance() { if (_instance == 0) { _instance = new CSingleton; } return _instance; }
CSingleton::CSingleton(){}
20
2.1 Das GOF-Singleton-Pattern (4)- ein objektbasiertes Erzeugungsmuster
Implementierung: “mainprg.cpp“
#include<iostream>#include "Singleton.h"using namespace std;
int main(){
CSingleton * my1stSingleton;my1stSingleton=CSingleton::Instance();
CSingleton * my2ndSingleton;my2ndSingleton=CSingleton::Instance();
cout << "my1stSingleton Adress = " << my1stSingleton << endl;cout << "my2ndSingleton Adress = " << my2ndSingleton << endl;
return 0;}
21
Konsequenzen:
1. Zugriffskontrolle auf das Exemplar (Instance)
2. Eingeschränkter Namensraum: Keine Überfrachtung
des globalen Namensraumes mit globaler Variable
3. Verfeinerung von Operationen und Repräsentation
4. Variable Anzahl von Exemplaren (Instances)
Beispiel: Tripleton
5. Flexibler als Klassenoperationen
2.1 Das GOF-Singleton-Pattern (5)- ein objektbasiertes Erzeugungsmuster
22
• Verbesserung des Schutzes vor unerlaubter Kopie eines Singletons
und unerlaubten Löschens eines Singleton-Pointers
Idee: private Sichtbarkeit von Constructor, Copy-Constructor,
Destructor und Zuweisungsoperator
Rückgabe einer Referenz anstelle eines Pointers
Headerfile: “Singleton.h“
class Singleton
{
public:
Singleton & Instance();
… operations …
private:
Singleton();
Singleton(const Singleton&);
Singleton & operator=(const Singleton&);
~Singleton();
}
2.2 Optimierungen und Implementierungsvariantendes Singleton-Pattern (1)
23
3. Weitere Design-Pattern
…
24
Das Observer-Pattern
25
Das Observer-Pattern
26
27
28
29
30
31
32
33
Das Template Method -Pattern
34
Template Method-Pattern:
Client
Applikation
Framework
Abstract Class:
TemplateMethod()PrimitiveOperation1()PrimitiveOperation2()
Concrete Class
PrimitiveOperation1()PrimitiveOperation2()
Fachlicher Code Fachlicher Code
{ Primitive Method Primitive Method }
Intent: define the skeleton of an algorithm in an operation, defering same steps to subclasses. Template methods lets subclasses redefine certain steps of algorithm without changing the algorithm´s structure.Applicability: - Framework developmentStructure:
Hooks
OOA OOD edit compile link init runtime shutdown
Wann Object-Composition, Object-Intentions (class)...
Early Binding Late Binding Polymorphie
Runtime TypeInformationReflection Pattern
MetaClassClass
35
Abstract Factory-Pattern:
Client
Abstract Factory:
CreateProductA()CreateProductB()
Concrete Factory1
CreateProductA()CreateProductB()
Intent: provide interface for creating families of related objectsApplicability: - a system (client) should be independent of how its products are created, composed and represented
- a system should be configured with one of multiple families of products - you want a class library of products; you want the interface, not the implementation
Example: DCOM – Object AktivierungStructure:
Abstract Product A
Product A1Product A2
Concrete Factory2
CreateProductA()CreateProductB()
Abstract Product B
Product B1Product B2
36
Das Abstract Factory-Pattern
37
Das Composite-Pattern (1)- ein objektbasiertes Strukturmuster
Zweck: Füge Objekte zu Baumstrukturen zusammen, um Teil-Ganzes-Hierarchien zu repräsentieren. Das Kompositionsmuster ermöglicht es Klienten, sowohl einzelne Objekte als auch Kompositionen von Objekten einheitlich zu behandeln.
Motivation/Anwendbarkeit: Unterklassen Linie, Rechteck und Text einer abstrakten Klasse
Grafik
38
Das Composite-Pattern (2)- ein objektbasiertes Strukturmuster
Struktur:
Anwendbarkeit:• Sie wollen Teil-Ganzes-Hierarchien von Objekten repräsentieren.• Sie wollen, daß Klienten in der Lage sind, die Unterschiede
zwischen zusammengesetzten Objekten zu ignorieren. Klienten behandeln alle Objektein der zusammengesetzten Struktur einheitlich.
39
Das Composite-Pattern (3)- ein objektbasiertes Strukturmuster
Teilnehmer:• Component
• deklariert die Schnittsstelle für Objekte in der zusammengesetzten Struktur
• implementiert ggf. ein Defaultverhalten für die gemeinsame Schnittstelle aller Klassen
• deklariert eine Schnittstelle zum Zugriff/zur Verwaltung von Kindobjekt-komponenten
• definiert optional eine Schnittstelle zum Zugriff auf das Elternobjekt einer Komponente innerhalb einer rekursiven Struktur und implementiert sie ggf.
• Leaf• repräsentiert Blattobjekte in der Komposition. Ein Blatt besitzt
keine Kindobjekte.• definiert Verhalten für die primitiven Objekte in der
Komposition• Composite
• def. Verhalten für Komponenten, die Kindobjekte haben können.
• speichert Kindobjektkomponenten• implementiert kindobjekt-bezogene Operationen
• Client• manipuliert die Objekte in der Komposition durch die
Schnittstelle der Komponente (Component)
40
Das Composite-Pattern (4)- ein objektbasiertes Strukturmuster
Interaktionen: Klienten verwenden die Klassenschnittstelle von Komponente, um mit Objekten in der Kompositionsstruktur zu interagieren. Wenn der Empfänger ein Blatt ist, wird die Anfrage direkt abgehandelt. Wenn der Empfänger ein Kompositum ist, leitet es zumeist die Anfrage an seine Kindobjektkomponenten weiter. Möglicherweise führt es zusätzliche Operationen vor und/oder nach der Weiterleitung aus.
Konsequenzen: Primitive Objekte können rekursiv zu komplexeren Objekten zusammengesetzt werden• Vereinfachung des Klienten (aus der Sicht des Klienten kein
Unterschied zwischen einfachen Blattobjekten und Kompositionsobjekten)
• Einfaches Hinzufügen neuer Komponenten• Einschränkung der möglichen Komponenten eines
Kompositums erschwert (zusätzliche Typüberprüfung zur Laufzeit nötig)
Implementierung:
41
Composite-Pattern:
Intent: Compose objects into tree structure to represent part-whole hierarchieHint: Composite Pattern = Pattern CompositionApplicability: - port-whole hierarchie
- client will ignore difference between composition of objects and individual objects Structure:
Participants: Component: - declares interface for objects in the composition
- implements default behaviour for the interfaces common to all classes- declares interface for accessing and managing- (optional) defines an interface for accessing a components parent in a recursive structure
Leaf: - represents a leaf object, a leaf has no children- defines behaviour of primitive objects
Composite: - represents behaviour for components being children, store child components- implements child-related operations in the component interface
Component<<abstract>>
Operation:Add(Component)
Remove(Component)
Leaf
Operation:%
Composite
Operation:Add(Component)
Remove(Component)
Composition
42
Das Strategy-Pattern
43
Das Proxy-Pattern
z.B. Smartpointer
44
Das Bridge-Pattern (Handle-Body-Idiom)
45
Das Facade-Pattern
46
Active Object Design Pattern - Class Diagram
Context
Hint: Servant as Context, which is a Façade to ApplicationsDynamics: Method request construction and scheduling,
Method request execution, Completion
Passive Object
47
Active Object - CRC Model 1/2
48
Active Object - CRC Model 2/2
49
Active Object Design Pattern - Sequence Diagram
50
Das State-Pattern
51
Das Decorator-Pattern
top related