Entwurfsmuster (Design Patterns)

Ähnliche Dokumente
Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Objektorientierte und Funktionale Programmierung SS 2014

Software-Architektur Design Patterns

Lukas Klich. Projektgruppe SHUTTLE. Seminar: Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1. Entwurfsmuster

Behavioral Patterns. Seminar Software-Entwurf WS 04/05. Przemyslaw Dul

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Entwurfsprinzip. Entwurfsprinzip

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer

Entwurfsmuster Martin Fesser 00IN

Structural Patterns. B. Sc. Andreas Meißner

Universität Bremen. Entwurfsmuster. Thomas Röfer. Wettbewerb Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster

14 Design Patterns Einführung 14.2 Composite Pattern

Software-Entwurfsmuster

Entwurfsmuster in Java

Einführung in die Informatik II

Software Engineering. 10. Entwurfsmuster II. Franz-Josef Elmer, Universität Basel, HS 2015

Design Patterns. 5. Juni 2013

3. Konzepte der objektorientierten Programmierung

Design Pattern. Motivation, Beispiel Definition "Das" Buch der Gang of Four Ausführliches Beispiel: Facade Beispiele. Aufgabe

Entwurfsmuster und Frameworks Singleton

Objektorientierte Programmierung OOP

Modellarbeit I: Entwurfsgerechte Klassenmodellierung

Vorlesung Programmieren

Entwurfsmuster - Iterator & Composite

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Programmieren in Java

5.5.8 Öffentliche und private Eigenschaften

Model-View-Controller

Software-Entwurfsmuster

Factory Method (Virtual Constructor)

Theorie zu Übung 8 Implementierung in Java

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Objektorientierte Programmierung OOP

Repetitorium Informatik (Java)

Algorithmen und Datenstrukturen

Factory Method Pattern

Erzeugungsmuster (nach Gang of Four )

Analyse und Modellierung von Informationssystemen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Analyse und Modellierung von Informationssystemen

Kapitel 6. Vererbung

Vorlesung Programmieren. Software Design. Software Design. Entwurfsmuster

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Kapitel 6. Vererbung

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Gebundene Typparameter

Kapitel 4: Klassen und Unterklassen

3. Entwurfsmuster zur Entkopplung von Modulen. Übersicht zu Entwurfsmustern

Wahlpflichtfach Design Pattern

3. Entwurfsmuster zur Entkopplung von Modulen

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Probeklausur: Programmierung WS04/05

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger

1 Abstrakte Klassen, finale Klassen und Interfaces

Informatik II Übung 6 Gruppe 7

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Einstieg in die Informatik mit Java

Wahlpflichtfach Design Pattern

Kapitel 6. Vererbung

Informatik II Übung, Woche 17

Software Engineering. 7. Entwurfsmuster

Objektorientierte Programmierung

8 Design Patterns. Events

Grundlagen der Informatik für Ingenieure I

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Einführung in die Programmierung mit Java

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Entwurfsmuster. Entwurfsmuster (Design Patterns), Visitor-, Singleton, Decorator-, Observer-Pattern. Objektterminierte Listen

Einführung in die Programmierung mit Java

Einführung in die Java- Programmierung

3 Objektorientierte Konzepte in Java

Verhaltensmuster. Modellieren von komplexem Verhalten

Softwaretechnik WS 16/17. Übungsblatt 01

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Markus Knauß, Entwurfsmuster. Markus Knauß Entwurfsmuster

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

6. Globalübung (zu Übungsblatt 8)

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Auf einen Blick. 1 Einführung Funktionen und funktionale Aspekte Objektorientierte Programmierung mit JavaScript...

Transkript:

Entwurfsmuster (Design Patterns)

SEP 303 Entwurfsmuster (Design Patterns) In der alltäglichen Programmierarbeit tauchen viele Probleme auf, die man schon einmal gelöst hat und die man in der Zukunft wieder lösen müssen wird. Entwurfsmuster sind Dokumentation von Lösungs- und Designansätzen. Wiederverwendung von erfolgreichen Entwurfsansätzen Dokumentation von Lektionen, die bei der Lösung von realen Problemen gelernt wurden Kommunikation Entwurfsmuster haben Namen und erleichtern so die Beschreibung von Struktur und Funktionsweise von Programmen fremde Programme, die einem bekannten Entwurfsmuster entsprechen, sind leichter lesbar

SEP 304 Was ist ein Entwurfsmuster? Entwurfsmuster beschreiben Wissen über objektorientiertes Design. Ein Entwurfsmuster löst ein bestimmtes Problem beschreibt ein erprobtes Lösungskonzept ist nicht direkt offensichtlich (es wäre nicht sinnvoll eine ohnehin offensichtliche Lösung zu beschreiben) erfasst das Zusammenspiel von Komponenten (das sich im Allgemeinen nicht direkt in der Programmiersprache ausdrücken lässt)

SEP 305 Entwurfsmuster Ein Entwurfsmuster besteht aus folgenden Teilen: Name wichtig für Kommunikation Problem Beschreibung der Situation, in der das Muster angewendet werden kann, und deren Kontext. Lösung informelle Beschreibung der Komponenten des Designs, ihrer Beziehungen, Aufgaben und Pflichten sowie ihrer Kommunikation. Beispiele Illustration der Lösung an repräsentativen Beispielen Evaluation Diskussion von Vor- und Nachteilen des Entwurfsansatzes

SEP 306 Entwurfsmuster Strukturmuster beschreiben die Zusammensetzung von Objekten und Klassen zu größeren Strukturen. Beispiele: Composite, Adapter, Decorator, Flyweight, Proxy,... Verhaltensmuster beschreiben Möglichkeiten zur objektorientierten Implementierung von Algorithmen und zur Interaktion zwischen Objekten und Klassen. Beispiele: Iterator, Observer, Visitor, Interpreter,... Erzeugungsmuster beschreiben Möglichkeiten zur Objekterzeugung. Beispiele: Abstract Factory, Builder, Singleton,......

SEP 307 Strukturmuster Composite Problem: Repräsentiere eine Menge von Objekten, in der einzelne Objekte aus anderen Objekten in der Menge zusammengesetzt sein können. Zusammengesetze Objekte sollen wie einzelne Objekte behandelt werden können. Beispiele: Eine geometrische Figur ist entweder eine Linie, ein Kreis, ein aus mehreren geometrischen Figuren bestehendes Bild. Ein arithmetischer Ausdruck ist entweder eine konstante Zahl, eine Variable, eine Verknüpfung zweier arithmetischer Ausdrücke mit einer Binäroperation.

SEP 308 Strukturmuster Composite Das Entwurfmuster Composite beinhaltet folgende Repräsentation: Komponente: Interface für die Objekte in der Komposition (z.b. Auswerten bei arithmetischen Ausdrücken) Interface für gemeinsames Verhalten (z.b. Verschieben bei geometrischen Figuren) Interface für den Zugriff auf die Teilkomponenten. Blatt: primitives Objekt Kompositum: zusammengesetztes Objekt Benutzer: interagiert nur mit der Komponente

SEP 309 Strukturmuster Composite Beispiel: arithmetische Ausdrücke in AntBrain Komponente Blatt Kompositum operation IExp IExpConst, IExpVar IExpBinOp eval

SEP 310 Strukturmuster Composite Evaluation definiert Teil-Ganzes-Hierarchien von primitiven und zusammengesetzten Objekten Benutzung dieser Hierarchien ist einfach. Zusammengesetzte Objekte können wie primitive Objekte benutzt werden. Hierarchie leicht durch neue Objekte erweiterbar, ohne dass Benutzer ihren Code ändern müssen Benutzer kann keine neue Operation selbst definieren und zur Hierarchie hinzufügen (Beispiel: IExp.getFreeVariables()) Quelltext der operation() über mehrere Klassen verstreut (Beispiel: IExp.eval()).

SEP 311 Verhaltensmuster Visitor Probleme der Datenrepräsentation eines Composite-Patterns: Benutzer kann keine neue Operation selbst definieren und zur Hierarchie hinzufügen. Quelltext der operation() über mehrere Klassen verstreut. Das Visitor-Pattern löst diese Probleme: Es erlaubt, neue Operationen zu definieren, ohne die Klassen der Struktur zu ändern. Es erlaubt, Operationen, die auf einer Objektstruktur ausgeführt werden sollen, kompakt zu repräsentieren.

SEP 312 Idee: Verhaltensmuster Visitor Sammle die Definitionen der Operationen auf der Objektstruktur in einem Visitor-Objekt. Ersetze die verschiedenen Operationen durch eine einzige accept-methode. Beispiel

SEP 313 Verhaltensmuster Visitor accept(v) in IExpConst durch v.visitconst(this) gegeben, usw. Auslagerung der Methodendefinitionen in Visitor-Objekte.

SEP 314 Verhaltensmuster Visitor abstract class IExp { abstract <T> T accept(iexpvisitor<t> v); class IExpVar extends IExp { String varname; <T> T accept(iexpvisitor<t> v) { return v.visitvar(this); class IExpConst extends IExp { Integer value; <T> T accept(iexpvisitor<t> v) { return v.visitconst(this); class IExpPlus extends IExp { IExp e1, e2; <T> T accept(iexpvisitor<t> v) { return v.visitplus(this);

SEP 315 Verhaltensmuster Visitor abstract class IExpVisitor<T> { abstract T visitvar(iexpvar v); abstract T visitconst(iexpconst c); abstract T visitplus(iexpplus p); Funktionen für arithmetische Ausdrücke können nun in zentral in einem IExpVisitor-Objekt aufgeschrieben werden. Beispiele: Auswertung eines Ausdrucks: EvalVisitor Variablen in einem Ausdruck: VarsVisitor

SEP 316 Verhaltensmuster Visitor Auswertung eines Ausdrucks iexp: iexp.accept(new EvalVisitor(memory)); class EvalVisitor extends IExpVisitor<Integer> { Map<String, Integer> memory; EvalVisitor(Map<String, Integer> memory) { this.memory = memory; Integer visitvar(iexpvar v) { return memory.get(v.varname); Integer visitconst(iexpconst c) { return c.value; Integer visitplus(iexpplus p) { return p.e1.accept(this) + p.e2.accept(this);

SEP 317 Verhaltensmuster Visitor Berechnung der Variablenmenge eines Ausdrucks iexp: iexp.accept(new VarsVisitor()); class VarsVisitor extends IExpVisitor<Set<String>> { Set<String> visitvar(iexpvar v) { return java.util.collections.singleton(v.varname); Set<String> visitconst(iexpconst c) { return java.util.collections.emptyset(); Set<String> visitplus(iexpplus p) { Set<String> s = new HashSet<String>(); s.addall(p.e1.accept(this)); s.addall(p.e2.accept(this)); return s;

SEP 318 Verhaltensmuster Visitor

SEP 319 Verhaltensmuster Visitor Evaluation Es ist leicht, neue Operation zu definieren, ohne die Klassen in der Hierarchie ändern zu müssen. Die vielen Fälle einer einzigen Operation werden in einem Visitor zusammengefasst. (Vergleiche: In der Klassenhierarchie waren die verschiedenen Fälle verschiedener Operationen zusammengefasst) Hinzufügen einer neuen Klasse zur Hierarchie ist schwierig, da man auch alle Visitor-Klassen anpassen muss. Zur Definition der einzelnen Funktionen in einem Visitor-Objekt braucht man Zugriff auf den Zustand der Objekte in der Objekthierarchie. Kapselung nicht immer möglich.

SEP 320 Erzeugungsmuster Abstract Factory Konstruktoren sind nicht immer die beste Möglichkeit Objekte zu erzeugen. Beispiel: Abstraktion von Systemtreibern Portabilität durch Abstraktion von Systemeigenschaften (Beispiel: Austausch von Datenbanksystemen) Programm muss auf Treiber zurückgreifen und Treiberobjekte erzeugen je nach System müssen verschiedene Treiber erzeugt werden (Beispiel: SQL Server oder PostgreSQL)

SEP 321 Erzeugungsmuster Abstract Factory Abstract Factory Schnittstelle zur Erzeugung von Familien zusammenhängender oder verwandter Objekte (z.b. Treiber), ohne dass dazu die konkreten Objektklassen bekannt sein müssen. Idee: Erzeuge einen Datenbanktreiber. statt Erzeuge einen Treiber für PostgreSQL.

SEP 322 Erzeugungsmuster Abstract Factory Struktur:

SEP 323 Erzeugungsmuster Abstract Factory creategraphicsdriver() und createdbdriver() sind Beispiele für Factory-Methoden Factory-Methoden können in bestimmten Situation besser geeignet sein als Konstruktoren: Wiederverwendung von Objekten public static Boolean valueof(boolean b); Erzeugung von geeigneten Unterklassen. Beispiel: public static <T> Set<T> synchronizedset(set<t> s); in java.util.collections macht Menge thread-sicher kann in zukünftigen Java-Versionen effizientere Implementierungen zurückliefern, ohne dass Benutzer ihren Code ändern müssten Klasse, welche die Synchronisierung konkret implementiert, kann in java.util privat bleiben