Entwurfsmuster

15

Click here to load reader

description

Entwurfsmuster. Literatur. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Entwurfsmuster Addison-Wesley, 1.Auflage 1996 ISBN 3-8273-1862-9 DM 89,90 http://pc01.sts.tu-harburg.de/Doku/DesignPatterns/hires/index.htm http://www.enteract.com/~bradapp. Warum Entwurfsmuster?. - PowerPoint PPT Presentation

Transcript of Entwurfsmuster

Page 1: Entwurfsmuster

EDV2 - 05 - Entwurfsmuster 1

Entwurfsmuster

Page 2: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

2

LiteraturErich Gamma, Richard Helm, Ralph Johnson, John VlissidesEntwurfsmusterAddison-Wesley, 1.Auflage 1996ISBN 3-8273-1862-9DM 89,90

http://pc01.sts.tu-harburg.de/Doku/DesignPatterns/hires/index.htm

http://www.enteract.com/~bradapp

Page 3: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

3

Warum Entwurfsmuster?Die Wiederverwendung von objektorientierten Programmen (Klassen) wird oft dadurch verhindert, dass zwar im Wesentlichen die erforderliche Funktion durch eine Klasse realisiert wird, aber bestimmte Details nicht ausreichend realisiert sind. Die Klasse wird erneut programmiert, wobei nur kleine Änderungen vorgenommen werden.

Die Wiederverwendbarkeit der Klasse erhöht sich bei jedem Neuentwurf.

Je nach Erfahrung des Programmierers wird nach einer kleineren oder größeren Anzahl von Entwürfen eine Klasse programmiert, die sich ohne wesentliche Änderungen wieder verwenden lässt.

Dabei stellt sich heraus, dass bei einem guten Entwurf weniger das konkret gelöste Problem im Vordergrund steht. Vielmehr ist ein allgemeines Prinzip realisiert worden, das sich auf viele konkrete Gegebenheiten anwenden lässt.

Dieses allgemeine Prinzip lässt sich als Entwurfsmuster formulieren.

In guten Entwurfsmustern stecken also die Erfahrungen guter Programmierer.

Page 4: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

4

Durch die Kenntnis von Entwurfsmustern gelingt es auch weniger erfahrenen Programmierern

gut strukturierte und wiederverwendbare Programme selbst zu entwickeln,

von anderen entwickelte Programme zu verstehen und

nachzunutzen.

Entwurfsmuster sind nicht für spezielle Programmiersprachen entwickelt. Sie beschreiben vielmehr allgemeine Programmierprobleme und deren prinzipielle Lösung. Sie lassen sich in allen Sprachen in konkrete Programme umsetzen.

Entwurfsmuster helfen dem Programmierer, sein Problem zu verstehen, zu strukturieren und mit Hilfe eines Programmes ggf. unter Verwendung vorhandener Bausteine zu lösen.

Die Entwicklung von Entwurfsmustern beeinflusst die Entwickler von Programmiersprachen.

Page 5: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

5

Bestandteile von EntwurfsmusternMustername

Stichwort zur Benennung von Mustern

Wichtig für den Austausch mit Kollegen

wichtig zum klareren Denken in Entwurfsmuster

Problemabschnitt

Wann ist das Muster anzuwenden?

Welches Problem wird adressiert?

Was ist der Kontext?

Lösungsabschnitt

Aus welchen Elementen besteht die Lösung?

Welche Beziehungen bestehen zwischen den Elementen?

Wofür sind die Elemente Zuständig?

Wie arbeiten die Elemente zusammen?

Konsequenzabschnitt

Welche Vorteile hat die Anwendung dieses Musters?

Welche Nachteile hat die Anwendung dieses Musters?

Page 6: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

6

VererbungsmechanismenKlassenvererbung:

Geschieht durch Ableitungen einer Klasse von einer schon vorhandenen Klasse.

Klassen enthalten sowohl die Schnittstellendefinitionen als auch die Implementierung.

Klassenvererbung erweitert also die Implementierung der Elternklasse zu einer neuen Implementierung.

Erweitert die Funktionalität der Elternklasse durch neue Definitionen.

Ersetzt Funktionalitäten der Elternklasse durch Überschreiben.

Vorteile:

Implementierungen können verändert und überschrieben werden.

Nachteile:

Implementierung ist offen.

Die Vererbung hängt von der Implementierung ab.

Es entsteht eine komplizierte Klassenhierarchie.

Page 7: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

7

Beispiel

public class Punkt

{

public double getX() ...

public double getY() ...

}

public class FarbigerPunkt extends Punkt

{

public double getR() ...

public double getG() ...

public double getB() ...

}

Page 8: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

8

Schnittstellenvererbung (in Java durch Interface)

Geschieht durch Ableitung eines Interfaces von einem schon vorhandenen Interface.

Interface enthalten nur die Definition der Schnittstellen.

Erweitert die Funktionalität durch neue Definitionen.

Das Ersetzen von Schnittstellen ist nicht möglich.

Vorteile:

Es wird nur die Schnittstelle offen gelegt.

Implementierungen können geändert werden, ohne dass die Vererbung beeinflusst wird.

Nachteile:

Es müssen Schnittstellen (Interface) und Implementierung (Class) getrennt entwickelt werden.

Page 9: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

9

Beispiel

interface Punkt

{

public double getX();

public double getY();

}

interface Farbe{public double getR();public double getG();public double getB();}

public class FarbigerPunkt implements Punkt, Farbe

{

...

}

Page 10: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

10

Komposition

Klassen enthalten Objekte anderer Klassen ohne von ihnen abgeleitet zu sein.

Funktionen der enthaltenen Klassen können delegiert werden, d.h. eine Methode eines enthaltenen Objektes wird durch eine ähnliche Methode der neuen Klasse aufgerufen.

Vorteile:

Die Klassenhierarchie bleibt flach und übersichtlich.

Page 11: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

11

Beispielpublic class Punkt

{

public double getX()...

public double getY()...

}

public class Farbe{public double getR()...public double getG()...public double getB()...}

public class FarbigerPunkt

{

Punkt p;

Farbe f;

public double getX(){ return p.getX(); }

...

}

Page 12: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

12

Collection-Framework

AbstractCollection

AbstractSet AbstractList

AbstractSequentialList

Set

Collection

SortedSet

List

HashSetTreeSet ArrayListLinkedList

Page 13: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

13

RegelnProgrammiere auf Schnittstellen hin, nicht auf Implementierungen.

Ziehe Objektkomposition der Klassenvererbung vor.

Page 14: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

14

Beispiel: ListeListe enthält

private Methoden zur Realisierung der Funktionalitäten mit Kenntnis des internen Aufbaus

public Methoden zur Verarbeitung der Liste:• hängeElementAn (Element)• entferneElement (Element)• anzahl()

public Methoden zum Zugriff auf die Liste:• first()• next()• last()• actualElement()

Ähnliche Klassen (HashSet, TreeSet) enthalten ähnliche public Methoden.

Liste muss gleichzeitig mehrfach durchsucht werden.

Page 15: Entwurfsmuster

ED

V2 - 05 - E

ntwurfsm

uster

15

Zugriffsmethoden sind unabhängig von den Verarbeitungsmethoden. Es ist günstig die beiden Teile extra zu bearbeiten.

Realisierung der Zugriffsmethoden innerhalb eines Iterators.

Die Klasse, die die Daten speichert enthält eine Methode, die ein Iterator-Objekt erzeugt.

Das Iterator-Objekt enthält die Informationen über den Zustand des Zugriffs auf die Liste (actualElement-Zeiger).

Es kann mehrfach auf die Liste zugegriffen werden.