Beruflich Dokumente
Kultur Dokumente
bersicht
1. Erich Gamma
Leiter des IBM OTI Lab in Zrich hat an der Universitt Zrich promoviert Eclipse Committer und verantwortlich fr die Eclipse Java Entwicklungsumgebung Mitglied des Eclipse Project Management Committee (PMC) Entwickler von JUnit mit Kent Beck Projekte: Eclipse, IBM Visual Age, JHotDraw, Et++
Dr. Erich Gamma IBM Research - OTI Labs Oberdorfstrasse 8 CH-8001 Zrich Schweiz Email: erich_gamma@oti.com
2. Motivation
Ende der 80er OO-Programmierung wird immer beliebter Groe Strke ist die Wiederverwendung flexible Entwrfe notwendig Gutes Design ist schwierig Viel Spielraum beim Entwurf
Schnittstellen Granularitt Flexibilitt Kapselung Abhngigkeiten
Anfnger sind oft berfordert Es dauert lange vom Anfnger zum OO-Experten
3. Geschichte
1977 Christopher Alexander A Pattern Language Gute Architektur: Freiheit, Flexibilitt, Komfort, Harmonie, Haltbarkeit, 253 Muster, von der Region, Stadt, Stadtteile, Gebude, bis hin zur Innenausstattung Sehr theoretisch
3. Geschichte
1987 Ward Cunningham und Kent Beck
Smalltalk Anfnger schneller anlernen
1995 Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides (Gang of Four) Design Patterns: Elements of Reusable ObjectOriented Software Heute zahlreiche Muster und Bcher
4. Entwurfsmuster
4.1 Definition
Alexander: Jedes Muster beschreibt ein in unserer Umwelt bestndig wiederkehrendes Problem und erlutert den Kern der Lsung fr dieses Problem, so dass sie diese Lsung beliebig oft anwenden knnen, ohne sie jemals ein zweites Mal gleich auszufhren. In Design Patterns: Elements of Reuseable Object-Oriented Software: Entwurfsmuster sind Beschreibungen zusammenarbeitender Objekte und Klassen, die mageschneidert sind, im ein allgemeines Entwurfsproblem in einem bestimmten Kontext zu lsen.
4. Entwurfsmuster
Geforderte Eigenschaften: Useful, Useable and Used. Useful: - ermglichen es erfolgreiche Lsungen anzuwenden Useable: - sind anwendbar Used: - lsen tatschlich auftretende Probleme Was sind Entwurfsmuster nicht? Keine Tricks Keine Schablonen Werden entdeckt, sind keine neue Erfindung Bieten keine Implementierung an
4. Entwurfsmuster
Ziele
Wieder verwendbare Software Erweiterbare Software Gutes Design (Quality without a Name) Entwurfsrevisionen minimieren Vokabular fr Entwickler Erleichtern der Wartung und Einarbeitung
10
4. Entwurfsmuster
Ein Entwurfsmuster besteht aus 4 Teilen: Mustername: benennt kurz das Problem Problemabschnitt: beschreibt Kontext, indem das Muster angewendet werden kann Lsungsabschnitt: zeigt wie das Problem umgangen werden kann. Konsequenzen: beschreibt Vor- und Nachteile der Anwendung.
11
12
4. Entwurfsmuster
Klassenbasierte Muster beziehen sich auf die Beziehungen zwischen Klassen und Unterklassen, sind statisch. Komponentenbasierte Muster beschreiben rekursive Beziehungen zwischen Objekten. Erzeugungsmuster: - Probleme beim Erzeugen von Objekten Verhaltensmuster: - Interaktion zwischen Objekten Strukturmuster: - Zusammensetzung von Objekten
13
Zweck
Was macht das Muster? Welche Probleme kann es lsen?
Motivation
Zeigt ein Beispielproblem, bei dem das Muster helfen kann.
Anwendbarkeit
Situationen in denen das Muster ntzlich ist. Woran erkenne ich solche Situationen.
Teilnehmer
Beschreibt die beteiligte Objekte.
Entwurfsmuster - Erich Gamma 14
4 Entwurfsmuster
Interaktion
Beschreibt Zusammenarbeit der Objekte.
Struktur
Eine grafische Darstellung (UML, OMT).
Konsequenzen
Beschreibt Vor- und Nachteile der Anwendung.
Implementierung
Tipps, Techniken, Fallen, sprachspezifische Aspekte?
Beispiele
Ein praktisches Beispiel aus der realen Welt.
Siehe Auch
Zeigt verwandte Muster. Empfiehlt eventuell Kombinationen mit anderen Mustern.
15
4. Entwurfsmuster
Musterbeziehungen
16
17
Motivation
Filehandler, der Dateien komprimieren kann mit unterschiedlichen Kompressionsverfahren
Anwendbar, wenn
Man unterschiedliche Varianten eines Algorithmus verwenden will. Man Details eines Algorithmus verbergen will. Sich Klassen nur im Verhalten unterscheiden. Klassen mehrfach Bedingungsanweisungen enthalten.
18
5. Beispiele
Struktur
19
5. Beispiel
Strategy Schnittstelle
// Die Strategy Schnittstelle public interface Compressor { // Methode zum komprimieren File compress(File file); }
10
5. Beispiel
Der Kontext
// Unser Context public class FileHandler { // der Komprimierer private Compressor compressor; private File file; public FileHandler(Compressor compressor) { this.compressor = compressor; } void saveFile(){ // ... } // uebergib dem Komprimierer die Aufgabe File compress(File file) { return compressor.compress(file); } // ... }
FileHandler bietet Funktion zum komprieren an Welcher Algorithmus benutzt wird, hngt vom Typ des Komprimieres ab
Entwurfsmuster - Erich Gamma 21
5. Beispiel Anwendung
Abhngig vom Kontext kann man die verschiedenen Strategien nutzen
FileHandler ZIPFileHandler = new FileHandler(new ZIPCompressor()); // oder FileHandler HCFileHandler = new FileHandler(new HuffamCodeCompressor());
22
11
6.2 Nachteile
24
12
A Literatur
[1] http://www.c2.com/doc/oopsla87.html [2] Alexander, C., Ishkawa, S., and Silverstein, M., Eds. A Pattern Language. Oxford University Press, New York, 1977 [3] Coplien, J., Ed. Advanced C++ Programming Styles and Idioms. AddisonWesley, Reading, MA, 1992 [4] Gamma, E., Helm, R., Johnson, R., and Vlissides, J., Eds. Design Patterns: Abstractionand Reuse of Object-Oriented Design ECOOP 93, Lecture Notes in Computer Science 707. Springer, Berlin Heidelberg New York, 1993 [5] Gamma, E., Helm, R., Johnson, R., and Vlissides, J., Eds. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading, MA, 1995
25
13