83
1 iTec Entwurfsmuster

Entwurfsmuster - · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

Embed Size (px)

Citation preview

Page 1: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

1iTec

Entwurfsmuster

Page 2: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

2iTec

q Einführung: was ist und wozu braucht man Patterns u. Frameworks ?

q wie werden Patterns beschrieben ?

q Beispiele für Designpatterns– Singleton– Proxy– State– Beobachter/Observer– Adapter– Kompositum– Dekorierer– Abstrakte Fabrik

Inhalt 11. Patterns und Frameworks

Page 3: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

3iTec

q Software-Entwicklung ist mühsam

q wiederverwendbare Software zu schreiben, ist noch mühsamer

q Hilfe bei dieser Mühe: Design-Patterns und Frameworks, die für häufig wiederkehrende Probleme bewährte Lösungsmuster anbieten

Einführung 11. Patterns und Frameworks

was ist und wozu braucht man Patterns und Frameworks?

Page 4: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

4iTec

q Christopher Alexander (1977): A Pattern Language

wie können Standardlösungen immer wiederkehrender Innenarchitekturprobleme sprachlich formuliert werden?

q Erich Gamma, R.Helm, R. Johnson, J. Vlissides (1995): Design Patterns – Elements of reusable OO-Software

legten einen bis heute massgebenden Katalog von 23 Patterns vor

q heute: es gibt kaum OO-Entwicklungen ohne Patterns ! es gehört zum Grundvokabular eines jeden SW-Ingenieurs !

Einführung 11. Patterns und Frameworks

Geschichte der Patterns

Page 5: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

5iTec

zunächst einige wichtige Begriffe

Software DesignDie Aktivitäten, die aus den Anforderungen an ein Softwaresystem eine Softwarelösung entwerfen.Diese Lösung beschreibt die Systemstruktur als Systemarchitektur (siehe nächste Folie) und dient der Implementation des Systems als Blueprint. .

q der Design enthält nicht die Implementation des Systems

q der Design enthält die eigentliche Lösung eines Problems

q der Design wird methodisch und mit Diagrammtechniken erarbeitet

Einführung 11. Patterns und Frameworks

Page 6: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

6iTec

wichtige Begriffe

Software-Architektur eine Beschreibung der Teilsysteme und Komponenten eines Softwaresystems und deren Beziehungen untereinander. Teilsysteme und Komponenten werden unter verschiedenen Blickwinkeln betrachtet, um verschiedene funktionale und nichtfunktionale Aspekte zu beschreiben.Eine Softwarearchitektur ist das Resultat des Software-Designs.

Einführung 11. Patterns und Frameworks

q Komponenten sind gekapselte, mit Schnittstellen versehene Systemteile: Module, Bibliotheken, Klassen/Objekte

q nichtfunktionale Aspekte: z.B. Erweiterbarkeit, Zuverlässigkeit,Kosten, Wartbarkeit, Portierbarkeit

q Beziehungen: zB. statisch, dynamisch, abhängig, enthalten, abgeleitet

Page 7: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

7iTec

wichtige Begriffe

FrameworkEin teilweise vorgefertigtes Softwaresystem das noch "instanziiert" werden muss durch Einfügen fehlender Teile. Dabei wird eine Architektur vordefiniert, in der wesentliche Komponenten vorgefertigt sind, und diejenigen Stellen werden genau definiert, in denen das Framework mit Implementationen für ein spezielles System noch instanziiert werden muss/kann..

q Frameworks sind die grösstmöglich vorgefertigten Systemrohbauten

q Frameworks sind meist typisch für ganze Anwendungsbereiche, zB.:

– für interaktive Systeme mit GUIs – MFC (C++), JFC (JAVA)

– für verteilte OO-Systeme – CORBA, DCOM

Einführung 11. Patterns und Frameworks

Page 8: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

8iTec

q IdiomProgrammiermuster – wie in einer bestimmten Programmiersprache kleine Programmierprobleme gelöst werden. Beispiel in C/C++: wie man ein Feld durchläuft

q Spezifischer Designein spezifischer, persönlicher Design für ein bestimmtes Problem. Kann schlau sein, aber versucht nicht, allgemein anwendbar zu sein

q Standard Designein Design für ein bestimmtes Problem, der Allgemeinheit erlangt hat durch Wiederverwendung. Z.B. eine unternehmensweite Lösung für das Y2000-Problem

q Design Patterneine Lösung für eine ganze Klasse von ähnlichen Problemen. Meistens erst sichtbar nach längerer Anwendung von Standard-Designs.

Einführung 11. Patterns und Frameworks

Pattern Einordnung

Page 9: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

9iTec

q lerne RegelnFigurenamen und –zugmöglichkeiten, Schachbrettgeometrie etc.

q lerne Prinzipienrelativer Figurenwert, strategischer Wert des Brettzentrums, Angriffsvermögen etc.

q schliesslich und vor allem: lerne von Spielen der MeisterSpielzüge und deren Anwendungssituationen: Muster (Patterns) es gibt hunderte von solchen Spielzügen/Strategien

wie wird man ein guter Schachspieler?

Einführung 11. Patterns und Frameworks

Page 10: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

10iTec

q lerne RegelnAlgorithmen, Datenstrukturen, Programmiersprachen

q lerne Prinzipienmodulares Programmieren, objektorientiertes Programmieren

q schliesslich und vor allem: lerne von SW-Designs der "Meister"Muster (Patterns) von allgemeinen Lösungen immer wiederkehrender Designprobleme

wie wird man ein guter Software-Designer?

Einführung 11. Patterns und Frameworks

Page 11: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

11iTec

q Absichtstellt sicher, daß von einer Klasse höchstens ein Objekt erzeugtwird, und stellt einen globalen Zugriff auf das Objekt bereit

q Motivationin manchen Anwendungen dürfen einige Klassen nur eine Objektinstanz besitzen – z.B. ein Printer-Spooler Objekt, ein Firma Objekt, ein Windows Manager Objekt, ein Roboter Objekt mit Konfigurationsdaten zur Robotersteuerung, ein DB-Broker.

Objekt in globaler Variablen keine Garantie für Einmaligkeit

besser:

lasse die Klasse selber ihren Konstruktor überwachen

Pattern Beispiel: Singleton

Einführung 11. Patterns und Frameworks

Page 12: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

12iTec

Einführung 11. Patterns und Frameworks

Beispiel: Singleton

q Idee

– verberge alle Konstruktoren nach aussen: mache sie private

– biete eine neue Methode "instance" nach aussen an, die eine Referenz auf (das einzige) Objekt zurückgibt

– diese Methode muss eine Klassenoperation sein (static)! warum?

Page 13: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

13iTec

Beispiel: Singleton

Einführung 11. Patterns und Frameworks

class Singleton {private static Singleton s = new Singleton();

private Singleton() { . . }

public static Singleton Instance() { return s; }. . . //Attribute und Methoden

}

das Klassenattribut s hälteine Referenz auf das einzigeObjekt der Klasse Singleton

das Klassenattribut s hälteine Referenz auf das einzigeObjekt der Klasse Singleton

mindestens einen Konstruktordefinieren als private: kein (öffentlicher) Default-Konstruktor mehr verfügbar

mindestens einen Konstruktordefinieren als private: kein (öffentlicher) Default-Konstruktor mehr verfügbar

einzige öffentliche Zugriffs-methode auf ein Singleton-Objekt: ist Klassenmethode

einzige öffentliche Zugriffs-methode auf ein Singleton-Objekt: ist Klassenmethode

Singleton s = Singleton.Instance();Benutzung: s referenziert das

einzige Singleton-ObjektBenutzung: s referenziert das

einzige Singleton-Objekt

Page 14: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

14iTec

Beispiel: Singleton (JAVA)

Einführung 11. Patterns und Frameworks

class Singleton {

private static Singleton s =

new Singleton(99);

private int i;

private Singleton(int x) { i = x; }

public static Singleton Instance() {

return s;

}

public int getValue() { return i; }

public void setValue(int x) { i = x; }

}

public class SingletonPattern {

public static void main(String[] args) {

Singleton s = Singleton.Instance();

System.out.println(s.getValue());

Singleton s2 = Singleton.Instance();

s2.setValue(9);

System.out.println(s.getValue());

}

}

Ausgabe: 999

Page 15: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

15iTec

1. Erzeugungsmuster (creational pattern)beschreiben Strukturen, die den Prozeß der Objekterzeugung enthalten. Das Anwendungsprogramm wird von der konkreten Realisation der Objekterzeugung entkoppelt. Es arbeitet auf einer höheren Abstraktionsebene und delegiert die Erzeugung der Objekte an die Erzeugungsstrukturen

2. Strukturmuster (structural pattern)zeigen auf, auf welche Art und Weise Klassen bzw. Objekte zu größeren Strukturen zusammengefaßt werden können. Nahezu alle der vonStrukturmustern beschriebenen Strukturen entstehen zur Laufzeit, beruhen also auf der Technik derdynamischen Objektkomposition

Einführung 11. Patterns und Frameworks

es gibt drei Pattern Typen

Page 16: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

16iTec

3. Verhaltensmuster (behavioral patterns)beschreiben Strukturen, die am Kontrollfluß innerhalb der Anwendung beteiligt sind. Sie konzentrieren sich also auf Algorithmen und die Delegation von Zuständigkeiten.

Einführung 11. Patterns und Frameworks

es gibt drei Pattern Typen

Page 17: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

17iTec

Einführung 11. Patterns und Frameworks

Page 18: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

18iTec

q Entwickler lernen schnell besseres Design

q Entwickler werden produktiver

q Qualität der Software wird besser

q Kommunikation zwischen Entwicklern wird besser

q Kommunikation bei der Wartung wird besser

Einführung 11. Patterns und Frameworks

Vorteile von Entwurfsmustern

Page 19: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

19iTec

q Nameden wir als Kürzel für das Muster benutzen können, wenn wir uns darüber unterhalten.

q Absicht kurze (1 – 2 Sätze) Beschreibung des Ziels des Patterns

q Problembeschreibt die typische Situation, die eine neue Lösung erfordert. Oft wird hier ein ganz konkretes Problem beschrieben, anhand dessen das einzuführende Muster ausprobiert werden kann.

q Lösungsideeskizziert, wie das Muster aussehen könnte, mit dem das im vorigen Abschnitt beschriebene Problem gelöst werden könnte.

q Strukturwird in einem UML Diagramm angegeben, das die statische Struktur der beteiligten Klassen verdeutlicht.

q Die BeteiligtenHier werden die beteiligten Klassen noch einmal in Worten aufgezählt und ihre Rollen ausführlicher beschrieben.

Patternbeschreibung 11. Patterns und Frameworks

Page 20: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

20iTec

q Zusammenspiel erklärt die Kooperation zwischen den beteiligten Klassen. Dieser Abschnitt enthält oft auch ein (UML) Diagramm, in dem der Austausch von Nachrichten zwischen Objekten verdeutlicht wird.

q Anwendbarkeit beschreibt Situationen, in denen das Muster sinnvoll eingesetzt werden kann, bzw. die Bedingungen, die gelten müssen, damit es eingesetzt werden kann.

q Folgenbeschreibt die Vor- und Nachteile, die dieses Muster mit sich bringt.

q Implementation diskutiert Aspekte, die bei Implementation des Musters zu bedenken sind

q Codebeispielegibt konkrete Implementationen des Musters an anhand eines typischen Problems, in den wichtigsten OO-Sprachen (JAVA, C++)

q Bekannte Anwendungen (bekannt!)q Verwandte Muster

geht auf Beziehungen zwischen diversen Mustern ein; es ist selten so, daß eine Problemklasse nur durch ein einziges Muster allein entschärft wird.

Patternbeschreibung 11. Patterns und Frameworks

Page 21: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

21iTec

q Name Proxyq Absicht

stelle ein Stellvertreter/Platzhalter für ein Objekt zur Verfügung, um über dieses Platzhalter-Objekt Zugriff auf das ursprüngliche Objekt zu garantieren

q Problem manchmal ist die Erzeugung und Initialisierung eines Objektes aufwendig – grosse Datenmenge (z.B. Bilddaten), oder "entlegener" Ort wo das Objekt gespeichert ist (Netz, verteilte DB), oder grosse Anzahl von Objekten bei Initialisierung einer komplexen Anwendung

q Lösungsidee verschiebe die Objektinitialisierung bis zum eigentlichen Gebrauch seitens des Verwenders (Klient), und stelle ihm solange nur ein Stellvertreterobjekt zur Verfügung (Schnittstelle mit den Operationen des eigentlichen Objekts). Der Klient soll den Proxy so sehen als ob er das richtige Objekt wäre.

Proxy 11. Patterns und Frameworks

Page 22: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

22iTec

Proxy 11. Patterns und Frameworks

Struktur

KlientSubjekt{abstract}

operation(). . . ()

operation() {vertritt.operation();

}

EchtesSubjektoperation(). . . ()

Proxyoperation(). . . ()

vertritt

einKlient:einProxy: einEchtesSubjekt:

Klassendiagramm

Objektdiagrammoperation() operation()

Page 23: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

23iTec

q Rollen

Klient: greift auf ein Subjekt über ein Proxy zu, so als ob es ein EchtesSubjekt wäre. Er ist aber nur mit dem Proxy direkt verbunden (Referenz, Zeiger)

Subjekt: stellt die gemeinsame Schnittstelle dar, sodass Proxy überall dort verwendet werden kann, wo eine EchtesSubjekt gebraucht wird. Hält meistens nur die Operationen (alle Attribute von EchtesSubjekt geschützt). Insbesondere stellt Subjekt sicher, dass Proxy und EchtesSubjekt gleich aussehen

Proxy: ist der Ansprechpartner für Nachrichten eines Klients. Hält eine Referenz/Zeiger auf das EchteSubjekt, und ist verantwortlich für die Erzeugung (und evtl. Zerstörung) von EchtesSubjekt.

EchtesSubjekt: enthält die Daten und den Programmcode

Proxy 11. Patterns und Frameworks

Page 24: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

24iTec

Rollen (Fortsetzung)

es gibt mehrere Typen von Proxy:

q Remote-ProxyEchtesSubjekt (Objekte) befindet sich in einem anderen Adressraum (anderer Prozess, oder woanders im Netzwerk). Ein Remote -Proxy kodiert und schickt einen Request an EchtesSubjekt

q Virtuelles Proxyerzeugt ein umfangreiches Objekt im gleichen Adressraum "auf Anfrage"

q Schutz-Proxykontrolliert den (geschützten) Zugriff auf EchtesSubjekt, z.B. über Zugriffsrechte

Proxy 11. Patterns und Frameworks

Page 25: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

25iTec

q ein Remote-Proxy kann einem Klient verbergen, dass das ange-sprochene Objekt (EchtesSubjekt) in anderem Adressraum liegt

q ein Virtuelles Proxy kann optimieren: – verzögerte Objektinitialisierung (vielleicht nie) – Lastausgleich bei initialisierungsintensiven Anwendungen

q ein virtuelles Proxy kann selber einfache Daten halten

Proxy 11. Patterns und Frameworks

Folgen

Page 26: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

26iTec

Proxy 11. Patterns und Frameworks

Page 27: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

27iTec

interface Subjekt {int getA();float getB();

}

class Proxy implements Subjekt {private EchtesSubjekt vertritt;

// delegiere Methodenaufrufe an EchtesS:

public int getA() {

return getEchtesSubjekt().getA(); }

public float getB() {

return getEchtesSubjekt().getB(); }

protected EchtesSubjekt getEchtesSubjekt() {if ( vertritt == null )

vertritt = new EchtesSubjekt();return vertritt;

}}

Proxy 11. Patterns und Frameworks

class EchtesSubjekt implements Subjekt {protected int a;protected int b;public int getA() {

System.out.println("EchtesSub.getA()"); return a; }

public float getB() { System.out.println(" EchtesSub.getB()"); return b; }

public EchtesSubjekt() {a=1; b=1;}}

public class Klient {public static void main(String args[]) {

Proxy p = new Proxy();System.out.println(" a: " + p.getA() );System.out.println(" b: " + p.getB() );

}}

Beispiel in Java: virtueller Proxy

lazy initializationlazy initialization

Page 28: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

28iTec

q Name Zustand/State

q Absichtlass ein Objekt sein Verhalten ändern (Ausführung einer Operation) wenn sein interner Zustand sich ändert

q Problem ein Objekt hat interne Zustände (Attributwerte), die einige seiner Operationen beeinflussen. z.B. Datei öffnen:

Zustand/State 11. Patterns und Frameworks

Dateidateiname : Stringoeffnen()schliessen()weitereOp()

OffeneDateioeffnen()schliessen()

GeschlosseneDateioeffnen()schliessen()

Dateidateiname : Stringoffen : booleanoeffnen()schliessen()weitereOp()

Spezialisierung

Problem: ein Dateiobjekt müsste seine Klasse wechseln können

Page 29: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

29iTec

q Lösungsideelagere den zustandsabhängigen Teil aus der Klasse aus (eigene Klasse), implementiere in der Klasse nur den zustandsunabhängigen Teil, und delegiere zustandsabhängige Operationen an die ausgelagerte Klasse

q Struktur

Zustand/State 11. Patterns und Frameworks

1KlasseMitZustand

opAbhängig()opUnabhängig()

Zustand{abstract}

opAbhängig()

ZustandA

opAbhängig()

ZustandB

opAbhängig(). . .

operation() {state.opAbhängig();

}

state

Zustandsänderung: - wie wird er geändert ?- wer bzw. wo wird ein Zustand geändert ?

Page 30: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

30iTec

q KlasseMitZustanddie eigentliche Klasse, die nur den zustandsunabhängigen Teil enthält (evtl. mit Operationen die den Zustand verändern). Sie hält eine Referenz auf den aktuellen Zustand, über die zustandsabhängige Operationen delegiert werden.

q Zustandabstrakte Schnittstelle (Polymorphismus) für die delegierten, zustandsabhängigen Operationen

q konkreter Zustand (ZustandA, ZustandB) implementieren die zustandsabhängigen Operationen

Zustandsänderungen: ersetze aktuell referenziertes Zustandsobjekt durch ein neues

Zustand/State 11. Patterns und Frameworks

Rollen

Page 31: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

31iTec

1. wenn ein Objekt Operationen hat, deren Logik von einem Zustand des Objektes selber abhängt der sich zur Laufzeit ändern kann

2. das Objekt wenig Zustände hat und die Zustandsübergänge selber einen einfache Zustandsübergangsgraphen besitzen

3. falls 2 nicht erfüllt ist, empfiehlt sich eine Realisierung mit einem endlichen Zustandsautomat

Zustand/State 11. Patterns und Frameworks

Anwendbarkeit:

Page 32: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

32iTec

Zustand/State 11. Patterns und Frameworks

wenn man komplexe Zustandsübergänge hat, benutzt man vorzugsweiseeinen endlichen Zustandsautomaten:

Zustandz_i

Zustandz_j

Ereignis e_k/

Aktion a_m

( z_j ,a_m )

(folge-zustand, aktion)

ZustandEreignisz_1 z_2 . . . z_i . . .

e_1

e_2

. . .

e_k. . .

im Zustand z_j führt das Ereignis e_k zumFolgezustand z_j undlöst Akton a_m aus

im Zustand z_j führt das Ereignis e_k zumFolgezustand z_j undlöst Akton a_m aus Darstellung in einer

Tabelle von Paaren:(folgezustand,aktion)

Darstellung in einerTabelle von Paaren:(folgezustand,aktion)

Page 33: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

33iTec

ComplexClass

...actState : Stateact : Action;...

StateTransitionTable

stTable //state table

create(ComplexClass cp) //loads tablesave()addState( State st )addEvent( Event ev )addTransition(State st1, State st2,

Event ev, Action act)removeState(...) ...State transit( State st, Event ev,

Action &act)

event1(..) {//operation op1 implements event 1

actState = hasSTT.transit(actState, E1, act );

switch (act) {case A1: action1(..); //execute action

break;case A2: action2(..);

. . .} event2(..) ...action1(..) //action A1action2(..) //action A2. . .

hasSTT

1..* 1

Zustand/State 11. Patterns und Frameworks

Page 34: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

34iTec

q es strukturiert das Objektverhalten nach Zuständen: – jede Zustandsklasse enthält die Zustandsbesonderheiten – leichter les- und vor allem wartbar

q unterstützt Zustandsklassifizierung: Zustände sind manchmal klassifizierbar durch Super-/Subklassenbeziehungen

q Zustände werden explizit gemacht

Zustand/State 11. Patterns und Frameworks

Konsequenzen

Page 35: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

35iTec

q Name: Beobachter (Observer)

q AbsichtObjekte können Daten bei einem Informationsanbieterabonnieren. Bei jeder Änderung der abonnierten Daten werden die Abonnenten automatisch über die Änderung informiert, die sich dann die geänderten Daten holen.

q Problem voneinander abhängige Objekte sollen nicht zu stark aneinander gekoppelt werden, was Wiederverwendbarkeit einschränken würde.

q Lösungsidee Trennung von Informationsbereitsteller und einer Menge vonInformationsverarbeitern bzw. Darstellern der Information. Die Bereitsteller müssen die Verarbeiter nicht direkt kennen: statt direkter Kommunikation über Aufrufe benutze eine indirekte über Benachrichtigungen.

Beobachter/Observer 11. Patterns und Frameworks

Page 36: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

36iTec

Subjekt{abstract}

#benachrichtigen()+registrieren(beob:Beobachter)+löschen(beob:Beobachter)

Beobachter{abstract}

+aktualisieren(. . . )

1..* ? beobachtet*

MeinSubjekt

+getMeineDaten(): Data+setMeineDaten(d:Data). . .

-meineDaten : DataClient

setMeineDaten(x)

MeinBeobachter

+aktualisieren(. . . )

- zustand

- beobachtet : Subjekt

beobachtet.getMeineDaten();. . . //aktualisiere zustand

. // bearbeite und

. // aktualisiere

. // meineDatenbenachrichtigen();

beobachtetVon ?

- beobachtetVon : ListOfBeobachter

für alle beo in beobachtetVon:beo.aktualisieren(. . . );

Struktur

Beobachter/Observer 11. Patterns und Frameworks

Page 37: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

37iTec

Teilnehmerq Subjekt

kennt seine Beobachter (beliebig viele) als abstrakte Beobachter; bietet Schnittstelle zur (Ent)Registrierung von Beobachtern; hat Operation zur Benachrichtigung registrierter Beobachter

q Beobachterbietet einen Typ (abstrakte Klasse/Interface) der benachrichtigtwerden kann von Subjekten

q MeinSubjektwird unabhängig von Beobachtern programmiert: hält aber Daten von denen Beobachter-Objekte abhängig sind; sendet (fast automatisch) Benachrichtigungen an Beobachter-Objekte wenn Daten sich ändern

q MeinBeobachter ist abhängig und hält eine Referenz zu einem MeinSubjekt-Objekt; enthält Daten die mit Daten des Subjekts konsistent sein müssen;implementiert die aktualisiere-Operation zur Benachrichtigung

Beobachter/Observer 11. Patterns und Frameworks

Page 38: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

38iTec

Beobachter/Observer 11. Patterns und Frameworks

Zusammenspielq jedes Objekt der Klasse Subjekt führt eine Liste von Beobachtern, welche

an Veränderungen im Zustand dieses Objekts interessiert sind. registrierenbzw. loeschen fügt Beobachter in die Liste ein bzw. entfernt sie.

q nach jeder Veränderung schickt das Subjekt sich selbst die Nachricht benachrichtigen. Diese iteriert die Liste der Beobachter und schickt jedem Beobachter die Nachricht aktualisieren. Ggf. können Informationen (z. B. die Art des eingetretenen Ereignisses, oder das benachrichtigende Objekt selber) als Parameter mitgegeben werden.

q jeder benachrichtigte Beobachter reagiert, indem er beim benach-richtigenden Sujekt mit getXXX- Nachrichten die ihn interessierenden Informationen abruft.

q alternativ können der aktualisiere-Nachricht die veränderten Daten gleichmitgegeben werden, wodurch der Abruf durch getXXX entfällt. Dieses"Bring"-Prinzip ist effizient, koppelt aber Subjekt und Beobachter stärker als das mit getXXX realisierte "Hol"-Prinzip.

Page 39: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

39iTec

Beobachter/Observer 11. Patterns und Frameworks

ms :MeinSubjekt

Zusammenspiel

mb :MeinBeobachter

registrierenmb

setMeineDaten

benachrichtigen

aktualisieren

db :DeinBeobachter

aktualisieren

getMeineDatenData

dbregistrieren

getMeineDatenData

Page 40: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

40iTec

q wenn eine Änderung in einem Objekt Änderungen in anderen verlangt, und das erstere weiss zur Programmierzeit oder zum Systemstart nicht, welche anderen von ihm abhängen

q wenn man also dynamische Abhängigkeiten hat

q wenn man Abhängigkeiten in reinen Client/Server-Beziehungen modellieren möchte zwecks leichterer Änderbarkeit

Anwendbarkeit

Beobachter/Observer 11. Patterns und Frameworks

Clientklasse Serverklasse

weiss von

weiss nichts von

Page 41: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

41iTec

q schwache, einseitige Kopplung zwischen unabhängiger und abhängigen Klassen: erstere kennt nur eine abstrakte Schnittstelle zur Benachrichtigung

q sauberer Design: Aktualisierungslogik im abhängigen Teil, nicht im bestimmenden (nur benachrichtigen, nicht aktualisieren)

q dadurch können die beiden Klassentypen zu unterschiedlichen Systemebenen gehören (nächste Folie)

q unterstützt eine Art Broadcasting

Beobachter/Observer 11. Patterns und Frameworks

Folgen

Page 42: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

42iTec

Beobachter/Observer 11. Patterns und Frameworks

bekannte Anwendungenvon Präsentationsschicht unabhängige Anwendungslogik

GUI-Kom-ponente1

GUI-Kom-ponente2

GUI-Kom-ponente3

Präsentationsschicht

Klasse1 Klasse2

Anwendungslogikschicht

Abhängigkeit

GUI-Komponenten repräsentierenDaten der Anwendungslogikschicht

GUI-Komponenten repräsentierenDaten der Anwendungslogikschicht

Klassen der Anwendungslogikschichtverarbeiten Daten, ohne sie am Bild-schirm zu präsentieren

Klassen der Anwendungslogikschichtverarbeiten Daten, ohne sie am Bild-schirm zu präsentieren

Page 43: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

43iTec

q wann soll die Registrierung (Löschen) geschehen?meistens im Konstruktor (Destruktor) eines Beobachters

q mehrere Subjekte: wie erkennen, welches Subjekt benachrichtigt?Parameter des Subjektes (this) bei Benachrichtigung übergeben

q muss immer gleich aktualisiert werden?nein, man kann eine lazy-computing Technik einsetzen

Beobachter/Observer 11. Patterns und Frameworks

Implementation

Page 44: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

44iTec

MeinBeobachter

-meinAttribut: Typ //abhängiges Attr.-meinAttributStatus //valid/invalid

+benachrichtige() +getMeinAttribut(): Typ

Typ getMeinAttribut() {if (meinAttributStatus == invalid){

beobachtet.getMeineDaten();. . . //Neuberechnung von meinAttribut

meinAttributStatus = valid; }return meinAttribut; }

Beobachter/Observer 11. Patterns und Frameworks

void benachrichtige() {

meinAttributStatus = invalid;}

Client

getMeinAttribut()

lazy computing: erst dann berechnen, wenn Daten gebraucht werden

Vorteil:weniger Berechnungen, falls Subjekt wesentlich öfter benachrichtigt alsBeobachter befragt wird

Page 45: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

45iTec

Beobachter/Observer 4. Patterns und Frameworkspublic abstract class Subje kt {

private Beobachter[] beobachtetVon = new Beobachter[MAXB];

private int anzBeobachter = 0;

public void registrieren( Beobachter beob ) {beobachtetVon[ anzBeobachter++] = beob;

}

public void löschen( Beobachter beob ) {for ( int i = 0; i < anzBeobachter; ++i ) {

if (beobachtetVon[i] == beob) {- - observerCnt;for ( ; i < anzBeobachter; ++i)

beobachtetVon[ i ] = beobachtetVon[ i + 1 ]; break;

}}

}

public void benachrichtigen() {for (int i = 0; i < anzBeobachter; ++i)

beobachtetVon[i].aktualisieren( this );}

}

public class MeinSubjekt extends Subjekt {

private int wert;

public MeinSubjekt( int wert ) {this.wert = wert;

}

public void setWert( int wert ){

this.wert = wert;benachrichtigen();

}

public int getWert() {return wert;

} }

Page 46: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

46iTec

public class Anwendung {public static void main( String[] args )

MeinSubjekt sub = new MeinSubjekt( 99 );

MeinBeobachter beo = new MeinBeobachter( sub );

System.out.println( "abhgWert: " +beo.getAbhgWert() );

}}

sub.setWert( 2 );

Beobachter/Observer 11. Patterns und Frameworks

interface Beobachter {public void aktualisieren( Subje kt subjekt );

}

public class MeinBeobachter implements Beobachter {

int abhgWert; //abhängiger Wert

public MeinBeobachter( Subjekt subjekt ) {abhgWert = subjekt.getWert() / 2;subjekt.registrieren( this );

}

public void aktualisieren( Subjekt subjekt ) {abhgWert = subjekt.getWert() / 2; //zum Beispiel

}

public int getAbhgWert() { return abhgWert;

}}

hier wird im Hintergrund der abhängige Wert von MeinBeobachter aktualisiert.Ausgabe: abhgWert: 1

hier wird im Hintergrund der abhängige Wert von MeinBeobachter aktualisiert.Ausgabe: abhgWert: 1

Page 47: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

47iTec

Adapter 11. Patterns und Frameworks

q Name: Adapter

q Absichterlaubt die Zusammenarbeit von Klassen die unterschiedliche Schnitt-stellen haben. Adapter wird als verbindendes Element zwischen die beiden Klassen eingefügt.

q ProblemSchnittstellenproblem: eine Klasse "Verwender" (Klient) soll eine andere Klasse "Dienstanbieter" (Ziel) verwenden. Der Verwender kann jedochauf den Dienstanbieter nicht zugreifen, da der Verwender eine andere Schnittstelle erwartet als die, die vom Dienstanbieter angeboten wird.

q LösungsideeDer Dienstanbieter wird in einen Adapter eingepackt. Der Adapterbietet die Schnittstelle an, die der Verwender benötigt.

Dazu gibt es zwei Varianten:• Objektadapter• Klassenadapter

Adapter

Page 48: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

48iTec

Adapter 11. Patterns und Frameworks

Struktur: Objektadapter

Adaption:q andere Operationensignatur – Operations- und Parameternamen,

Parametertypen und -reihenfolge q andere Operationsfunktionen – ähnliche, aber nicht genau gleiche

Semantik

Klient Zieloperation()

AdaptierteKlassespezifischeOperation()

Adapteroperation()

operation(). . .

adaptiert.spezifischeOperation(). . .

adaptiertbenutzt

Page 49: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

49iTec

Adapter 11. Patterns und Frameworks

GraphischesObjekt{abstract}

begrenzungsRahmen()zeichne()

Linie

begrenzungsRahmen()zeichne()

Zeicheneditor 1 manipuliert *

Kreis

begrenzungsRahmen()zeichne()

zeichne()begrenzungsrahmen()

TextAnzeige

getUrsprung()getHoehe()getBreite()zeigMich()

Adapter Beispiel: ein Zeicheneditor mit fremder Komponente TextAnzeige

TextAnzeige passt nicht zu GraphischesObjekt: Problem für den Zeicheneditor

Page 50: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

50iTec

Adapter 11. Patterns und Frameworks

GraphischesObjekt{abstract}

begrenzungsrahmen()zeichne()

Linie

begrenzungsrahmen()zeichne()

Zeicheneditor 1 manipuliert *

Kreis

begrenzungsrahmen()zeichne()

zeichne()begrenzungsrahmen()

TextAnzeige

getUrsprung()getHoehe()getBreite()zeigMich()

Adapter Beispiel: ein Zeicheneditor mit fremder Komponente TextAnzeige

Text

begrenzungsrahmen()zeichne()

1text

1

begrenzungsrahmen()

text.getHoehe()text.getBreite()

. . .

zeichne(). . .

text.zeigMich(). . .

einseitige Beziehung: TextAnzeige auch ohne Quellcode verwendbar

einseitige Beziehung: TextAnzeige auch ohne Quellcode verwendbar

Page 51: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

51iTec

Adapter 11. Patterns und Frameworks

Struktur: Klassenadapter

Klient Zieloperation()

AdaptierteKlassespezifischeOperation()

Adapteroperation()

operation(). . .

spezifischeOperation(). . .benutzt Mehrfachvererbung

Page 52: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

52iTec

q Klassenadapterbenutzt nur eine Objekt, während Objektadapter aus zwei bestehen

q Objektadapterkann auch Objekte von Unterklassen der adaptierten Klasseadaptieren, was der Klassenadapter nicht kann

Adapter 11. Patterns und Frameworks

Folgen

Page 53: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

53iTec

Adapter 11. Patterns und Frameworks

Implementation in JAVA: Objektadapter mit einem Interfaceclass WasIchHabe {public void g() {}public void h() {}

}

interface WasIchMoechte {void f();

}

class WasIchBenutze {public void op(WasIchMoechte wim) {

wim.f();}

}

class Adapter implements WasIchMoechte {//Referenz auf was adaptiert werden soll

private WasIchHabe wasichhabe;//Konstruktor verbindet Adapter mit WasIchHabe

public Adapter(WasIchHabe wih) {wasichhabe = wih;

}public void f() {

// Implementiert Methode mit den// Methoden in WasIchHabe:

wasichhabe.g();wasichhabe.h();

}}

WasIchBenutze WasIchMoechte WasIchHabe

Adapter

Page 54: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

54iTec

Kompositum 11. Patterns und Frameworks

Zweck

Füge Objekte zu Baumstrukturen zusammen, um Teil-Ganzes-Hierarchien zu repräsentieren.

Das Kompositionsmuster ermöglicht es dem Klienten (Benutzer dieses Musters), sowohl einzelne Objekte als auch Kompositionen von Objekten einheitlich zu behandeln.

Motivation

viel verwendet in Grafik-Anwendungen und im Produktionsbereich (Produktbäume)

Page 55: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

55iTec

Grafik

zeichne()hinzufügen(Grafik)entfernen(Grafik)holeNächstesKind()

Linie

zeichne()

Bild

zeichne() //Delegation!!hinzufügen(Grafik g)entfernen(Grafik)holeNächstesKind()

*

{abstract}

Kompositum 11. Patterns und Frameworks

Beispiel:Grafikanwendung

enthält

Rechteck

zeichne()

Text

zeichne()

für alle g in "enthält":g.zeichne();

für alle g in "enthält":g.zeichne();

füge g ein in"enthält"füge g ein in"enthält"

Page 56: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

56iTec

Kompositum 11. Patterns und Frameworks

Page 57: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

57iTec

Kompositum 11. Patterns und Frameworks

Komponente • Deklariert die Schnittstelle für Objekte in der zusammengefügten Struktur. • Implementiert, sofern angebracht, ein Defaultverhalten für die allen Klassen gemeinsame

Schnittstelle (ist in JAVA dann abstrakte Klasse). • Deklariert eine Schnittstelle zum Zugriff auf und zur Verwaltung von Kindobjekten. • Definiert optional eine Schnittstelle zum Zugriff auf das Elternobjekt einer Komponente

innerhalb der rekursiven Struktur und implementiert sie, falls dies angebracht erscheint.

Blatt • Repräsentiert Blattobjekte in der Komposition. Ein Blatt besitzt keine Kindobjekte. • Definiert Verhalten für die primitiven Objekte in der Komposition.

Kompositum • Definiert Verhalten für Komponenten, die Kindobjekte haben können. • Speichert Kindobjektkomponenten. • Implementiert kindobjekt-bezogene Operationen der Schnittstelle von Komponente.

Klient • Manipuliert die Objekte in der Komposition durch die Schnittstelle von Komponente.

Rollen

Page 58: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

58iTec

Kompositum 11. Patterns und Frameworks

Verwende das Kompositionsmuster, wenn

• Teil-Ganzes-Hierarchien von Objekten repräsentiert werden sollen

• KKKlienten in der Lage sein sollen, die Unterschiede zwischen zusammengesetzten und einzelnen Objekten zu ignorieren. Klienten behandeln alle Objekte in der zusammengesetzten Struktur einheitlich.

Verwendung

Page 59: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

59iTec

q gewünscht: eine Klasse eines binären Suchbaums, dessen Objekte auch leer sein können: Binärbaum ohne Elemente

q Anforderung: der leere Baum muss genauso ansprechbar sein wie ein nichtleerer binärer Suchbaum: also mit Operationen– isEmpty(), isIn(Object o), insert(Object o)

q ein leerer Baum kann also nicht als Nullreferenz realisiert werden !

ein binärer Suchbaum: Entwurf als Kompositum und mit leerem Baum als Singleton

Singleton/Kompositum 11. Patterns und Frameworks

Beispiel

Page 60: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

60iTec

Singleton/Kompositum 11. Patterns und Frameworks

«Interface»BinSearchTree

isEmpty(): booleanisIn(Object o): booleaninsert(Object o): BinSearchTree

«Singleton»EmptyTree

empty: EmptyTree

isEmpty(): booleanisIn(Object o): booleaninsert(Object o): BinSearchTree

Node

info: ObjectleftChild: BinSearchTreerightChild: BinSearchTree

isEmpty(): booleanisIn(Object o): booleaninsert(Object o): BinSearchTree

hasFatherhasChild 0..2

0..1

ein binärer Suchbaum: Entwurf als Kompositumund mit leerem Baum als Singleton

Page 61: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

61iTec

empty:EmptyTree:ClientClass

Instance()

insert(o1)

b:Node

b = EmptyTree.Instance()

new(o1)b = b.insert(o1)

b = b.insert(o2)insert(o2)

b.leftChild:Nodenew(o2)

b = b.insert(o3)insert(o3)

b.rightChild:Nodenew(o3)

{b.info < o1}

{b.info > o2}

Singleton/Kompositum 11. Patterns und Frameworks

ein binärer Suchbaum: Entwurf als Kompositum und mit leerem Baum als Singleton

Page 62: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

62iTec

public interface BinSearchTree {

boolean isEmpty();

boolean isIn(Object e);

BinSearchTree insert(Object e);}//----------------------------------------------------------------public class EmptyTree implements BinSearchTree {

private static EmptyTree empty = new EmptyTree();

private EmptyTree() {}

public static EmptyTree Instance() { return empty;

}

public boolean isEmpty() { return true; }

public boolean isIn(Object e) { return false; }

public BinSearchTree insert(Object e) {return new Node(e);

}}

ein binärer Suchbaum: JAVA Code

Benutzung: Instance() als "Konstruktor"gibt einziges empty alsEmptyTree-Objekt heraus

Benutzung: Instance() als "Konstruktor"gibt einziges empty alsEmptyTree-Objekt heraus

alle Konstruktoren sind damit privat

alle Konstruktoren sind damit privat

einzige Instanz alsKlassenattribut

einzige Instanz alsKlassenattribut

hier wird aus dem einzigenEmptyTree-Objekt jeweilsein neuer Baum erzeugt der nur aus einer Wurzel besteht

hier wird aus dem einzigenEmptyTree-Objekt jeweilsein neuer Baum erzeugt der nur aus einer Wurzel besteht

Singleton/Kompositum 11. Patterns und Frameworks

Page 63: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

63iTec

public class Node implements BinSearchTree {

protected Object info;protected BinSearchTree left;protected BinSearchTree right;

public Node(Object info) {

this.info = info;

left = EmptyTree.Instance();

right = EmptyTree.Instance();

}

public boolean isEmpty() { return false; }

public boolean isIn(Object e) {switch ( info.compareTo(e) ) {

case -1: return left.isIn(e);case 0: return true;case +1: return right.isIn(e);

}return false;

}

public BinSearchTree insert(Object e) {

switch ( info.compareTo(e) ) {case -1:

left = left.insert(e);break;

case 0: break;case +1:

right = right.insert(e);break;

}return this;

}}

Singleton/Kompositum 11. Patterns und Frameworks

Kompositum: füge leere Bäume als Blätter ein

Kompositum: füge leere Bäume als Blätter ein

Page 64: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

64iTec

Singleton/Kompositum 11. Patterns und Frameworks

public static void main( String args[ ] ) {

BinSearchTree tree = EmptyTree.Instance();

tree = readTree( tree, "dateiname" );

. . .

}

public BinSearchTree readTree( BinSearchTree bst, String datei ) {int wert;

// in einer Schleife werte einlesen. . .

bst = bst.insert( Integer(wert) );

. . .}

Benutzung des binären Suchbaumes

Achtung: falls ein leerer Baum übergeben wird, ändert sich die Objektreferenz durch die Einfügung des ersten Knotens

Achtung: falls ein leerer Baum übergeben wird, ändert sich die Objektreferenz durch die Einfügung des ersten Knotensunser Binärbaum hat allgemeine

Knoten, die Informationen vom Typ Object halten (keine Templates!)Deshalb: Wrapperklasse um denIntegerwert!

unser Binärbaum hat allgemeine Knoten, die Informationen vom Typ Object halten (keine Templates!)Deshalb: Wrapperklasse um denIntegerwert!

Page 65: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

65iTec

Kompositum 11. Patterns und Frameworks

wichtig beim Kompositum ist die Unterscheidung von Klassen- undObjektbäumen – das Kompositum generiert Objektbäume

Klasse1

Klasse12Klasse11

Klasse122Klasse121

objA

objCobjB

objEobjDobjF

q Klassenbäume sind statische Vererbungshierarchienq Objektbäume sind dynamisch erzeugte Bäume mit Knotenobjekten

Page 66: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

66iTec

q Name: Dekorierer (decorator oder wrapper)

q Absicht: füge einem Objekt dynamisch Zusatzfunktionalität hinzu

q Problem: wenn man zu einer Basisfunktionalität wie Grafikdar-stellung oder einer Ein-/Ausgabe vielfache Zusatzfunktionalität wie in einem Baukasten frei kombinierbar hinzufügen möchte, ergibt sich rasch eine kombinatorische Vielfalt, die man nur noch schwer in einer statischen Klassenstruktur darstellen und warten kann.

q Lösungsidee: kombiniere die Zusatzfunktionalität dynamisch in einer Umhüllung in mehreren Schichten (Wrapper) um das ursprüngliche Objekt herum. Jede Hülle (Dekoriererklasse) kann genauso angesprochen werden wie das ursprüngliche Objekt

Dekorierer 11. Patterns und Frameworks

Page 67: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

67iTec

Dekorierer

+operation()

KonkreterDekoriererA

+operation()#zusatzOperationA()

+operation()#zusatzOperationB()

{abstract}

Komponente

+operation()

{abstract}1

hatKomponente

KonkreteKomponente

+operation()

KonkreterDekoriererB

. . .

Struktur

Dekorierer 11. Patterns und Frameworks

operation() {zusatzoperationA();//sende operation weiter:hatKomponente.operation();

}

Page 68: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

68iTec

q Komponente: die Schnittstelle für einen Klienten zum Gebrauch eines dekorierten Objektes

q KonkreteKomponente: Objekt, das eine Basisfunktionalität bereitstellt welche mit Zusatzfunktionalität dekoriert werden kann

q Dekorierer: enthält eine Referenz zu einer weiteren Komponente auf der die Operation weitergesandt wird

q KonkreterDekorierer: fügt Zusatzfunktionalität zur Operation der KonkretenKomponente hinzu (dekoriert)

Dekorierer 11. Patterns und Frameworks

Rollen

Page 69: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

69iTec

Dekorierer 11. Patterns und Frameworks

Zusammenspiel

kp:KonkreteKomponente

dA:KonkreterDekoriererA

hatKomponente

dB:KonkreterDekoriererB

hatKomponente

operation() zusatzOperationA()

operation() zusatzOperationB()

operation()

Page 70: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

70iTec

Decorator

+draw()

BorderDecorator

+draw()#borderDraw()

ScrollDecorator

+draw()#scrollDraw()

{abstract}

Component

+draw()

{abstract} 1

hasComponent

TextView

+draw()

SW1:ScrollDecorator

draw()

BW1:BorderDecorator

draw()

T1:TextView

draw()

hasComponent. draw()borderDraw()

. . . /*display text*/ . . .

Beispiel

Dekorierer 11. Patterns und Frameworks

hasComponent. draw()scrollDraw()

Page 71: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

71iTec

q die Verbindung der Komponenten über hatKomponente wird im Konstruktor erzeugt:

KonkreteKomponente kp = new KonkreteKomponente();KonkreterDekoriererA kdA = new KonkreterDekoriererA( kp ); //kdA mit kp verbundenKonkreterDekoriererB kdB = new KonkreterDekoriererB( kdA ); //kdB " kdA ". . .kdB.operation();

oder:

KonkreterDekoriererB kdB = new KonkreterDekoriererB( new KonkreterDekoriererA(

new KonkreteKomponente( ) ) );

Dekorierer 11. Patterns und Frameworks

Konsequenzen

KonkreterDekoriererB

KonkreterDekoriererA

KonkréteKomponente

Page 72: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

72iTec

q das Muster erlaubt, alle Kombinationen von Zusatzfunktionalität in einer einfachen Klassenstruktur zu beschreiben. Eine explizite Beschreibung wäre sehr aufwendig.

q es ist einfach, neue Zusatzfunktionalität einzufügen

q Nachteil: das vom Klienten angesprochene Objekt ist ein Dekorierer, nicht das Hauptobjekt (KonkreteKomponente): alle Dekorierer müssen sämtliche Operationen des Hauptobjekts anbieten, auch wenn sie diese nicht dekorieren

allerdings können diese Operationen für alle Konkreten-Dekorierer in der (abstrakten) Superklasse Dekorierer mit einfacher Delegation an das Hauptobjekt implementiert werden(siehe nächste Folie)

Dekorierer 11. Patterns und Frameworks

Konsequenzen

Page 73: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

73iTec

Dekorierer

+operation1()+operation2()+operation3()

KonkreterDekoriererA

+operation()#zusatzOperationA()

+operation()#zusatzOperationB()

{abstract}

Komponente

+operation1()+operation2()+operation3()

{abstract}

1

hatKomponente

KonkreteKomponente

+operation1()+operation2()+operation3()

KonkreterDekoriererB

. . .

Dekorierer 11. Patterns und Frameworks

operation1() {zusatzoperationA();//sende operation weiter:hatKomponente.operation1();

}

operation2() {hatKomponente.operation2();

}operation3() {

hatKomponente.operation3();}

nichtdekorierte Operationenwerden einfach zur KonkretenKomponentedurchgereicht

Page 74: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

74iTec

Dekorierer 11. Patterns und Frameworks

Zusammenspiel: Durchreichen nichtdekorierter Operationen

kp:KonkreteKomponente

dA:KonkreterDekoriererA

hatKomponente

dB:KonkreterDekoriererB

hatKomponente

operation3()

operation3()

operation3()

Page 75: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

75iTec

Objektfabriken 11. Patterns und Frameworks

Problem:

Polygon[] pPZ;. . .pPZ[k++] = new Dreieck(p1,p2,p3);. . .pPZ[k++] = new Rechteck(lo, ru);. . .pPZ[k++] = new Polygon(parray);. . .optimiereLayout( pPZ, k ) ;

. . .pPZ

alles wird zu Polygonvoid optimiereLayout( Polygon[] pP, int anzahl) {. . .for ( i=0; i < anzahl; i++ ) {

f[i] = pP[i].berechneFlaeche();. . .pP[i].verschieben(dx, dy);pP[i].fuellen( rot );

}. . .

Polymorphismus in Vererbungs-hierarchien: man kann Spezialisierungenpolymorph benutzen, und neueSpezialisierungen verlangen keineÄnderung bei der Benutzung: schön!

Aber:irgendwo muss man die Objekteerzeugen - und da muss mankonkret werden. Diese Erzeugungenkönnen weit verstreut sein - eineÄnderung wird aufwendig und

fehleranfällig

Änderungswunsch:DreieckMitGrafik(

p1, p2, p3 )

Änderungswunsch:DreieckMitGrafik(

p1, p2, p3 )

Page 76: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

76iTec

Objektfabriken 11. Patterns und Frameworks

Lösungsidee:

kann man nicht auch die Erzeugung kapseln - und dann sogarpolymorph gestalten?

Antwort: ja, und zwar in einer "Objekterzeugungsfabrik" - Object Factory

Objektfabrikerzeuge (gewünschtesObjekt ) neues Objekt

FigurenFabrikerzeuge( Dreieck) neues Dreieck

new DreieckMitGrafik(...)

Fabrikmuster sindErzeugungsmusterFabrikmuster sindErzeugungsmuster

Page 77: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

77iTec

Objektfabriken 11. Patterns und Frameworks

abstract class Figur {public abstract void zeichne();public abstract void lösche();

}

class Kreis extends Figur {Kreis() {} //Konstruktor mit Paketsichtbarkeitpublic void zeichne() { System.out.println("Kreis.zeichne");

}public void lösche() { System.out.println("Kreis.loesche");

}}

class Rechteck extends Figur { . . .

1. Schritt:wie man die Erzeugung von Objekten kapseltpublic static Figur fabrik( String typ )

throws FalscheFigurenErzeugung {if ( typ.equals("Kreis") ) return new Kreis();if ( typ.equals("Rechteck") ) return new Rechteck();throw new FalscheFigurenErzeugung( typ );

}

Page 78: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

78iTec

Objektfabriken 11. Patterns und Frameworkspublic class FigurenFabrik1 {String figlist[] = { "Kreis", "Rechteck",

"Rechteck", "Kreis", "Kreis", "Rechteck" };List figuren = new ArrayList();

public void test() {try {

for( int i = 0; i < figlist.length; i++)figuren.add( );

} catch( FalscheFigurenErzeugung e ) {System.out.println( e.getMessage() );

}Iterator figIt = figuren.iterator();while( figIt.hasNext() ) {Figur f = (Figur)figIt.next();f.zeichne();f.lösche();

}}public static void main(String args[]) {

new FigurenFabrik1().test();}

}

Figur.fabrik( figlist[i] )

Page 79: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

79iTec

Objektfabriken 11. Patterns und Frameworks

ProduktFabrikcreate(. . .): Produktfabrik( . . . ): Produkt

Produkt

operation1(..)operation2(..). . .

Meu fabrik(. . .) {return create(. . .);

}

Produkt fabrik(. . .) {return create(. . .);

}

KonkretesProduktFabrikcreate(. . .): ProduktKonkretesProdukt

KonkretesProdukt(..)operation1(..)operation2(..). . .

(Konstruktor)

(Name)

Abhängigkeit (UML)

Klientfabrik(..)

2. Schritt: wie man eine polymorphe Erzeugung bereitstellt:das Fabrikmuster

Eine Anwendung benutzt die Produktfabrik, um Objekte zu erzeugen. Die KonkreteProduktFabrik erzeugt ein KonkretesProdukt, dessen Klasse für die Anwendung transparent ausgetauscht werden kann.

abstrakte Klasse:Product fabrik(..)

nicht implementiert

abstrakte Klasse:Product fabrik(..)

nicht implementiert

Page 80: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

80iTec

Objektfabriken 11. Patterns und Frameworks

Fabrik-Beispiel: eine Menufabrik

Menufabrik

create(titel:String): Menufabrik(titel:String): Menu

Menu

addOption(option:String)removeOption(option:String)select(): String. . .

Menu fabrik(String titel) {return create(titel);

}

Menu fabrik(String titel) {return create(titel);

}

AWTMenufabrik

create(titel:String): Menu

KonsoleMenufabrik

create(titel:String): Menu

KonsoleMenu

addOption(option:String)removeOption(

option:String)select(): String. . .

AWTMenu

. . .

Page 81: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

81iTec

Objektfabriken 11. Patterns und Frameworks

das Fabrikmuster kapselt die Erzeugung von Objekten einer Klasse. Häufig sind aber Objekte mehrerer zusammenhängender Klassen in einer Fabrik zu erzeugen.

das AbstrakteFabrik Muster

Objekt1fabrikerzeuge (gewünschtesObjekt1 ) neues Objekt1

Objekt2fabrikerzeuge (gewünschtesObjekt2 ) neues Objekt2

gemeinsame Basis(z.B. graphische Menuelemente ein

bestimmtes Betriebssystem)

Page 82: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

82iTec

Objektfabriken 11. Patterns und Frameworks

AbstrakteFabrik: die Struktur

Page 83: Entwurfsmuster -   · PDF fileDesign-Patterns und Frameworks, ... (JAVA) – für verteilte OO -Systeme – CORBA, DCOM Einführung 11. Patterns und Frameworks. 8 iTec qIdiom

83iTec

q wenn man eine Anwendung braucht, die von der Erzeugung ihrer "Produkte" und deren Komposition/Aggregation unabhängig sein soll

q wenn man Produktfamilien hat

q im Design von Klassenbibliotheken

Objektfabriken 11. Patterns und Frameworks

Anwendbarkeit von Abstrakten Fabriken

da Polymorphismus einer der Pfeiler des objektorientierten Ansatzes ist,und eine polymorphe Objekterzeugung das Gegenstück zu polymorpher Benutzung von Objekten ist, ist das Fabrikmuster eines der am weitesten verbreiteten überhaupt!