Design Patterns Entwurfsmuster für Softwarearchitekturen

Slides:



Advertisements
Ähnliche Präsentationen
Web 2.0 Social Network Communities
Advertisements

Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Prüfung objektorientierter Programme -1
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Design-Pattern.
Objektorientierte Programmierung
Harald Köbler Software Design Patterns Prototype.
Konzepte objektorientierter Systeme
Designing Software for Ease of Extension and Contraction
Design Patterns- Entwurfsmuster
Bastian Cramer, Universität Paderborn Entwurfsmuster für Webanwendungen Projektgruppe: Generierung von Webanwendungen aus visuellen Spezifikationen.
Ruby on Rails im Überblick
Objektorientierter Entwurf (OOD) Teil 3: Qualitätsmodell
On a Buzzword: Hierachical Structure David Parnas.
Content-Entwicklung mit Design Patterns
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Aufgaben des Testens Vergleich des Verhaltens einer Software mit den an sie gestellten.
Java: Objektorientierte Programmierung
Java: Grundlagen der Sprache
Strategy Pattern Richard Göbel.
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Union-Find-Strukturen
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Sebastian Grahn Sebastian Kühn
Das Strukturmuster Kompositum von C. Günther, T. Hammerschmidt und D. Kuhn.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Explizite und editierbare Metainformationen für Software Muster.
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Folie 1 Christian Pfeffer Carsten Walther Fernstudium Informatik Matrikel LABORPRAKTIKUM- SOMMERSEMESTER 2005 Umsetzung von Pattern Muster: DECORATOR.
Software Design Patterns Creational Patterns Structural Patterns Behavioral Patterns –Behavioral Class Patterns Interpreter Template Method Pattern –Behavioral.
Dependents, Publish-Subscribe, Listener
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Wizards & Builders GmbH Einführung in die objektorientierte Programmierung Norbert Abb.
Forschungszentrum Informatik, Karlsruhe Objektorientierte Systeme unter der Lupe Markus Bauer Oliver Ciupke.
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Don`t make me think! A Common Sense Approach to Web Usability
Unified Modeling Language Repetition / Einführung zu UML
Projektarbeit PHP 5.3 / MySQL & Content Management Systems
Interpreter Seminar Entwurfsmuster Tobias Webelsiep
Flexible Datenstrukturen
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. M. Thaller AM1: Re-usable Content in 3D und Simulationssystemen.
Gruppe: Gewinnt Überblick 1.0 (Martin Kapfhammer)
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Entwurfsmuster (Software Design Patterns) Verhaltens-Entwurfsmuster
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Welchen Problemen ist man bei heterogener, verteilter Programmierung ausgesetzt? Hardware: nicht einheitliche, inkompatible Systeme, verschiedene Leistungsfähigkeit.
Wasserfallmodell und Einzelbegriffe
Projektmanagement Ziel und Umfang eines Softwareprojektes definieren
© ARC Solutions GmbH All rights reserved 10. Informatik-Tag, HTWM Dipl.-Inf. Chris Hübsch, ARC Solutions GmbH EINSATZ VON DESIGN PATTERNS BEI DER.
Software Design Patterns
OOSE nach Jacobson Sebastian Pohl/ST7 Betreuer: Prof. Dr. Kahlbrandt.
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Case Tools Unterstützung für Design Pattern von Vladislav Krasnyanskiy.
Folie 1 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik- -Matrikel LABORPRAKTIKUM- SOMMERSEMESTER 2005 „Umsetzung von Pattern“ Muster:
Design Pattern1 Motivation Entwurfsmuster Entwurf wiederverwendbarer objektorientierter Software schwer gute Entwürfe entstehen durch Wiederverwen- dung.
Strategy Pattern Teachlet Autor: Sven Wende Replay durch Stephan Schwake Konzepte objektorientierter Programmiersprachen, SS 2006.
Rechen- und Kommunikationszentrum (RZ) Entwicklung einer Web- Oberfläche mit Apache Wicket am Beispiel des IdentityAdmins Seminarvortrag Melanie.
Semi-automatische Komposition von Dienstbenutzerschnittstellen auf mehreren Abstraktionsebenen Christian Jäckel Universität des Saarlandes Bachelor.
Patterns Entwurfsmuster - Wie spart man sich Arbeit ?
Das Entwurfsmuster Model-View-Controller
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
 Präsentation transkript:

Design Patterns Entwurfsmuster für Softwarearchitekturen Prof. Dr. Christian Kohls

Überblick Was sind Muster? Beispielanwendung mit folgenden Mustern: Strategie Dekorierer Abstrakte Fabrik Etwas Mustertheorie Weitere Anwendungsfelder von Mustern

Problemstellung: Wie verbindet man die beiden Städte? Lösungen fallen uns implizit ein!

Software-Design: User Interface Grafik Zeichne() FuegeHinzu(Grafik) Entferne(Grafik) Drop-Down Zeichne() Button Zeichne() Toolbar Zeichne() FuegeHinzu(Grafik) Entferne(Grafik) Kind-Grafiken

Software-Design: Textdokumente Glyph BuchstabenZaehlen() FormatAendern() FuegeHinzu(Glyph) Kinder Texteinheit BuchstabenZaehlen() FormatAendern() FuegeHinzu(Glyph) Bild-Symbol BuchstabenZaehlen() FormatAendern() Zeichen BuchstabenZaehlen() FomatAendern() Paragraph Wort

Software-Design: CMS PloneDocument PloneFolder PeleNewsobjekt Veroeffentlichen() PloneFolder Veroeffentlichen() NeuesDokument(PloneDocument) Kinder PeleNewsobjekt Veroeffentlichen() TextDocument Veroeffentlichen()

Software Design Patterns Komponente Operation() FuegeHinzu(Komponente) Entferne(Komponente) GibKindobjekt(Schlüssel) Kompositum Blatt Kinder Für alle g in Kinder: g.Operation(); Composite Graphical user interface: Texteditor: Content Management System:

(Vorläufige) Definition: Entwurfsmuster sind erprobte Lösungsansätze für wiederkehrende Aufgaben und Fragestellungen. Sie beschreiben die invarianten Komponenten häufig auftretender Teil-Strukturen in einem komplexen Design-Umfeld.

Beispielanwendung SpriteInterface Rotiert alle 10 Schritte Kehrt am Seitenrand um Bewegt sich zum letzten Mausklick Springt vom Seitenrand in die Mitte Bewegt sich nur geradeaus, springt vertikal zum letzten Mausklick Springt vom Seitenrand zur gegenüber liegenden Seite Bewegt sich in Richtung Katze Springt vom Seitenrand in die Mitte

Strategy Pattern

Struktur-Diagramm des Strategie Musters strategy Kontext AbstrakteStrategie KontextSchnittstellen() … AlgorithmenInterface() KonkreteStrategie A AlgorithmenInterface() KonkreteStrategie B KonkreteStrategie C Struktur-Diagramm des Strategie Musters

Beispiel Turtle World strategy Sprite <<Interface>> StepStrategy void step() StepWithFrequentRotations StepTowardsTargetPosition StepTowardsSpritePosition void step () void step () void step ()

VORHER Sprite Turtle Cat Dog step() … onTopCollision onBottomCollision onLeftCollision onRightCollision …. Turtle Cat Dog step() … onTopCollision onBottomCollision onLeftCollision onRightCollision …. step() … onTopCollision onBottomCollision onLeftCollision onRightCollision …. step() … onTopCollision onBottomCollision onLeftCollision onRightCollision ….

NACHHER Sprite <<Interface>> StepStrategy …. void step() stepStrategy Sprite …. StepWithFrequentRotations StepTowardsTargetPosition StepTowardsC void step () void step () void step () collisionStrategy <<Interface>> OnCollistionStrategy onTopCollision onBottomCollision onLeftCollision onRightCollision OnCollisionRepeat OnCollisionRotate180 OnCollisionCenter onTopCollision onBottomCollision onLeftCollision onRightCollision onTopCollision onBottomCollision onLeftCollision onRightCollision void onTopCollision onBottomCollision onLeftCollision onRightCollision

Strategie-Muster Definiert eine Familie von Algorithmen Kapselt die einzelnen Algorithmen und macht sie untereinander austauschbar Eine Strategie ermöglicht die Variation unterschiedlicher Vorgehensweisen (Algorithmen) unabhängig von Client-Code Ermöglicht die Nutzung verschiedener Varianten der gleichen Algorithmusfamilie, z.B. Bewegungsstrategien Analysen Sortieren

Anwendungskontext & Forces Verschiedene Klassen, die sich nur in einem Verhalten unterscheiden Erzeugt man für jede Variation eines Algorithmus eine neue Unterklasse, führt dies schnell zu einer Klassenexplosion Verschiedene Klassen benötigen oft die selben Algorithmen, legt man das Verhalten für jede Klasse fest führt dies zu Codeduplizierung Wenn alle Berechnungsformen in einer Klasse zusammengefasst werden, wird diese schwer wartbar, zu groß und unflexibel Änderungen an der Oberklasse haben Auswirkungen auf alle Unterklassen, dies führt zu teils unerwünschten Abhängigkeiten Konfigurierbarkeit: Je nach Situation müssen Algorithmen ausgetauscht oder neue ergänzt werden Bei Vererbung lässt sich Verhalten nur zur Kompilierzeit festlegen, und kann nicht zur Laufzeit konfiguriert werden Vermeidung komplexer Mehrfachverzweigung, die von einem bestimmten Zustand abhängen

Konsequenzen Definiert eine Familie von Algorithmen oder Verhalten Alternative zur Unterklassenbildung durch Delegation Spezialierung des Kontexts durch Delegation statt Unterklassen Viele Konfigurationen durch Kombinationen möglich Verhalten kann dynamisch ausgetauscht werden Vermeidung von Mehrfachverzweigungen Ermöglicht alternative Implementierungen desselben Verhaltens (z.B. Laufzeit vs. Sicherheit)

Konsequenzen Klienten müssen die verschiedenen Strategien kennen Overhead an Kommunikation zwischen Strategie und Kontext Informationen müssen an die Strategie weitergereicht werden Informationen werden oft gar nicht genutzt Bricht eventuell die Kapselung auf Erhöhte Anzahl von Objekten zur Laufzeit

Weitere Beispiele Unterschiedliches Vehalten Spielfiguren Unterschiedliche Reaktion auf Eingaben Unterschiedliche Arbeitsmodi Austausch von Algorithmen für Sortieren Statistiken Textanalyse Nutzung verschiedener Speichermodelle Validierungsstrategien für Dateneingabe

Decorator Pattern Ermöglicht das dynamische Hinzufügen zusätzlicher Funktionalität zu einer Komponente

Struktur-Diagramm des Dekorierer Musters Komponente komponente Operation() KonkreteKomponente Operation() Dekorierer Operation() komponente.Operation() KonkreterDekoriererA Operation() KonkreterDekoriererB ZusätzlicheOperation() super.Operation() WeitereOperationen() ZusätzlicherZustand Struktur-Diagramm des Dekorierer Musters

Beispiel Turtle World SpriteInterface decoratedSprite SmartSprite step() decoratedSprite SmartSprite SpriteDecorator step() step() GekkoSprite TurtleSprite CatSprite DogSprite PenDecoration LogDecoration step() step()

Beispiel Stream-Klassen der Java-Bibliothek Komponente zum Einlesen einer Textdatei FileInputStream 0011001100111000101010 Textdatei LineNumberInputStream BufferedInputStream Dekoriert die Komponente mit neuer Funktionalität: - Input wird gepuffert - Neue Methode readLine() Ermöglicht das Zählen der Zeilennummern Komponenten InputStream Dekorierer FileInputStream StringBufferedInputStream ByteArrayInputStream FileInputStream BufferedInputStream DataInputStream LineNumberInputStream

Dekorierer- Kontext & Forces Dynamisches Hinzufügen (und Entfernen) von Funktionalität und Zuständigkeiten zu einzelnen Objekten Transparente Funktionalitätserweiterung, so dass andere Objekte nicht davon betroffen sind Vermeidung von Klassenexplosionen wenn viele verschiede Kombinationen von Funktionalität erforderlich sind Flexible Alternative zu Unterklassenbildung, Funktionalität wird Objekten hinzugefügt und nicht einer Klasse Dynamische statt statischer Konfiguration Vermeidung von unnötiger Vererbung und Codeverdoppelung Funktionsüberladene Klassen sind schwer zu nutzen und zu warten

Dekorierer - Konsequenzen Höhere Flexibilität gegenüber statischer Vererbung Vermeidet funktionsüberladene Klassen auf hoher Ebene der Klassenhierarchie Eine Dekoration und seine Komponente sind nicht identisch  Vorsicht bei Vergleichen zur Objektidentität Viele kleine Objekte zur Laufzeit Reihenfolge der Dekorationen kann Verhalten beeinflussen, eventuell Nebeneffekte

Dekorierer - Weitere Beispiele Wrappen von GUI-Elementen mit Rahmen, Scrollbalken, … Stream-Klassen der Java-Bibliothek Dekorieren von Produkten mit zusätzlicher Konfiguration Kaffeeprodukte mit Zusätzen wie Extra-Shot, Sirup,… Verträge mit zusätzlichen Klauseln oder Leistungen

Abstract Factory Patten

Struktur-Diagramm des Abstrakte Fabrik Musters Klient AbstrakteFabrik ErzeugeProduktA() ErzeugeProduktB() KonkreteFabrik1 ErzeugeProduktA() ErzeugeProduktB() KonkreteFabrik2 AbstraktesProduktA AbstraktesProduktB KonkretesProduktA1 KonkretesProduktA2 KonkretesProduktB1 KonkretesProduktB2 Struktur-Diagramm des Abstrakte Fabrik Musters

<< Interface >> JTurtleWorld AbstractSpriteFactory createGekko () ; createTurtle () ; createCat(); createDog(); StupidSpriteFactory AnimalFactory StrategySpritesFactory createGekko () ; createTurtle () ; createCat(); createDog(); createGekko () ; createTurtle () ; createCat(); createDog(); createGekko () ; createTurtle () ; createCat(); createDog(); Gekko GekkoSprite Turtle TurtleSprite Cat CatSprite StupidSprite Dog DogSprite << Interface >> SpriteInterface Beispiel Turtle World

Abstrakte Fabrik (Abstract Factory) Bereitstellung einer Schnittstelle zum Erzeugen von Objekten einer Familie verwandter oder voneinander abhängiger Objekte ohne bereits die konkreten Klassen zu spezifizieren Erlaubt den Austausch von Frameworks und verschiedenen Implementierungen

Anwendbarkeit & Forces Macht Systeme unabhängig davon, wie ihre Produkte erzeugt, zusammengesetzt und repräsentiert werden Ein System soll mit einer von mehreren alternativen Produktfamilien arbeiten Sicherstellen, dass die Produkte einer Produktfamilie zusammengenutzt werden (kein Vermischen von verschiedenen Familien) Bereitstellen von Klassenbibliotheken ohne deren Implementierung offenzulegen (nur über Schnittstellen)

Konsequenzen Kapselt und isolierte konkrete Klassen vom Klienten Klienten ändern die Objekte nur über abstrakte Schnittstellen, konkrete Implementierung (und konkrete Klassennamen) muss nicht bekannt sein Der Austausch von Produktfamilien ist sehr einfach Fördert die Konsistenz, da nur Produkte einer Familie genutzt werden Das Hinzufügen neuer Produkte ist aufwändig

Weitere Beispiele Erzeugen von graphischen Oberflächen unabhängig vom konkreten Framework Abstraktion von Abläufen ohne die konkreten Serviceklassen zu kennen: Netzwerkverbindung aufbauen Daten senden und empfangen Verbindung schließen Zusammensetzen komplexer Objekte (oder Objekthierarchien) mit „Zutaten“ aus verschiedenen Baukästen Autos aus verschiedenen Serien zusammensetzen Labyrinthe aus verschiedenen Sets zusammensetzen

Definition: Muster, Mustersprachen „Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.“ (Alexander et al., 1977) “The structure of the language is created by the network of connections among individual patterns: and the language lives, or not, as a totality to the degree these patterns form a whole.” (Alexander, 1979)

Spannungsfeld aufgrund unterschiedlicher Anforderungen Entwurfsmuster sind... Lösungen für ein Problem in einem Kontext ausbalancieren Forces Spannungsfeld aufgrund unterschiedlicher Anforderungen erzeugen Entwurfsmuster erfassen die invarianten Komponenten erprobter Lösungsansätze für wiederkehrende Probleme im Design und verdeutlichen diese anhand von Beispielen.

Kontext: Problem: Lösung: Konsequenzen Du befindest dich hier, und möchtest dort hin. Problem: Der direkte Weg ist unüberwindbar. Man beachte die Einflussfaktoren. Dieses Muster ist eine erprobte (tatsächlich zum Ziel führende) Lösung. Lösung: Konsequenzen

Vorteile von Mustern Beschreiben und begründen erprobte Lösungen Machen auf (verborgene) Probleme aufmerksam Reduzieren die Komplexität und führen zu flexibleren Designs Ermöglichen die Kommunikation unter Entwicklern ( Vokabular)

Probleme mit Mustern Merke: Das Richtige richtig machen! Abstraktionsgrad von Mustern Empirisch nicht abgesicherte Muster Objektivität der „guten“ Lösung Falscher Einsatz von Mustern: Falsche Implementierung Nutzung im falschen Kontext Viele Muster implizieren nicht automatisch gutes Design! Merke: Das Richtige richtig machen!

Entwicklungsgeschichte Beck&Cunningham: Software Patterns A Pattern Language E-Learning Web-Design WikiWikiWeb: The Portland Pattern Repository 1964 1977 1979 1987 1995 2000 2003 2006 Notes on the Synthesis Of Form The Timeless Way of Building „Gang of Four“ Design Pattens GUI Pattern Pedagogical Patterns AJAX Web 2.0 „The Quality without a Name“

Gang of Four (GoF) Patterns Buchempfehlungen Gute Beispiele für das Verständnis POSA Patterns Der Klassiker! Gang of Four (GoF) Patterns

Pattern Community hillside.net Pattern Languages of Programs - PLoPs

JavaScript Design Patterns

AJAX Design Patterns

Web Design Patterns

Community Design Patterns Sign-In Continuity Invitations Private Beta Identity Profile Avatars BuddyList Availability Signs of Life ...

Wiki Design Patterns

Entwurfsmuster für Graphic User Interface (GUI) Elemtente Quelle: Mobile Design Pattern Gallery

E-Learning Patterns

Online Training Unsichtbarer Co-Moderator Vorbereitete Kontroll-Monitor Vorbereitete Beispiele