Скачать презентацию Design Pattern SS 10 Prof Albert Zündorf Fachgebiet Скачать презентацию Design Pattern SS 10 Prof Albert Zündorf Fachgebiet

1b523db393720d44133b5416cc669256.ppt

  • Количество слайдов: 102

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

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

Literatur Grundlegend: m E. Gamma, R. Helm, R. Johnson, J. Vlissides: Design Patterns (Elements Literatur Grundlegend: m 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) m Patterns Home Page: st-www. cs. uiuc. edu/users/patterns. html Unified Modeling Language: m Martin Hitz, Gerti Kappel: UML @ Work, dpunkt. verlag (ziemlich gut) Hintergrund: m Frederick P. Brooks: The Mythical Man Month, Addison Wesley 1975 (ist nur kurz aber ziemlich witzig, unbedingt mal lesen) Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 3

Gliederung 1. Einführung 2. Design Grundprinzipien 3. Grundlegende Pattern 4. Weitere Pattern 5. Zusammenfassung Gliederung 1. Einführung 2. Design Grundprinzipien 3. Grundlegende Pattern 4. Weitere Pattern 5. Zusammenfassung Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 4

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

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

Gliederung 1. Einführung 2. Design Grundprinzipien 3. Grundlegende Pattern 4. Weitere Pattern 5. Zusammenfassung Gliederung 1. Einführung 2. Design Grundprinzipien 3. Grundlegende Pattern 4. Weitere Pattern 5. Zusammenfassung Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 7

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

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

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

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

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

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

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

Delegation: House alarm. Device Alarm. Device alarm () run () alarm () Flash. Light Delegation: House alarm. Device Alarm. Device alarm () run () alarm () Flash. Light alarm() Sirene alarm() Mail. Alarm alarm() Struktur Verhalten … this. alarm(); … Daten : Flash. Light : House : Sirene : Mail. Alarm Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 15

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

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

Gliederung 1. Einführung 2. Design Grundprinzipien 3. Grundlegende Pattern 4. Weitere Pattern 5. Zusammenfassung Gliederung 1. Einführung 2. Design Grundprinzipien 3. Grundlegende Pattern 4. Weitere Pattern 5. Zusammenfassung Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 18

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hook Pattern: House run () ring () Alarm extern. Alarms ring () n Sirene Hook Pattern: House run () ring () Alarm extern. Alarms ring () n Sirene Flash. Light ring () Mail. Alarm ring () Struktur Verhalten public void ring () { store. Protocol (); for (alarm in extern. Alarms) { alarm. ring (); } Design } Pattern SS 2010 Daten : House : Flash. Light : Sirene : Mail. Alarm © 2010 Albert Zündorf, University of Kassel 37

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

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

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

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

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

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

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

Hausaufgabe 4: m Baut euer Hausbeispiel aus der ersten Hausaufgabe in eine Chain of Hausaufgabe 4: m Baut euer Hausbeispiel aus der ersten Hausaufgabe in eine Chain of Responsibility um. m Ob ein Device benutbar ist, hängt von der Uhrzeit ab. m Sinnvolle Tests Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 45

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

State: red transfer. Car(car) / car. stop() yellow transfer. Car(car) / car. stop() green State: red transfer. Car(car) / car. stop() yellow transfer. Car(car) / car. stop() green transfer. Car(car) / car. set. Pos(…) Trafic. Light Car state : Integer transfer. Car(car) Struktur Verhalten Daten class Traffic. Ligth { void transfer. Car (Car car) { if (state == GREEN) { car. set. Pos (…); state = YELLOW; } else if (state == YELLOW) { car. stop(); state == RED; } else if (state == RED) car. stop() state = GREEN; } } Design Pattern SS 2010 } © 2010 Albert Zündorf, University of Kassel 47

State: Red Yellow Green Trafic. Light Car current TLState states name transfer. Car(car) Struktur State: Red Yellow Green Trafic. Light Car current TLState states name transfer. Car(car) Struktur Verhalten Daten class Red { void transfer. Car (Car car) { car. stop() owner. current = owner. states["green"]; } } class Green { void transfer. Car (Car car) { car. set. Pos(…) owner. current = owner. states["yellow"]; } } : Car : Red : Yellow : Green Design Pattern SS 2010 states["red"] states["yellow"] : Traffic. Light states["green"] © 2010 Albert Zündorf, University of Kassel 48

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

Listener/Observer/Model-View-Controler File listeners > size : Integer write(bytes[]) n Drive used. Space : Integer Listener/Observer/Model-View-Controler File listeners > size : Integer write(bytes[]) n Drive used. Space : Integer property. Change (obj, attr. Name, old. Val, new. Val) Struktur Verhalten class File { void write (bytes[]) { … this. set. Size (size+bytes. length()); } void set. Size (new. Val) { if (this. size != new. Val) { int old. Val = size; size = new. Val; fire. Property. Change ("size", old. Val, new. Val); } } … Pattern SS 2010 Design Daten : File write ("aaaa") size = 23 : Drive : File used. Space = 112 size = 42 © 2010 Albert Zündorf, University of Kassel 50

Listener/Observer/Model-View-Controler File size : Integer write(bytes[]) listeners > n Drive used. Space : Integer Listener/Observer/Model-View-Controler File size : Integer write(bytes[]) listeners > n Drive used. Space : Integer property. Change (obj, attr. Name, old. Val, new. Val) Struktur Verhalten class File { … void fire. Property. Change (attr. Name, old. Val, new. Val){ for (l in listeners) { l. property. Change (this, attr. Name, old. Val, new. Val); } } … Daten : File write ("aaaa") size = 23 : Drive : File used. Space = 112 size = 42 Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 51

Listener/Observer/Model-View-Controler File size : Integer write(bytes[]) listeners > n Drive used. Space : Integer Listener/Observer/Model-View-Controler File size : Integer write(bytes[]) listeners > n Drive used. Space : Integer property. Change (obj, attr. Name, old. Val, new. Val) Struktur Verhalten class Drive { … void property. Change (obj, attr. Name, old. Val, new. Val){ used. Space += new. Val – old. Val; } } … Daten : File write ("aaaa") size = 23 : Drive : File used. Space = 112 size = 42 Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 52

Listener/Observer/Model-View-Controler File size : Integer write(bytes[]) listeners > n targets > n Drive used. Listener/Observer/Model-View-Controler File size : Integer write(bytes[]) listeners > n targets > n Drive used. Space : Integer Space. Updater property. Change (obj, attr. Name, old. Val, new. Val) Struktur Verhalten class Space. Updater { … void property. Change (obj, attr. Name, old. Val, new. Val){ for (t : targets) { t. used. Space += new. Val – old. Val; } } } … Daten : File write ("aaaa") size = 23 : Space. Updater : File size = 42 : Drive Design Pattern SS 2010 used. Space = 112 53 © 2010 Albert Zündorf, University of Kassel

Computer Model-View-Controler/Mediator File size : Integer write(bytes[]) listeners > n targets > n Drive Computer Model-View-Controler/Mediator File size : Integer write(bytes[]) listeners > n targets > n Drive used. Space : Integer Space. Updater property. Change (obj, attr. Name, old. Val, new. Val) Struktur Verhalten class Space. Updater { … void property. Change (obj, attr. Name, old. Val, new. Val){ for (t : targets) { t. used. Space += new. Val – old. Val; } } } … Daten : Computer write ("aaaa") used. Space = 1012 : File size = 23 : Space. Updater : File size = 42 : Drive Design Pattern SS 2010 used. Space = 112 54 © 2010 Albert Zündorf, University of Kassel

Hausaufgabe 5? : m Baut ein GUI für ein Auto m es soll nur Hausaufgabe 5? : m Baut ein GUI für ein Auto m es soll nur die Geschwindigkeit modelliert werden m die Geschwindigkeit soll auf zwei Wegen visualisiert werden: l Zahldarstellung (JSpinner) l Schieberegler m die Geschwindigkeit soll in beiden Views editiert werden können und von einem Testprogramm verstellt werden m ein Bremspedal und ein Gaspedal wären auch schön m und vorbeifliegende Leuchtpfähle (siehe Processing Framework) m macht eine Tabelle für mehrere Autos Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 55

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

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

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

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

Template Method: House run () ring () Alarm + ring () ~ start () Template Method: House run () ring () Alarm + ring () ~ start () ~ stop () alarm Flash. Light Sirene ring () () ~ start ~ stop () ~ start () ~ stop () Mail. Alarm ring () () ~ start ~ stop () Struktur Verhalten class Flash. Ligth { void start () { power. On (); } void stop () { power. Off () } } Design Pattern SS 2010 Daten : House : Flash. Light : Sirene : Mail. Alarm © 2010 Albert Zündorf, University of Kassel 60

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

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

Decorator: House run () ring () Alarm alarm 0. . 1 ring () Flash. Decorator: House run () ring () Alarm alarm 0. . 1 ring () Flash. Light 0. . 1 orig Sirene ring () Mail. Alarm ring () Struktur Verhalten class Mail. Alarm { ring () { send. Mail(); orig. ring(); } } Daten : House : Sirene : Mail. Alarm Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 63

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

Proxy: Struktur Verhalten ? Daten : House : Sirene : Mail. Alarm Design Pattern Proxy: Struktur Verhalten ? Daten : House : Sirene : Mail. Alarm Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 65

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

Adapter: Struktur Verhalten ? Daten : House : Sirene : Mail. Alarm Design Pattern Adapter: Struktur Verhalten ? Daten : House : Sirene : Mail. Alarm Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 67

Hausaufgabe: m Baut einen Objektadapter mit dem ein Action. Listener auch als Property. Change. Hausaufgabe: m Baut einen Objektadapter mit dem ein Action. Listener auch als Property. Change. Listener verwendet werden kann. Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 68

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hausaufgabe: m Baut ein Rahmenwerk, das einfach ein Fenster aufmacht m Baut ein Plugin, Hausaufgabe: m Baut ein Rahmenwerk, das einfach ein Fenster aufmacht m 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. m Das Rahmenwerk bekommt eine Liste der zu ladenden Plugins als Aufrufparameter. m Achtung: das Rahmenwerk darf KEINE Compilezeitabhängigkeiten zu den Plugins haben Design Pattern SS 2010 © 2010 Albert Zündorf, University of Kassel 89

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

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

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

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

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

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

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

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

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

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

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

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

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