Entwurfsmuster. Rainer Schmidberger

Ähnliche Dokumente
Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Objektorientierte und Funktionale Programmierung SS 2014

3 Objektorientierte Konzepte in Java

Übersicht. Softwarearchitektur. Softwarearchitektur, UML, Design Patterns und Unit Tests. Softwarearchitektur

Algorithmen und Datenstrukturen

Klassenbeziehungen & Vererbung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Theorie zu Übung 8 Implementierung in Java

Einstieg in die Informatik mit Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

5.5.8 Öffentliche und private Eigenschaften

Gebundene Typparameter

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung

Analyse und Modellierung von Informationssystemen

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

Repetitorium Informatik (Java)

Analyse und Modellierung von Informationssystemen

Inhalt. Max Lini. ax. inie. Einleitung... VII

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

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

Software-Entwurfsmuster

Java Einführung Abstrakte Klassen und Interfaces

Einführung in die Programmierung

Programmierkurs C++ Abstrakte Klassen und Methoden

Vererbung & Schnittstellen in C#

Factory Method Pattern

Kapitel 6. Vererbung

Faustregeln zu Zusicherungen

Kapitel 6. Vererbung

Überschreiben von Methoden

Einführung in die Programmierung

Programmieren in Java

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Große Übung Praktische Informatik 1

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

Allgemeine Informatik II SS :30-13:30 Uhr

3. Konzepte der objektorientierten Programmierung

8 Design Patterns. Events

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Programmieren I. Kapitel 8. Vererbung

Vererbung. Martin Wirsing. Ziele. Vererbung

Prinzipien Objektorientierter Programmierung

Vorlesung Datenstrukturen

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

Design Patterns. 5. Juni 2013

Probeklausur: Programmierung WS04/05

SE Besprechung. Übung 4 Architektur, Modulentwurf

12) Generische Datenstrukturen

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);

Java Einführung Methoden in Klassen

Programmieren in Java

Vorlesung Programmieren

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

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Objektorientierte Programmierung

Einführung in die Informatik

Java Schulung (Java 2 Java Development Kit 5 / 6)

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Algorithmen und Datenstrukturen 07

Einführung in die Unified Modeling Language

Software-Entwurfsmuster

Objektorientierte Programmierung. Kapitel 12: Interfaces

Javakurs zu Informatik I. Henning Heitkötter

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Generische Datenstrukturen

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Java Einführung Klassendefinitionen

Vorlesung Informatik 2

Java Einführung Objektorientierte Grundkonzepte

Java I Vorlesung 6 Referenz-Datentypen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Interfaces und Vererbung

Software Engineering Entwurfsmuster (update: 11.6.)

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Software-Architektur Design Patterns

Vererbung. Was versteht man unter dem Begriff Vererbung?

Java Einführung Collections

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Einstieg in die Informatik mit Java

12) Generische Datenstrukturen

Software Engineering Klassendiagramme Einführung

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Handbuch für die Erweiterbarkeit

Präsentation Interfaces

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon.

Übersicht. Vorstellung des OO-Paradigmas

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

UML-Basics: Einführung in Objekt- Orientierte Modellierung mit der Unified Modeling Language

Schnittstellen implementieren am Beispiel Suchbaum

U08 Entwurfsmuster (II)

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

Transkript:

Entwurfsmuster Rainer Schmidberger schmidrr@informatik.uni-stuttgart.de Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering Was sind Entwurfsmuster? A design pattern names, abstracts and identifies the key aspect of a common design structure that makes it uful for creating a reusable object-oriented design [Gamma95] Eine Menge von Klasn und eine Regel sie zu gebrauchen Ein Entwurfs-Beispiel, das geschickt (im Sinne von clever oder trickreich) Mechanismen der Objektorientierung auf eine bekannte Problemstellung anwendet I. allg. nicht an eine Programmiersprache gebunden (wenngleich Entwurfsmuster mit Schablonenklasn nicht in jeder objektorientierten Sprache verwendet werden können) [Gamma95]: Gamma, E. u.a., "Design Patterns, Elemets of Reusable Object-Oriented Software", Addison-Wesley, 1995 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 2

Entwurfsmuster gibt es schon lange... 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 3 Nutzen von Entwurfsmustern Wiederverwendung von Software-Entwürfen: für viele wiederkehrende Aufgabenstellungen gibt es bereits fertige Lösungen Standardisierung von Software-Entwürfen Erhöhung von Verständlichkeit von Software- Entwürfen Aber: nicht jede Zeile Implementierung muss in ein bekanntes Entwurfsmuster eingebettet werden Die verwendeten Entwurfsmuster müsn den am Projekt beteiligten Entwicklern bekannt in Falscher Einsatz von Entwurfsmustern verwirrt 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 4

Darstellung von Entwurfsmustern UML-Modelle, zumeist Klasndiagramme, teilwei Interaktionsdiagramme (speziell bei den Behavior- Pattern) Exemplarische Implementierung der wichtigen Methoden Textuelle Beschreibung Entwurfsmuster bekommen oft einen "griffigen" Namen wie z.b. Facade, Composite,... 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 5 Null-Object Problemstellung null-überprüfungen von Objektreferenzen führen zu u.u. unübersichtlichem Programmcode Auch "null-objekte" hätten u.u. ein bestimmtes Verhalten, das oft über el-zweige zu implementieren wäre TabDialog tabdialog = view.gettabdialog(i); if(tabdialog!= null) { tabdialog.open(); el... 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 6

Null-Object Die Methoden der Klas TabDialogNull sind i.allg. leer implementiert View TabDialog open() TabDialogA open() TabDialogB open() TabDialogNull open()... {... public class View... {... TabDialog gettabdialog(int index) {... Hier wird er gefunden... return new TabDialogNull(); //... Und hier nicht 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 7 Vor und Nachteile Dem null-objekt können Verhaltensmuster implementiert werden Weniger if-konstrukte Dient u.u. der Fehlervermeidung Erhöht die Zahl der Klasn Es muss eine entsprechende Vererbungshierarchie oder ein zu implementierendes Interface im Vorfeld geben 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 8

Singleton Problemstellung Es soll sichergestellt werden, dass es zu einer Klas höchstens eine Instanz gibt. Die Instanz soll global verfügbar in, d.h. es muß eine Möglichkeit für alle Objekte geben, die Instanz anzusprechen. Beispiele: Datenbank, Drucker,... Lösung 1: Instanz in globaler Variablen ablegen. Problem: verhindert nicht die mehrfache Instantiierung. Lösung 2: deklariere alle Eigenschaften der Instanz als Klasneigenschaften. Problem: keine Redefinition möglich 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 9 Singleton Idee Idee: Die Klas ist lbst dafür verantwortlich, dass es von ihr nur ein Exemplar gibt. Sie stellt auch die Instanz zur Verfügung. Struktur: die Instanz wird in der privaten Klasnvariablen theinstance gespeichert sie kann mit der Klasnmethode getinstance() angefordert werden. (Aufruf Singleton.getInstance()) Die Instanzierung von theinstance findet beim ersten Zugriff statt Singleton -theinstance : Singleton +getinstance() : Singleton +rvice() 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 10

Singleton Programmcode class Singleton { static private Singleton theinstance = null; static public Singleton getinstance() { if (theinstance == null) { theinstance = new Singleton(); return theinstance; /* Es darf keinen public-konstruktor geben (also auch keinen Default-Konstruktor). Damit Unterklasn ihn trotzdem benutzen können, wird er protected deklariert */ protected Singleton() {...... // Instanzvariablen und -methoden 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 11 Singleton Bemerkungen Überwachter Zugang zu einer einzigen Instanz Instanz braucht erst bei Bedarf erzeugt werden Keine globale Variable notwendig Die Singleton-Klas kann redefiniert werden Kann verallgemeinert werden für n Instanzen Flexibler als die Realisierung durch Klasnoperationen 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 12

Composite Problemstellung es sollen hierarchische Teil-Ganzes-Beziehungen modelliert werden einzelne Objekte (Primitive) und zusammengetzte Objekte (Container) sollen für den Verwender die gleiche Schnittstelle haben Beispiele: Dateisystem, UML: Pakete,... Lösung: gemeinsame Oberklas für Primitive und Container, die beide Eigenschaften in sich vereinigt 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 13 Composite Lösung Component add(c : Component) +children remove(c : Component) getchild(i : int) : Component operation() 0..* Leaf operation() Composite add(c : Component) remove(c : Component) getchild(i : int) : Component operation() 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 14

Composite Bemerkungen (1) Composite reicht normale Methodenaufrufe (operation()) in der Regel an alle Kinder durch, kann aber auch noch zusätzliche Operationen durchführen die Aufnahme von Composite-Operationen in Component ist praktisch (einheitl. Schnittstelle), aber auch problematisch, da ihr Aufruf auf einen Leaf nicht sinnvoll ist. nötig ist zumindest eine Default-Implementierung dier Operationen (z.b. Exception auslön), ansonsten müßte jede Leaf-Klas das lbst tun ein Verschieben in Composite kann sinnvoll in (höhere Sicherheit). In beiden Fällen muß der Verwender darauf achten, nur bei Composite-Objekten add() etc. aufzurufen. Nur bedarf es beim zweiten Fall dazu eines expliziten Casts. 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 15 Composite Bemerkungen (2) Component kann um getparent() erweitert werden, um den übergeordneten Composite referenzieren zu können. Problem: wer enthält den obersten Composite? statt mittels getchild() die Kinder einzeln verfügbar zu machen, kann nach außen auch ein externer und/oder interner Iterator über die Kinder zur Verfügung gestellt werden. Beispiel: java.awt.component Composite gehört zur Gruppe der Structural Patterns 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 16

State Problemstellung Ein Objekt soll sich abhängig von inem Zustand verschieden verhalten. Hiervon können eine oder viele Methoden betroffen in. Idee: Der Zustand wird als Klas gekaplt. Spezielle Zustands-Klasn mit überladenen Methoden implementieren die jeweilige Zustandsabhängigkeit 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 17 State: Lösung Aufruf: einstudent.dasrichtigetun(); Student Zustand dasrichtigetun() Vorlesung Pruefung Freizeit Party dasrichtigetun() dasrichtigetun() dasrichtigetun() dasrichtigetun() 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 18

State Bemerkungen Als Erweiterung könnten die Methode dasrichtigetun() ein Objekt des Folgezustandes zurückliefern Es könne leicht weitere Zustände aufgenommen werden State gehört zur Gruppe der Behavioral Patterns Dinge, die in allen Zuständen gleich gemacht werden, können in der gemeinsamen Vaterklas implementiert werden 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 19 Einteilung der Patterns Nach [Gamma95]: Creational Patterns Instanzierung von Objekten Beispiel: Singleton Structural Patterns Lösung bestimmter Strukturierungsprobleme Beispiel: Composite Behavioral Patterns Lösungen bestimmter Verhaltensaspekte Beispiel: State 09.02.2004 Copyright 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering 20