ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie...

75
1 iTec Entwurfsmuster

Transcript of ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie...

Page 1: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

1

iTec

Entwurfsmuster

Page 2: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

2

iTec

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

wie werden Patterns beschrieben ?

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

Inhalt 4. Patterns und Frameworks

Page 3: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

3

iTec

Software-Entwicklung ist mühsam

wiederverwendbare Software zu schreiben, ist noch mühsamer

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

Einführung 4. Patterns und Frameworks

was ist und wozu braucht man Patterns und Frameworks?

Page 4: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

4

iTec

Christopher Alexander (1977): A Pattern Language

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

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

legten einen bis heute massgebenden Katalog von 23 Patterns vor

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

Einführung 4. Patterns und Frameworks

Geschichte der Patterns

Page 5: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

5

iTec

zunächst einige wichtige Begriffe

Software Design

Die 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. .

der Design enthält nicht die Implementation des Systems

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

der Design wird methodisch und mit Diagrammtechniken erarbeitet

Einführung 4. Patterns und Frameworks

Page 6: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

6

iTec

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 4. Patterns und Frameworks

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

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

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

Page 7: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

7

iTec

wichtige Begriffe

Framework

Ein 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..

Frameworks sind die grösstmöglich vorgefertigten Systemrohbauten

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 4. Patterns und Frameworks

Page 8: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

8

iTec

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

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

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

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

Einführung 4. Patterns und Frameworks

Pattern Einordnung

Page 9: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

9

iTec

lerne Regeln Figurenamen und –zugmöglichkeiten, Schachbrettgeometrie etc.

lerne Prinzipien relativer Figurenwert, strategischer Wert des Brettzentrums, Angriffsvermögen etc.

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

wie wird man ein guter Schachspieler?

Einführung 4. Patterns und Frameworks

Page 10: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

10

iTec

lerne Regeln Algorithmen, Datenstrukturen, Programmiersprachen

lerne Prinzipien modulares Programmieren, objektorientiertes Programmieren

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 4. Patterns und Frameworks

Page 11: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

11

iTec

Absicht stellt sicher, daß von einer Klasse höchstens ein Objekt erzeugt wird, und stellt einen globalen Zugriff auf das Objekt bereit

Motivation in 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.

Pattern Beispiel: Singleton

Einführung 4. Patterns und Frameworks

Objekt in globaler Variablen keine Garantie für Einmaligkeit

besser:

lasse die Klasse selber ihren Konstruktor überwachen

Page 12: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

12

iTec

Einführung 4. Patterns und Frameworks

Beispiel: Singleton

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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

13

iTec

Beispiel: Singleton

Einführung 4. 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-Objekt

Benutzung: s referenziert das einzige Singleton-Objekt

Page 14: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

14

iTec

Beispiel: Singleton (JAVA)

Einführung 4. 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: 99 9

Page 15: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

15

iTec

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 der dynamischen Objektkomposition

Einführung 4. Patterns und Frameworks

es gibt drei Pattern Typen

Page 16: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

16

iTec

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 4. Patterns und Frameworks

es gibt drei Pattern Typen

Page 17: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

17

iTec

Einführung 4. Patterns und Frameworks

Page 18: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

18

iTec

Entwickler lernen schnell besseres Design

Entwickler werden produktiver

Qualität der Software wird besser

Kommunikation zwischen Entwicklern wird besser

Kommunikation bei der Wartung wird besser

Einführung 4. Patterns und Frameworks

Vorteile von Entwurfsmustern

Page 19: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

19

iTec

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

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

Problem beschreibt 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.

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

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

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

Patternbeschreibung 4. Patterns und Frameworks

Page 20: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

20

iTec

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.

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

Folgen beschreibt die Vor- und Nachteile, die dieses Muster mit sich bringt.

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

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

Bekannte Anwendungen (bekannt!) 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 4. Patterns und Frameworks

Page 21: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

21

iTec

Name Proxy

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

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

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 4. Patterns und Frameworks

Page 22: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

22

iTec

Proxy 4. Patterns und Frameworks

Struktur

Klient Subjekt {abstract}operation(). . . ()

operation() { vertritt.operation();}

EchtesSubjektoperation(). . . ()

Proxyoperation(). . . ()

vertritt

einKlient:einProxy: einEchtesSubjekt:

Klassendiagramm

Objektdiagrammoperation() operation()

Page 23: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

23

iTec

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 4. Patterns und Frameworks

Page 24: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

24

iTec

Rollen (Fortsetzung)

es gibt mehrere Typen von Proxy:

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

Virtuelles Proxy erzeugt ein umfangreiches Objekt im gleichen Adressraum "auf Anfrage"

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

Proxy 4. Patterns und Frameworks

Page 25: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

25

iTec

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

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

ein virtuelles Proxy kann selber einfache Daten halten

Proxy 4. Patterns und Frameworks

Folgen

Page 26: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

26

iTec

Proxy 4. Patterns und Frameworks

Page 27: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

27

iTec

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 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

28

iTec

Name Zustand/State

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

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

Zustand/State 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

29

iTec

Lösungsidee lagere 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

Struktur

Zustand/State 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

30

iTec

KlasseMitZustand die 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.

Zustand abstrakte Schnittstelle (Polymorphismus) für die delegierten, zustandsabhängigen Operationen

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

Zustandsänderungen:

ersetze aktuell referenziertes Zustandsobjekt durch ein neues

Zustand/State 4. Patterns und Frameworks

Rollen

Page 31: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

31

iTec

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 4. Patterns und Frameworks

Anwendbarkeit:

Page 32: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

32

iTec

Zustand/State 4. 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

(folge-zustand, aktion)

( z_j ,

a_m )

ZustandEreignis

z_1 z_2 . . . z_i . . .

e_1

e_2

. . .

e_k. . .

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

im Zustand z_i 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

33

iTec

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 4. Patterns und Frameworks

Page 34: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

34

iTec

es strukturiert das Objektverhalten nach Zuständen: – jede Zustandsklasse enthält die

Zustandsbesonderheiten – leichter les- und vor allem wartbar

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

Zustände werden explizit gemacht

Zustand/State 4. Patterns und Frameworks

Konsequenzen

Page 35: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

35

iTec

Name: Beobachter (Observer)

Absicht Objekte können Daten bei einem Informationsanbieter abonnieren. Bei jeder Änderung der abonnierten Daten werden die Abonnenten automatisch über die Änderung informiert, die sich dann die geänderten Daten holen.

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

Lösungsidee Trennung von Informationsbereitsteller und einer Menge von Informationsverarbeitern 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 4. Patterns und Frameworks

Page 36: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

36

iTec

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 4. Patterns und Frameworks

Page 37: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

37

iTec

Teilnehmer

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

Beobachter bietet einen Typ (abstrakte Klasse/Interface) der benachrichtigt werden kann von Subjekten

MeinSubjekt wird 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

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 4. Patterns und Frameworks

Page 38: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

38

iTec

Beobachter/Observer 4. Patterns und Frameworks

Zusammenspiel

jedes Objekt der Klasse Subjekt führt eine Liste von Beobachtern, welche an Veränderungen im Zustand dieses Objekts interessiert sind. registrieren bzw. loeschen fügt Beobachter in die Liste ein bzw. entfernt sie.

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.

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

alternativ können der aktualisiere-Nachricht die veränderten Daten gleich mitgegeben 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

39

iTec

Beobachter/Observer 4. Patterns und Frameworks

ms :MeinSubjekt

Zusammenspiel

mb :MeinBeobachter

registrierenmb

setMeineDaten

benachrichtigen

aktualisieren

db :DeinBeobachter

aktualisieren

getMeineDatenData

db

registrieren

getMeineDatenData

Page 40: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

40

iTec

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

wenn man also dynamische Abhängigkeiten hat

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

Anwendbarkeit

Beobachter/Observer 4. Patterns und Frameworks

Clientklasse Serverklasse

weiss von

weiss nichts von

Page 41: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

41

iTec

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

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

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

unterstützt eine Art Broadcasting

Beobachter/Observer 4. Patterns und Frameworks

Folgen

Page 42: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

42

iTec

Beobachter/Observer 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

43

iTec

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

mehrere Subjekte: wie erkennen, welches Subjekt benachrichtigt?

Parameter des Subjektes (this) bei Benachrichtigung übergeben

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

Beobachter/Observer 4. Patterns und Frameworks

Implementation

Page 44: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

44

iTec

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 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

45

iTec

Beobachter/Observer 4. Patterns und Frameworks interface Beobachter {

public void aktualisieren( Subjekt subjekt );}

class Subjekt {

Beobachter[] beobachtetVon = new Beobachter[MAXOBS]; 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; } } }

Page 46: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

46

iTec

Adapter 4. Patterns und Frameworks

Name: Adapter

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

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.

LösungsideeDer Dienstanbieter wird in einen Adapter eingepackt. Der Adapter bietet die Schnittstelle an, die der Verwender benötigt.Dazu gibt es zwei Varianten:

• Objektadapter• Klassenadapter

Page 47: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

47

iTec

Adapter 4. Patterns und Frameworks

Struktur: Objektadapter

Adaption: andere Operationensignatur – Operations- und Parameternamen, Parametertypen und -reihenfolge andere Operationsfunktionen – ähnliche, aber nicht genau gleiche Semantik

Klient Zieloperation()

AdaptierteKlassespezifischeOperation()

Adapteroperation()

operation(). . . adaptiert.spezifischeOperation(). . .

adaptiert

Page 48: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

48

iTec

Adapter 4. 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 49: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

49

iTec

Adapter 4. 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()

1 text

1

begrenzungsrahmen()

text.getHoehe() text.getBreite() . . .

zeichne(). . . text.zeigMich(). . .

einseitige Beziehung: TextAnzeigeauch ohne Source verwendbar

einseitige Beziehung: TextAnzeigeauch ohne Source verwendbar

Page 50: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

50

iTec

Adapter 4. Patterns und Frameworks

Struktur: Klassenadapter

Klient Zieloperation()

AdaptierteKlassespezifischeOperation()

Adapteroperation()

operation(). . . spezifischeOperation(). . .benutzt Mehrfachvererbung

Page 51: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

51

iTec

Klassenadapter benutzt nur eine Objekt, während Objektadapter aus

zwei bestehen Objektadapter kann auch Objekte von Unterklassen der adaptierten

Klasse adaptieren, was der Klassenadapter nicht kann

Adapter 4. Patterns und Frameworks

Folgen

Page 52: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

52

iTec

Adapter 4. Patterns und Frameworks

Implementation in JAVA: Objektadapter mit einem Interface

class 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 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 53: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

53

iTec

Kompositum 4. 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 54: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

54

iTec

Kompositum 4. Patterns und Frameworks

Dokument Blatt*

Text Figur

Linie Kreis...

Beispiel: Grafikeditor

Page 55: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

55

iTec

Grafik

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

Linie

zeichne()

Gruppe

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

*

{abstract}

Kompositum 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

56

iTec

Kompositum 4. Patterns und Frameworks

Page 57: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

57

iTec

Kompositum 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

58

iTec

Kompositum 4. Patterns und Frameworks

Verwende das Kompositionsmuster, wenn

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

• klienten 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

59

iTec

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

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

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 4. Patterns und Frameworks

Beispiel

Page 60: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

60

iTec

Singleton/Kompositum 4. Patterns und Frameworks

«Interface» BinSearchTreeisEmpty(): booleanisIn(Object o): booleaninsert(Object o): BinSearchTree

«Singleton» EmptyTree

empty: EmptyTree

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

Node

info: ObjectleftChild: NoderightChild: Node

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

hasFather hasChild 0..2

0..1

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

Page 61: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

61

iTec

empty:EmptyTree:ClientClass

Instance()

insert(o1)

b:Node

b = EmptyTree.Instance()

newb = b.insert(o1)

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

b.leftChild:Nodenew

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

b.rightChild:Nodenew

{b.info < o1}

{b.info > o2}

Singleton/Kompositum 4. Patterns und Frameworks

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

Page 62: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

62

iTec

public interface BinSearchTree {

boolean isEmpty();

boolean isIn(Object e);

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

public 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 BinTree 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 4. Patterns und Frameworks

Page 63: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

63

iTec

public class Node extends 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 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

64

iTec

Singleton/Kompositum 4. 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: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

65

iTec

Kompositum 4. Patterns und Frameworks

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

Klasse1

Klasse12Klasse11

Klasse122Klasse121

objA

objCobjB

objEobjDobjF

Klassenbäume sind statische Vererbungshierarchien Objektbäume sind dynamisch erzeugte Bäume mit Knotenobjekten

Page 66: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

66

iTec

Name: Dekorierer (decorator oder wrapper)

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

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.

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 4. Patterns und Frameworks

Page 67: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

67

iTec

Dekorierer

+operation()

KonkreterDekoriererA

+operation()#zusatzOperationA()

+operation()#zusatzOperationB()

{abstract}

Komponente

+operation()

{abstract}

1

hatKomponente

KonkreteKomponente

+operation()

KonkreterDekoriererB

. . .

Struktur

Dekorierer 4. Patterns und Frameworks

Page 68: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

68

iTec

Dekorierer 4. Patterns und Frameworks

Zusammenspiel

kp:KonkreteKomponente

dA:KonkreterDekoriererA

hatKomponente

dB:KonkreterDekoriererB

hatKomponente

operation() zusatzOperationA()

operation() zusatzOperationB()

operation()

Page 69: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

69

iTec

Decorator

+draw()

BorderDecorator

+draw()#borderDraw()

ScrollDecorator

+draw()#scrollDraw()

Wrapper::draw()scrollDraw()

{abstract}

Component

+draw()

{abstract} 1

hasComponent

TextView

+draw()

SW1:ScrollDecorator

draw()

BW1:BorderDecorator

draw()

T1:TextView

draw()

hasComponent.draw()

Wrapper::draw()borderDraw()

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

Beispiel

Dekorierer 4. Patterns und Frameworks

Page 70: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

70

iTec

Dekorierer 4. Patterns und Frameworks

Konsequenzen

Page 71: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

71

iTec

Zustand/State 4. Patterns und Frameworks

Page 72: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

72

iTec

Name: Iterator Absicht

stelle einen sequentiellen Zugriff auf die Elemente eines Behälter-objekts ohne dessen interne Darstellung zu veröffentlichen

Problem: Behälterobjekte

Iterator 4. Patterns und Frameworks

Page 73: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

73

iTec

Werkzeug des Software-Entwicklers. Wiederverwendbare, im Sinne einer Anwendung nicht fertige SW-

Bausteine. Frameworks definieren in ihrem Answendungsbereich die

Systemarchitektur. Frameworks definieren die Regeln, nach denen sie zur

vollständigen Anwendung weiterentwickelt werden. Frameworks enthalten eine wiederverwendbare, allgemeingültige

und durch das Zusammenspiel einzelner Objekte des Frameworks vordefinierte Verarbeitungslogik.

Frameworks beeinflussen den gesamten Software-Entwicklungsprozess.

Frameworks sind objektorientiert implementiert.

Einführung 4. Patterns und Frameworks

Merkmale zur Kennzeichnung von Frameworks

Page 74: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

74

iTec

Datentypen II 4. Gundbegriffe des Programmierens

Page 75: ITec 1 Entwurfsmuster. iTec 2 Einführung: was ist und wozu braucht man Patterns u. Frameworks ? wie werden Patterns beschrieben ? Beispiele für Designpatterns.

75

iTec

Folgen 5. Einfache Algorithmen