Design Pattern SS 10 Prof. Albert Zündorf

Slides:



Advertisements
Ähnliche Präsentationen
Anzahl der ausgefüllten und eingesandten Fragebögen: 211
Advertisements

Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Die Projektgruppe heißt Sie herzlichst willkommen
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Telefonnummer.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
Statistiken und Tabellen
EF: Standards + H2O red = H2O.
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
Mh9S170Nr6 a. x1= –9; x2 = 1 b. x1= –4; x2 = 1 c. x1= 1; x2 = 2 d. leer e. x1= –15; x2 = 4,2 f. x1= –3,53; x2 = 1,28 g. leer h. x1= 0,2; x2 = 2 i. x1=
Internet facts 2008-II Graphiken zu dem Berichtsband AGOF e.V. September 2008.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Differentielles Paar UIN rds gm UIN
Prof. Dr. Bernhard Wasmayr
Programmiermethodik SS 07 Prof. Albert Zündorf
Programmiermethodik SS 09 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339 im Altbau)
Objektorientierte Vererbung
Model Driven Engineering SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339)
Model Driven Engineering SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339)
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Software Engineering I m Vorlesung im Wintersemester 2010/11 m.
Model Driven Engineering SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339)
Programmiermethodik SS 10 Prof. Albert Zündorf
Model Driven Engineering SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339)
Programmiermethodik SS2010 © 2010 Albert Zündorf, University of Kassel 1 Gesamtvorgehen 1. Textuelle Szenarios 2. Objektdiagramme 3. Klassendiagramm 4.
Studienverlauf im Ausländerstudium
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Prof. Dr. Bernhard Wasmayr VWL 2. Semester
AWA 2007 Natur und Umwelt Natürlich Leben
Zerlegung von Quadraten und ????
Model Driven Engineering SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee Kassel (Raum 1339)
Prof. Dr. Günter Gerhardinger Soziale Arbeit mit Einzelnen und Familien Übersicht über die Lehrveranstaltung Grundlegende Bestimmungsfaktoren der Praxis.
20:00.
Zusatzfolien zu B-Bäumen
In der Schule.
Eine Einführung in die CD-ROM
GBI Genios Wiso wiso bietet Ihnen das umfassendste Angebot deutsch- und englischsprachiger Literatur für die Wirtschafts- und Sozialwissenschaften. Wir.
Dokumentation der Umfrage
für Weihnachten oder als Tischdekoration für das ganze Jahr
1 Ein kurzer Sprung in die tiefe Vergangenheit der Erde.
Wir üben die Malsätzchen
Syntaxanalyse Bottom-Up und LR(0)
Addieren und Subtrahieren von Dezimalzahlen
Messung der Ionisierungsenergie von Wasserstoff
Der Ablauf eines Clear Rex Klärzyklus
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Geometrische Aufgaben
Symmetrische Blockchiffren DES – der Data Encryption Standard
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Parkplatz-Orga Diese Version ist vom finale Version!
Kamin- und Kachelöfen in Oberösterreich
Zusammengestellt von OE3DSB
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
Technische Frage Technische Frage Bitte löse die folgende Gleichung:
Unternehmensbewertung Thomas Hering ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List of Figures Tabellenübersicht.
Forschungsprojekt Statistik 2013 „Jugend zählt“ – Folie 1 Statistik 2013 „Jugend zählt“: Daten zur Arbeit mit Kindern und Jugendlichen.
AGOF facts & figures: Branchenpotenziale im Internet Q2 2014: Parfum & Kosmetik Basis: internet facts / mobile facts 2014-I.
Gedankenlesen Durch Studien fand man heraus, dass Gedanken in einem gewissen Maße lesbar sind.
Folie Einzelauswertung der Gemeindedaten
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Design Pattern SS 15 Prof. Albert Zündorf
 Präsentation transkript:

Design Pattern SS 10 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee 73 34121 Kassel (Raum 1339)

Organisatorisches Umfang: 4 SWS teils Vorlesungen teils Übungen Übungsbetreuung: Johannes Spohr, Sebastian Schulz Ort und Zeit: Vorlesung: Dienstags 16:00 - 19:00 Raum 2104 (Erste Vorlesung: 13.04.10) Übung:? In obigem Zeitraum Prüfung: Pflichtübungsaufgaben (korrigiert, bepunktet) Folienskript / Screen Videos: http://www.se.eecs.uni-kassel.de. Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Literatur Grundlegend: E. Gamma, R. Helm, R. Johnson, J. Vlissides: Design Patterns (Elements of Reusable Object-Oriented Software); Addison Wesley, Bonn, ISBN 0-201-63361-2 (1994) Patterns Home Page: st-www.cs.uiuc.edu/users/patterns/patterns.html Unified Modeling Language: Martin Hitz, Gerti Kappel: UML @ Work, dpunkt.verlag (ziemlich gut) Hintergrund: Frederick P.\ Brooks: The Mythical Man Month, Addison Wesley 1975 (ist nur kurz aber ziemlich witzig, unbedingt mal lesen) Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Gliederung Einführung Design Grundprinzipien Grundlegende Pattern Weitere Pattern Zusammenfassung Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

1. Einführung Ziele der Veranstaltung: Design Know How für große Programme > 100 000 LOC Grundprinzipien der Wartbarkeit und Erweiterbarkeit sicherer Umgang mit Vererbung und Delegation Grundkenntnis der wichtigsten Design Pattern neue UML 2.0 features Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beispiel Composite Pattern Realisierung hierarchischer Datenstrukturen kommt in praktisch allen Software-Anwendungen vor naiver Ansatz verursacht dramatische Wartungsprobleme Gute Lösung ist Ausgangspunkt für viele weitere Pattern Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Gliederung Einführung Design Grundprinzipien Grundlegende Pattern Weitere Pattern Zusammenfassung Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

2. Design Grundprinzipien Wartbarkeit Erweiterbarkeit ein Ort eine Design Entscheidung / eine Funktionalität  lokale Änderungen nur lokale Auswirkungen lokaler Änderung (Module/Klassen, Interfaces, Sichtbarkeiten) "wenig" Vererbung Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Vererbung Substitutionsprinzip: Söhne müssen halten was die Väter versprechen anstelle eines Vaterklassenobjektes kann man auch immer ein Unterklassenobjekt verwenden hat Employee work (t : Task) : Product Enterprise created does Task Product Manager work (t : Task) : Product manage ( proj : Project ) : Presentation Project Presentation Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beispielsituationen … prod = e.work (t); … :Employee :Task :Employee Enterprise Employee work (t : Task) : Product Manager manage ( proj : Project ) : Presentation hat Project Task Presentation Product created does Struktur Verhalten Daten … prod = e.work (t); … :Employee :Task :Employee :Task :Manager :Product :Project :Presentation Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beispielsituationen … prod = e.work (t); … :Employee :Task :Employee Enterprise Employee work (t : Task) : Product Manager manage ( proj : Project ) : Presentation hat Project Task Presentation Product created does Struktur Verhalten Daten … prod = e.work (t); … :Employee :Task :Employee :Task :Manager :Product :Project :Presentation Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beispielsituationen … prod = e.work (t); … :Employee :Task :Employee Enterprise Employee work (t : Task) : Product Manager manage ( proj : Project ) : Presentation hat Project Task Presentation Product created does Struktur Verhalten Daten … prod = e.work (t); … :Employee :Task :Employee :Task :Manager :Product :Project :Presentation Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beispielsituationen … prod = e.work (t); … :Employee :Task :Employee Enterprise Employee work (t : Task) : Product Manager manage ( proj : Project ) : Presentation hat Project Task Presentation Product created does Struktur Verhalten Daten … prod = e.work (t); … :Employee :Task :Employee :Task :Manager :Product :Project :Presentation Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Co- und Contravariante Redefinitionen: wegen Substituierbarkeit: input Parameter (Lesen) in Unterklassen nur verallgemeinern (Contravariante Redefinition) output Parametern (Schreiben in Unterklassen nur spezialisieren (Covariante Redefinition) Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Delegation: alarmDevice :FlashLight … this.alarm(); … :House :Sirene run () alarm () FlashLight alarm() Sirene alarm() MailAlarm alarm() Struktur Verhalten Daten :FlashLight … this.alarm(); … :House :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe 1: Implementiert das Klassendiagramm zur Delegation Implementiert die alarm () Methoden der AlarmDevice -Unterklassen mit unterschiedlichen System.out Ausgaben Schreibt ein Testprogramm dass: ein House erzeugt, das House nacheinander mit verschieden AlarmDevice verbindet jeweils einen alarm() auslöst Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Abgabe: Bis Eclipse Workspace mit Projekt mit JUnit Test start mit einem Click Eclipse Projekte inklusive Quellcode Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Gliederung Einführung Design Grundprinzipien Grundlegende Pattern Weitere Pattern Zusammenfassung Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

1. Referenzarchitektur interaktive System QVT (Control) Generators / Interpreters GUI (Commands) Data Model GUI (Unparsing) Import/ Export Repository Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Datenmodell mit Composite Pattern: naiv Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Datenmodell mit Composite Pattern: besser Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Datenmodell mit Composite Pattern: gut Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe 2: Implementiert ein Datenmodell für ein Filesystem mit dem Composite Pattern Lest eine Teilbaum eueres Computers ein es sollte eine Jar Datei enthalten sein. zählt die Anzahl der Files inklusive der Files in den Jar Dateien summiert die Dateigrößen aller .java Dateien auf macht euch für weitere Anforderungen bereit Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Composite Pattern Problem: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Naiver Ansatz: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Visitor Pattern rekursiver Durchlauf durch Composite Struktur durchreichen eines Visitor Objekts uniformerer Umgang mit Rekursionsparametern Trennung von Durchlauf und Aktion Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Visitor Pattern Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Visitor Pattern Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Visitor Pattern Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Visitor Pattern Zusammenfassung Ziemlich viele accept und visit Methoden Double Dispatch möglich Seperation of concern Zustandsobjekt in der Rekursion Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe 3: stellt das Composite Pattern für Files vom letzten Mal auf ein Visitor pattern um. Baut einen Visitor zur Summierung der Dateigrößen aller .java Dateien auf Baut einen Visitor der alle Dateien zählt, auf deren Namen ein mitgelieferter regulärer Ausdruck matcht Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Strategy Pattern ersetze if-then-else-if Ketten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

If-then-else-if Kette: House run () ring () mode : int Struktur Verhalten Daten public void ring () { if (mode == SIRENE) { …} else if (mode == FLASH) { …} else if (mode == MAIL) { …} … Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Strategy Pattern: alarm 0..1 :House :FlashLight class House { run () ring () Alarm ring () alarm 0..1 FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten :House :FlashLight class House { public void ring () { alarm.ring (); } … :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Strategy Pattern Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hook Pattern (nicht im Gof-Buch) zusätzliches Verhalten nachträglich einbauen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hook Pattern: externAlarms n House run () ring () Alarm ring () externAlarms n FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten public void ring () { storeProtocol (); for (alarm in externAlarms) { alarm.ring (); } } :House :FlashLight :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Chain of Responsibility im wesentlichen Hook aber Abbruch wenn erfolgreich bearbeitet Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Chain of Responsibility, original < next House run () ring () Alarm ring () alarm FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten class Alarm { public boolean ring () { if (next != null) { return next.ring(); } return false; } } :House :FlashLight :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Chain of Responsibility, original : < next House run () ring () Alarm ring () alarm FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten class FlashLight { public boolean ring () { // try it if (bulb.isReady ()) { bulb.activate (); return true; } else { super.ring (); } } } :House :FlashLight :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Chain of Responsibility, besser debugbar: House run () ring () Alarm ring () alarms n {ordered} FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten class House { public boolean ring () { boolean success = false; for (a in alarms) { success = a.ring(); if (success) return true; } return false; } } alarms[1] :House :FlashLight alarms[2] :Sirene alarms[3] :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Chain of Responsibility, besser debugbar: House run () ring () Alarm ring () alarms n {ordered} FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten class FlashLight { public boolean ring () { // try it if (bulb.isReady ()) { bulb.activate (); return true; } else { return false; } } } :House :FlashLight :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beobachtungen typische Kombinationen von Assoc und Vererbung Unterklassen haben KEINE neue Methoden Unterklassen redefinieren geerbte Methoden Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Beobachtungen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe 4: Baut euer Hausbeispiel aus der ersten Hausaufgabe in eine Chain of Responsibility um. Sinnvolle Tests Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

State im wesentlichen Strategy aber systematische Strategy-Änderung nach Benutzung meist Implementierung von Statecharts Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

State: red yellow green transferCar(car) / car.stop() TraficLight state :Integer transferCar(car) Car transferCar(car) / car.setPos(…) yellow transferCar(car) / car.stop() green Struktur Verhalten Daten class TrafficLigth { void transferCar (Car car) { if (state == GREEN) { car.setPos (…); state = YELLOW; } else if (state == YELLOW) { car.stop(); state == RED; } else if (state == RED) car.stop() state = GREEN; } } } Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

State: Red TraficLight transferCar(car) Car current Yellow TLState name states Green Struktur Verhalten Daten class Red { void transferCar (Car car) { car.stop() owner.current = owner.states["green"]; } } class Green { void transferCar (Car car) { car.setPos(…) owner.current = owner.states["yellow"]; } } :Car :Red states["red"] states["yellow"] :Yellow :TrafficLight :Green states["green"] Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Listener/Observer/Model-View-Controler/Mediator im wesentlichen Hook aber Einsatz zur Überwachung von Änderungen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Listener/Observer/Model-View-Controler listeners > File size :Integer write(bytes[]) Drive usedSpace :Integer propertyChange (obj, attrName, oldVal, newVal) n Struktur Verhalten Daten class File { void write (bytes[]) { … this.setSize (size+bytes.length()); } void setSize (newVal) { if (this.size != newVal) { int oldVal = size; size = newVal; firePropertyChange ("size", oldVal, newVal); } } … :File size = 23 write ("aaaa") :Drive usedSpace = 112 :File size = 42 Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Listener/Observer/Model-View-Controler listeners > File size :Integer write(bytes[]) Drive usedSpace :Integer propertyChange (obj, attrName, oldVal, newVal) n Struktur Verhalten Daten class File { … void firePropertyChange (attrName, oldVal, newVal){ for (l in listeners) { l.propertyChange (this,attrName,oldVal,newVal); } } … :File size = 23 write ("aaaa") :Drive usedSpace = 112 :File size = 42 Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Listener/Observer/Model-View-Controler listeners > File size :Integer write(bytes[]) Drive usedSpace :Integer propertyChange (obj, attrName, oldVal, newVal) n Struktur Verhalten Daten class Drive { … void propertyChange (obj,attrName,oldVal,newVal){ usedSpace += newVal – oldVal; } } … :File size = 23 write ("aaaa") :Drive usedSpace = 112 :File size = 42 Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Listener/Observer/Model-View-Controler Drive usedSpace :Integer File size :Integer write(bytes[]) listeners > targets > n SpaceUpdater propertyChange (obj,attrName,oldVal,newVal) Struktur Verhalten Daten class SpaceUpdater { … void propertyChange (obj,attrName,oldVal,newVal){ for (t : targets) { t.usedSpace += newVal – oldVal; } } } … :File size = 23 write ("aaaa") :SpaceUpdater :File size = 42 :Drive usedSpace = 112 Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Model-View-Controler/Mediator Computer Model-View-Controler/Mediator n Drive usedSpace :Integer File size :Integer write(bytes[]) listeners > targets > n SpaceUpdater propertyChange (obj,attrName,oldVal,newVal) Struktur Verhalten Daten :Computer usedSpace = 1012 class SpaceUpdater { … void propertyChange (obj,attrName,oldVal,newVal){ for (t : targets) { t.usedSpace += newVal – oldVal; } } } … write ("aaaa") :File size = 23 :SpaceUpdater :File size = 42 :Drive usedSpace = 112 Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe 5?: Baut ein GUI für ein Auto es soll nur die Geschwindigkeit modelliert werden die Geschwindigkeit soll auf zwei Wegen visualisiert werden: Zahldarstellung (JSpinner) Schieberegler die Geschwindigkeit soll in beiden Views editiert werden können und von einem Testprogramm verstellt werden macht eine Tabelle für mehrere Autos Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Listener Concept for Car Example Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Template Method Motivation ähnlich wie Hook aber feste Vorgabe von abstrakten Template-Methoden alle Template-Methoden müssen überschrieben werden Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Template Method: alarm :House :FlashLight + ring () ~ start () ~ stop () House run () ring () alarm FlashLight Sirene ring () MailAlarm ring () ~ start () ~ stop () ~ start () ~ stop () ~ start () ~ stop () Struktur Verhalten Daten :House :FlashLight class Alarm { void ring () { start (); … stop (); … } } :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Template Method: alarm :House :FlashLight + ring () ~ start () ~ stop () House run () ring () alarm FlashLight Sirene ring () MailAlarm ring () ~ start () ~ stop () ~ start () ~ stop () ~ start () ~ stop () Struktur Verhalten Daten :House :FlashLight class FlashLigth { void start () { powerOn (); } void stop () { powerOff () } } :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Decorator ähnlich wie Composite mit nur einem Kind ähnlich wie Chain-of-Responsibility erweitere eine Strategy um zusätzliche Aktionen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Decorator: alarm 0..1 :House run () ring () Alarm ring () 0..1 orig alarm 0..1 FlashLight ring () Sirene ring () MailAlarm ring () Struktur Verhalten Daten :House class MailAlarm { ring () { sendMail(); orig.ring(); } } :Sirene :MailAlarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Proxy ähnlich wie Decorator aber kein Zusatzeffekt sondern remote, lazy oder cache Effekte Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Proxy: :House ? :Sirene :MailAlarm Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Adapter ähnlich wie Decorator aber Schnittstellenanpassung Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Adapter: :House ? :Sirene :MailAlarm Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe: Baut das Hausbeispiel mit einem (Objekt) Adapter für einen Mail-Alarm Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Flyweight Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Flyweight Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Command Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Command Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe: Command Erstellt eine einfache GUI mit einem Fußball Icon auf einer Malfläche Darunter 4 Knöpfe um den Ball jeweils 1 cm in jede Himmelsrichtung zu bewegen Darunter ein Undo und ein Redo Knopf Mit Command Pattern implementieren Test: 10 mal bewegen, 5 Undo wieder an Pos 5, 2 Redo wieder an Pos 7, 7 Undo wieder an Pos 1 Sonderpunkte für Dragging Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Factory Method: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Prototype: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Komplexer Prototyp Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Abstract Factory: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe: Abstrakte Fabrik für Autos und Garagen Konfiguration für rote Spielzeugautos und Minigaragen Konfiguration für blaue Nutzfahrzeuge und Flugzeughallen vielleicht mal Spielzeugauto mit LKW-Motor und Hundehütte Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Facade: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Import Umkehrung: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Import Umkehrung: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Plugins: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Daten Plugin: Struktur Verhalten Daten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe: Baut ein Rahmenwerk, das einfach ein Fenster aufmacht Baut ein Plugin, das in das Rahmenwerkfenster einen Button und ein Label einhängt, bei jedem Button Click soll das Label eins hoch gezählt werden. Das Rahmenwerk bekommt eine Liste der zu ladenden Plugins als Aufrufparameter. Achtung: das Rahmenwerk darf KEINE Compilezeitabhängigkeiten zu den Plugins haben Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Reuse Architekturen: Bibliotheken Frameworks Product Line Architecture Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Components & Connectors Architekturen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Components & Connectors Architekturen Wiederverwendung von "Komponenten" "Konnektoren" zur Verknüpfung und Anpassung von Komponenten Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Components & Connectors Architekturen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Components & Connectors Architekturen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Components & Connectors Architekturen Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel

Design Pattern SS2010 © 2010 Albert Zündorf, University of Kassel