Inhalt: Entwurfsmuster 7.1 Entwurfsmuster, Frameworks

Transcription

Inhalt: Entwurfsmuster 7.1 Entwurfsmuster, Frameworks
OM – Entwurfsmuster
LE 13
1
Inhalt: Entwurfsmuster
7.1 Entwurfsmuster, Frameworks,
Klassenbibliotheken
7.2 Fabrikmethode-Muster
7.3 Singleton-Muster
7.4 Kompositum-Muster
7.5 Proxy-Muster
7.6 Fassaden-Muster
7.7 Beobachter-Muster
7.8 Schablonenmethode-Muster
OM – Entwurfsmuster
LE 13
2
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Definition Entwurfsmuster (design pattern)
? Bewährte generische Lösung für ein immer
wiederkehrendes Entwurfsproblem, das in
bestimmten Situationen auftritt
?
Beschreibung eines Entwurfsmusters
? Name des Musters
? Problembeschreibung
Wann ist das Muster anwendbar?
? Lösungsbeschreibung
? Abstrakte Lösung
? Konsequenzen
? Für Evaluierung von Entwurfsalternativen
?
OM – Entwurfsmuster
LE 13
3
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Klassifikation der Mustern
? Erzeugungsmuster (creational patterns)
Helfen, ein System unabhängig davon zu
machen, wie seine Objekte
erzeugt, zusammengesetzt und repräsentiert
werden
? Strukturmuster (structural patterns)
? Befassen sich mit der Zusammensetzung von
Klassen und Objekten zu größeren Strukturen
? Verhaltensmuster (behavioral patterns)
? Befassen sich mit der Interaktion zwischen
Objekten und Klassen
? Beschreiben komplexe Kontrollflüsse, die zur
Laufzeit schwer nachvollziehbar sind
?
OM – Entwurfsmuster
LE 13
4
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Weitere Klassifikation der Muster
? Klassenbasierte Muster
Behandeln Beziehungen zwischen Klassen
? Ausgedrückt durch Vererbungsstrukturen
? Festgelegt zur Übersetzungszeit
? Objektbasierte Muster
? Beschreiben Beziehungen zwischen Objekten,
die zur Laufzeit geändert werden können
? Benutzen auch bis zu einem gewissen Grad
die Vererbung
?
OM – Entwurfsmuster
LE 13
5
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Klassenbibliothek
? Organisierte Softwaresammlung, aus der ein
Entwickler nach Bedarf Einheiten verwendet
? Topologien
? Baum-Topologie
? Gemeinsame Wurzelklasse
?
Wald-Topologie
? Bibliothek besteht aus mehreren Baumhierarchien
? Vorteil: Flachere Vererbungshierarchie im Vergleich
zur Baum-Topologie
?
Baustein-Topologie
? Unabhängige Klassen
? Verwendung des Konzepts der generischen Klasse
zur spezifischen Anpassung
LE 13
6
Fundamentalfundamentale, allgemein
OM – Entwurfsmuster
Klassenbibliotheken
nutzbare, systemnahe
Klassen wie Listen, strings,
bags, maps, queues usw.
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
GUIKlassenbibliotheken
Klassen fürgrafische Benutzungsoberflächen, wie widgets, menubar, scrollbar, window, list box,
text edit
GrafikKlassenbibliotheken
Klassen zur Entwicklung komplexer, interaktiver Grafikanwendungen: Diagramme, spreadsheets, Skalen, Vektorgrafiken
Klassenbibliotheken
zum Zugriff auf
Datenbanken
Klassen zur Ansteuerung von
(relationalen) Datenbanksystemen
Klassenbibliotheken
Klassenbibliotheken
zur Interprozeßkommunikation
Anwendungsspezifische
Klassenbibliotheken
Klassen zur Kommunikation
zwischen Prozessen: dispatcher,
data representation, m essage
header, name-service
OM – Entwurfsmuster
LE 13
7
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Framework
? Def.: Menge von zusammenarbeitenden Klassen,
die einen wiederverwendbaren Entwurf für einen
bestimmten Anwendungsbereich implementieren
? Besteht aus konkreten und ? insbesondere ? aus
abstrakten Klassen, die Schnittstellen definieren
? Definition von Unterklassen zur Verwendung und
Anpassung des Frameworks
? Selbstdefinierte Unterklassen empfangen
Botschaften von vordefinierten FrameworkKlassen
? Hollywood-Prinzip: »Don‘t call us, we‘ll call you«.
OM – Entwurfsmuster
LE 13
8
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Frameworks sind immer spezifisch auf einen
Anwendungsbereich ausgelegt
? Beispiele
? Erstellung grafischer Editoren
? Erstellung von Finanzsoftware
? Spezialisierung eines Frameworks für eine konkrete
Anwendung durch Ableiten von Unterklassen aus
den abstrakten Framework-Klassen
? Realisierung der Frameworks mittels
Programmiersprachen
? Frameworks können also ausgeführt und direkt
wiederverwendet werden
? Frameworks ermöglichen hohe Wiederverwendung
OM – Entwurfsmuster
LE 13
9
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Frameworks ...
? bestimmen die Architektur der Anwendung
? definieren die Struktur der Klassen und Objekte
und deren Verantwortlichkeiten
? legen fest, wie Klassen und Objekte
zusammenarbeiten
? legen fest, wie der Kontrollfluß aussieht
? Anwendungsprogrammierer kann sich auf die
Details der Anwendung konzentrieren
OM – Entwurfsmuster
LE 13
10
7.1 Entwurfsmuster, Frameworks, Klassenbibl.
? Muster vs. Framework
? Entwurfsmuster sind abstrakter als Frameworks
Werden nur beispielhaft durch Programmcode
repräsentiert
? Anwendung von Entwurfsmustern mit einer
neuer Implementierung verbunden
? Entwurfsmuster sind kleiner als Frameworks
? Ein typisches Framework enthält mehrere
Entwurfsmuster
? Entwurfsmuster sind weniger spezialisiert als
Frameworks
? Keine Beschränkung auf einen bestimmten
Anwendungsbereich
?
OM – Entwurfsmuster
LE 13
11
7.2 Fabrikmethode-Muster (factory method)
? Motivation
? Verwendung eines Frameworks für eine
Anwendung, die mehrere Dokumente gleichzeitig
anzeigen kann
? Verwendung der beiden abstrakten Klassen
Application und Document und Modellierung
einer Assoziation zwischen ihren Objekten
Document
docs
*
open()
close()
save()
revert()
MyDocument
Application
createDocument()
newDocument
openDocument()
«creates»
Document * doc =
createDocument();
docs.add(doc);
doc–>open();
MyApplication
createDocument()
return new MyDocument
OM – Entwurfsmuster
LE 13
12
7.2 Fabrikmethode-Muster
? Klasse Application ist für die Erzeugung neuer
Dokumente zuständig
? Softwarekonstrukteur leitet von diesen beiden
Klassen seine anwendungsspezifischen Klassen
ab
? Problem
? Erzeugung eines neuen Objekts von
MyDocument aus der Klasse MyApplication
? Framework muß Objekte erzeugen, kennt aber
nur die abstrakten Oberklasse, von der es keine
Objekte erzeugen darf
OM – Entwurfsmuster
LE 13
13
7.2 Fabrikmethode-Muster
? Lösung
?
Unterklassen von Application überschreiben
die abstrakte Operation createDocument()
? Exemplar von MyDocument wird zurückgegeben
?
?
Nach der Erzeugung eines Objekts von
MyApplication, kann diese spezifische
Dokumente erzeugen, ohne deren exakte
Klasse zu kennen
Operation createDocument() heißt
Fabrikmethode
? Sie ist für die »Fabrikation« eines Objekts
verantwortlich
OM – Entwurfsmuster
LE 13
14
7.2 Fabrikmethode-Muster
? Anwendbarkeit
? Verwendung des Muster, wenn
?
?
?
eine Klasse die von ihr zu erzeugenden
Objekte nicht im voraus kennen kann
die Unterklassen festlegen sollen, welche
Objekte sie erzeugen
Struktur (klassenbas. Erzeugungsmuster)
Creator
Product
ConcreteProduct
factoryMethod()
anOperation()
...
product = factoryMethod()
...
«creates» ConcreteCreator
factoryMethod()
return new
ConcreteProduct
OM – Entwurfsmuster
LE 13
15
7.3 Singleton-Muster
? Motivation
? Bei manchen Klassen soll genau ein Objekt
existieren
? Einfacher Zugriff auf dieses Objekt von mehreren
anderen Objekten
?
Struktur (Objektbas. Erzeugungsmuster)
Singleton
uniqueInstance
singletonData
instance()
singletonOperation()
getSingletonData()
return
uniqueInstance
OM – Entwurfsmuster
LE 13
16
7.3 Singleton-Muster
? Deklaration
class Singleton
{public:static Singleton* instance();
protected: Singleton();
private: static Singleton* uniqueInstance;
};
Singleton* Singleton::uniqueInstance = 0;
?
Implementierung
Singleton* Singleton::instance()
{ if (uniqueInstance == 0)
{ uniqueInstance = new Singleton; }
return uniqueInstance;
}
OM – Entwurfsmuster
LE 13
17
7.4 Kompositum-Muster (composite)
? Motivation
? Zusammensetzen von Grafiken zu komplexen
Grafiken
? Komplexe und einfache Grafikobjekte sollen aus
Sicht des Klienten gleich behandelt werden
:Pictur e
:Text
:Line
:Pictur e
:Rectangle
:Rectangle
OM – Entwurfsmuster
LE 13
18
7.4 Kompositum-Muster
? Lösung mittels Stückliste
Graphic
draw()
add(Gr aphic)
remove(Graphic)
getPart(int)
Line
draw()
Rectangle
draw()
Text
draw()
graphics
*
0..1
Picture
draw()
add( g:Graphic)
remove(Graphic)
getPart(int)
for all g in graphics
g.draw()
add g to l ist
of graphics
OM – Entwurfsmuster
LE 13
19
7.4 Kompositum-Muster
? Struktur (Objektbasiertes Strukturmuster)
Client
Component
1
operation()
add(Component)
remove(Component)
getPart(int)
parts
*
0..1
Leaf
operation()
Composite
operation()
add(Component)
remove(Component)
getPart(int)
for all g in parts
g.operation()
OM – Entwurfsmuster
LE 13
20
7.5 Proxy-Muster (proxy)
? Motivation
? Integration grafischer Objekte in einen Text
? Darstellung großer Bilder benötigt viel
Computerleistung
? Lösung
? Verwendung eines Platzhalters – Proxy ?
anstelle des echten Bildes
? Der Bild-Proxy erzeugt das tatsächliche Bild
erst, wenn es benötigt wird
:TextDocument
image
:ImageProxy
fileName
:Image
data
im
Hauptspeicher
auf der
Festplatte
OM – Entwurfsmuster
LE 13
21
7.5 Proxy-Muster
? Proxy kontrolliert den Zugriff auf ein Objekt mit
Hilfe eines vorgelagerten Stellvertreter-Objekts
Graphic
Text
Document
draw()
* getExtent()
store()
load()
«creates»
Image
imageImp
extent
draw()
getExtent()
store()
load()
1
image
Image Proxy
fileName
extent
draw()
getExtent()
store()
load()
if(image==o)
image=loadImage(fileName)
image–>draw()
if(image==o)
return extent;
else
return image–>getExtent();
OM – Entwurfsmuster
LE 13
22
7.5 Proxy-Muster
? Anwendung in folgenden Situationen
? Remote-Proxy als lokaler Vertreter für ein Objekt
auf einem anderen Computer
? Virtuelles Proxy erzeugt »teure« Objekte auf
Verlangen (wie im Beispiel)
? Schutz -Proxy kontrolliert Zugriff auf das Original
? Smart reference als Ersatz für einen einfachen
Zeiger, der zusätzlich folgende Funktionen anbietet
? Zählen der Referenzen auf das eigentliche Objekt
? Automatische Freigabe, wenn es keine Referenzen mehr
besitzt
?
?
Laden eines persistenten Objekts, wenn es
erstmalig referenziert wird
Testen eines Objekts auf locking, bevor darauf
zugegriffen wird
OM – Entwurfsmuster
LE 13
23
7.5 Proxy-Muster
? Struktur (Objektbasiertes Strukturmuster)
Client
Subject
1
request()
...
RealSubject
1
request()
...
real
Subject
Proxy
request()
...
...
realSubject–>request()
...
OM – Entwurfsmuster
LE 13
24
7.6 Fassaden-Muster (facade)
? Motivation
? Entwurfsziel
Lose Kopplung von Paketen
? Lose Kopplung erleichtert den Austausch der
Pakete und deren unabhängige Implementierung
? Fassadenklasse zeigt eine vereinfachte
Schnittstelle für die ? umfassendere ?
Funktionalität des Pakets
? Vereinfachte Sicht genügt vielen Klienten
? Klienten, denen diese Schnittstelle nicht reicht,
müssen hinter die Fassade schauen
?
OM – Entwurfsmuster
LE 13
25
7.6 Fassaden-Muster
? Struktur (Objektbasiertes Strukturmuster)
Client
Client
Package
Package
Facade
OM – Entwurfsmuster
LE 13
26
7.6 Fassaden-Muster
? Anwenden des Musters, wenn ...
? einfache Schnittstellen zu einem komplexen Paket
angeboten werden sollen
? es zahlreiche Abhängigkeiten zwischen Klienten
und einem Paket gibt
? Fassade entkoppelt beide Komponenten
? Fördert die Unabhängigkeit und Portabilität des
Pakets
? Pakete in Schichten organisiert werden sollen
?
?
Fassade definiert den Eintritt für jede Schicht
Vereinfachung der Pakete, indem ausschließlich
über eine Fassade kommuniziert wird
OM – Entwurfsmuster
LE 13
27
7.6 Fassaden-Muster
? Die Fassaden-Klasse ...
? weiß, welche Paket-Klassen für die Bearbeitung
einer Botschaft zuständig sind
? delegiert Botschaften vom Klienten an das
zuständige Paket
? definiert keine neue Funktionalität
?
Die Klassen im Paket ...
? führen die von der Fassade zugewiesenen
Aufgaben durch
? wissen nichts von der Fassade
OM – Entwurfsmuster
LE 13
28
7.7 Beobachter-Muster (observer)
? Motivation
? Objekt enthält Anwendungsdaten
? Darstellung dieser Daten auf verschiedene Arten
? Kreisdiagramm soll sich ändern, wenn die Daten
in der Tabelle verändert werden und umgekehrt
a b c
x 60 30 10
y 50 30 20
z 80 10 10
b
a
a = 50%
b = 30%
c = 20%
c
Benachrichtigung über Änderung
Anfragen, Veränderungen
OM – Entwurfsmuster
LE 13
29
7.7 Beobachter-Muster
? Struktur
? Subject kennt alle seine Beobachter (observer)
und informiert sie über alle Änderungen
? Beobachter kennen sich untereinander nicht
? Synchronisation jeden Beobachters mit dem
Zustand des Subject
* Observer
Subject
observers
update()
attach(Observer)
detach(Observer)
notify()
for all o in observers
o–>update()
Concrete Observer
Concrete Subject
subjectState
getState()
setState()
subject
observerState
1
update()
observerState=
subject–>
getState()
return
subjectState
OM – Entwurfsmuster
LE 13
30
7.7 Beobachter-Muster
? Interaktionen des Beobachter-Musters
:Concr eteSubject
Observer 1
Observer 2
input()
setState()
notify()
update()
getState()
update()
getState()
OM – Entwurfsmuster
LE 13
31
7.8 Schablonenmethode-Muster
? Motivation
? Framework, das die Klassen Document und
Application bereitstellt
Document
*
docs
open()
save()
close()
doRead()
MyDocument
doRead()
Application
addDocument()
openDocument()
doCreateDocument()
canOpenDocument()
aboutToOpenDocument()
«creates»
MyApplication
doCreateDocument()
canOpenDocument()
aboutToOpenDocument()
OM – Entwurfsmuster
LE 13
32
7.8 Schablonenmethode-Muster
? Schablonenmethode openDocument()
?
?
Definiert den Rahmen eines Algorithmus
Delegiert Teilschritte an Unterklassen
void Application::openDocument
(const char* name)
{
if (!canOpenDocument(name) )
return;
Document* doc = doCreateDocument();
if (doc)
{ docs->addDocument(doc);
aboutToOpenDocument(doc);
doc->open();
doc->doRead();
}}
OM – Entwurfsmuster
LE 13
33
7.8 Schablonenmethode-Muster
? Anwenden des Musters ...
? um die invarianten Teile eines Algorithmus
genau einmal festzulegen
? Konkrete Ausführung der variierenden Teile
wird den Unterklassen überlassen
? wenn gemeinsames Verhalten von Unterklassen
in einer Oberklasse realisiert werden soll
? Vermeidung der Duplikation von Code
OM – Entwurfsmuster
LE 13
34
7.8 Schablonenmethode-Muster
? Struktur (Objektbasiertes Verhaltensmuster)
AbstractClass
templateMethod()
primitiveOperation1()
primitiveOperation2()
ConcreteClass
primitiveOperation1()
primitiveOperation2()
...
primitiveOperation1()
...
primitiveOperation2()
...
OM – Entwurfsmuster
LE 13
35
Aufgabe 1
? Modellieren und Erkennen von Mustern
? Erstellen Sie Klassen- und Sequenzdiagramm
? Welches Muster liegt vor?
? ClassSpecification mit AttributeSpecs
? ClassTree mit
? ClassSymbol mit
AttributeList
AttributeSpecs
OM – Entwurfsmuster
LE 13
36
Aufgabe 2 a
? Systematisches Identifizieren von
Entwurfsmustern
a.
Grafik
#Koordinate
#istSichtbar
+zeigen()
+loeschen()
+verschi eben()
Kreis
#Radius
+zeigen()
+loeschen()
+vergroessern()
+verkleinern()
zeigen()
.....
loeschen()
OM – Entwurfsmuster
LE 13
37
Aufgabe 2 b
b.
Dateiobjekt
verschieben()
kopieren()
loeschen()
Verknuepfung
Datei
oeffnen()
oeffnen()
*
0..1
Verzeichnis
durchsuchen()
hinzufuegen()
zeigeInhalt()
OM – Entwurfsmuster
LE 13
38
Aufgabe 2 c
c.
Element
draw()
delete()
Link
Diagram
tools
*
Object
createElement()
showElement()
activeElement()
MyDiagram
createElement()
...
tool = createElement()
...