+ All Categories
Home > Documents > Design Pattern SS 15 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee...

Design Pattern SS 15 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee...

Date post: 06-Apr-2016
Category:
Upload: caecilia-altenhofen
View: 213 times
Download: 0 times
Share this document with a friend
105
Design Pattern SS 15 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee 73 34121 Kassel (Raum 1339)
Transcript
Page 1: Design Pattern SS 15 Prof. Albert Zündorf Fachgebiet für Software Engineering Wilhelmshöher Allee 73 34121 Kassel (Raum 1339)

Design Pattern SS 15

Prof. Albert Zündorf

Fachgebiet für Software EngineeringWilhelmshöher Allee 73

34121 Kassel(Raum 1339)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 2

Organisatorisches

Umfang: 4 SWS teils Vorlesungen teils Übungen Übungsbetreuung: Marcel Hahn, … Ort und Zeit:

Vorlesung: Dienstags 16:00 - 19:00 Raum 1332(Erste Vorlesung:

14.04.15)Übung:? In obigem Zeitraum

Prüfung: Pflichtübungsaufgaben (korrigiert, bepunktet)

Folienskript / Screen Videos: http://www.se.eecs.uni-kassel.de.

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 3

Literatur

Elementar: Norbisrath, Zündorf, Jubeh: Story Driven Modeling,

Amazon 2014, ISBN 9781483949253 (Das Buch überhaupt ) 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)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 4

Gliederung

1. Einführung 2. Design Grundprinzipien

3. Grundlegende Pattern

4. Weitere Pattern

5. Zusammenfassung

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 5

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

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 6

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

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 7

Gliederung

1. Einführung

2. Design Grundprinzipien3. Grundlegende Pattern

4. Weitere Pattern

5. Zusammenfassung

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 8

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

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 9

Vererbung

Substitutionsprinzip:Kinder müssen halten was die Eltern versprechen

anstelle eines Elternklassenobjektes kann man auch immer ein Unterklassenobjekt verwenden

EnterpriseEmployee

work (t : Task) : Product

Manager

work (t : Task) : Productmanage ( proj : Project ) : Presentation

has

Project

Task

Presentation

Product

createddoes

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 10

BeispielsituationenEnterpriseEmployee

work (t : Task) : Product

Managerwork (t : Task) : Productmanage ( proj : Project ) : Presentation

has

Project

Task

Presentation

Product

createddoes

…prod = e.work (t);…

Struktur

Verhalten Daten :Employee

:Employee

:Manager

:Task

:Product

:Presentation :Project

:Task

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 11

BeispielsituationenEnterpriseEmployee

work (t : Task) : Product

Managerwork (t : Task) : Productmanage ( proj : Project ) : Presentation

has

Project

Task

Presentation

Product

createddoes

…prod = e.work (t);…

Struktur

Verhalten Daten :Employee

:Employee

:Manager

:Task

:Product

:Presentation :Project

:Task

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 12

BeispielsituationenEnterpriseEmployee

work (t : Task) : Product

Managerwork (t : Task) : Productmanage ( proj : Project ) : Presentation

has

Project

Task

Presentation

Product

createddoes

…prod = e.work (t);…

Struktur

Verhalten Daten :Employee

:Employee

:Manager

:Task

:Product

:Presentation :Project

:Task

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 13

BeispielsituationenEnterpriseEmployee

work (t : Task) : Product

Managerwork (t : Task) : Productmanage ( proj : Project ) : Presentation

has

Project

Task

Presentation

Product

createddoes

…prod = e.work (t);…

Struktur

Verhalten Daten :Employee

:Employee

:Manager

:Task

:Product

:Presentation :Project

:Task

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 14

Co- und Contravariante Redefinitionen:

wegen Substituierbarkeit: input Parameter (Lesen) in Unterklassen

nur verallgemeinern(Contravariante Redefinition)

output Parametern (Schreiben in Unterklassen) nur spezialisieren(Covariante Redefinition)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 15

Delegation:

House

run ()alarm ()

FlashLightalarm()

Sirenealarm()

MailAlarmalarm()

alarmDevice

Struktur

Verhalten Daten

…this.alarm();… :House

:FlashLight

:Sirene

:MailAlarm

AlarmDevicealarm ()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 16

Hausaufgabe 1:deliveryBoy

Struktur

Verhalten Daten…myCourier.deliver(p1, "WilliAllee73");… :CourierService

:CarBoy

:BikeBoy

:RollerBoy

DeliveryBoydeliver(pack, addr)

BikeBoy

deliver(pack, addr)

RollerBoy

deliver(pack, addr)deliver(pack, addr)

CarBoy

CourierService

deliver(package, address)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 17

Hausaufgabe 1:

Implementiert obiges Klassendiagramm zur Delegation(z.B. mit SDMLib)

Implementiert die deliver(pack, addr) Methoden der DeliveryBoy–Unterklassen

macht jeweils unterschiedliche System.out Ausgaben Schreibt ein Testprogramm dass:

ein CourierService Objekt und ein Paket Kaffebohnen erzeugt,

nacheinander verschiedene DeliveryBoy Objekte einbaut

jeweils deliver(coffeeBeans, "WilliAlle73") aufruft

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 18

Abgabe:

Bis Eclipse Projekt "DPH01<matrnr>" Eclipse Projekte inklusive Quellcode JUnit Test start mit einem Click

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

Vererbungskonzepte

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 19

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 20

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 21

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 22

Gliederung

1. Einführung

2. Design Grundprinzipien

3. Grundlegende Pattern4. Weitere Pattern

5. Zusammenfassung

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 23

1. Referenzarchitektur interaktive System

Repository

Data Model

GUI(Commands)

Generators / Interpreters

QVT(Control)

Import/ Export

GUI(Unparsing)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 24

Datenmodell mit Composite Pattern: naiv

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel

Datenmodell mit Composite Pattern: besser

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 26

Datenmodell mit Composite Pattern: gut

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 27

Hausaufgabe 2:

Ein Book besteht aus: Parts Chapters Sections Paragraphs Sentences

Implementiert ein Datenmodell für Books mit dem Composite Pattern

Lest die Kapitelstruktur des Buches ein. zählt die Anzahl der Objekte in euerer Composite Struktur macht euch für weitere Anforderungen bereit

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 28

Composite Pattern Problem:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 29

Naiver Ansatz:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 30

Visitor Pattern

rekursiver Durchlauf durch Composite Struktur durchreichen eines Visitor Objekts uniformerer Umgang mit Rekursionsparametern Trennung von Durchlauf und Aktion

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 31

Visitor Pattern

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 32

Visitor Pattern mit Reflection

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 33

Visitor Pattern Zusammenfassung

Ziemlich viele accept und visit Methoden

Double Dispatch möglich

Seperation of concern

Zustandsobjekt in der Rekursion

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 34

Hausaufgabe 3:

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 35

Strategy Pattern

ersetze if-then-else-if Ketten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 36

If-then-else-if Kette:

Struktur

Verhalten Datenpublic void doMove () {

if (mode == AGGRESSIVE){ …}else if (mode == DEFEND){ …}else if (mode == PLAN){ …}…

Player

main ()doMove()

mode : int

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 37

AStarStratdoMove()

Strategy Pattern:

Playermain()doMove ()

MoveStrategydoMove()

DefensiveStratdoMove()

strategy 0..1

Struktur

Verhalten Daten

class Player{

public void doMove (){

strategy.doMove ();}

:Player :AttackStrat

:DefensiveStrat

:AStarStrat

AttackStratdoMove()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 38

Strategy Pattern

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 39

Hook Pattern (nicht im Gof-Buch)

zusätzliches Verhalten nachträglich einbauen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 40

Hook Pattern:

Struktur

Verhalten Daten

public void doMove(){

produceFood();

for (strat in strategies){

strat.doMove();}

}

n

ResearchStratdoMove()

Playermain()doMove ()

StrategyPartdoMove()

DefensiveStratdoMove()

strategies

:Player :AttackStrat

:DefensiveStrat

: ResearchStrat

AttackStratdoMove()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 41

Chain of Responsibility

im wesentlichen Hook aber Abbruch wenn erfolgreich bearbeitet

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 42

< next

Chain of Responsibility, original

Struktur

Verhalten Daten

class Player{public boolean doMove () {

if (next != null){

return next.doMove();}return false;

}}

1

ResearchStratdoMove()

Playermain()doMove ()

StrategyPartdoMove()

DefensiveStratdoMove()

next

:Player :AttackStrat

:DefensiveStrat

: ResearchStrat

AttackStratdoMove()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 43

Chain of Responsibility, original :

Struktur

Verhalten Datenclass AttackStrat{

public boolean doMove () {// try itif (canAttack ()) {

doAttack ();return true;

}else {

super.ring ();} } }

1

ResearchStratdoMove()

Playermain()doMove ()

StrategyPartdoMove()

DefensiveStratdoMove()

next

:Player :AttackStrat

:DefensiveStrat

: ResearchStrat

AttackStratdoMove()

next

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 44

Chain of Responsibility, besser debugbar:

Struktur

Verhalten Datenclass Player{

public boolean doMove () {boolean success = false;for (h in handlers) {

success = h.doMove();if (success)

return true;}return false;

} }

{ordered}

handlers[1]

handlers[2]

handlers[3]

n

ResearchStratdoMove()

Playermain()doMove ()

StrategyPartdoMove()

DefensiveStratdoMove()

handlers

:Player :AttackStrat

:DefensiveStrat

: ResearchStrat

AttackStratdoMove()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 45

Chain of Responsibility, besser debugbar:

Struktur

Verhalten Datenclass AttackStrat {

public boolean doMove() {// try itif (canAttack ()) {

doAttack ();return true;

}else {

return false;} } }

{ordered}

handlers[1]

handlers[2]

handlers[3]

n

ResearchStratdoMove()

Playermain()doMove ()

StrategyPartdoMove()

DefensiveStratdoMove()

handlers

:Player :AttackStrat

:DefensiveStrat

: ResearchStrat

AttackStratdoMove()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 46

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 47

Beobachtungen

typische Kombinationen von Assoc und Vererbung Unterklassen haben KEINE neue Methoden Unterklassen redefinieren geerbte Methoden

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 48

Beobachtungen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 49

Hausaufgabe 4:

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 50

State

im wesentlichen Strategy aber systematische Strategy-Änderung nach Benutzung meist Implementierung von Statecharts

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 51

State:

Struktur

Verhalten Daten

TraficLightstate :Integer

timerTick()

Car

class TrafficLigth {void timerTick() {

if (state == RED) {car.setPos (…);state = GREEN;

}else if (state == GREEN) {

car.stop();state == YELLOW; }

else if (state == YELLOW)car.stop()state = RED;

} } }

green

yellow

redtimerTick() / car.setPos(…)

timerTick() / car.stop()

timerTick() / car.stop() car

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 52

State:

Struktur

Verhalten Daten

TLState

Green

Yellow

Red

currentTraficLight

timerTick()

Car

:TrafficLight

:Car

:Red

:Yellow

:Green

namestates

states["red"]

states["yellow"]

states["green"]

class Red {void timerTick() {

owner.current = owner.states["green"];car.setPos(…);

} }

class Green {void timerTick() {

owner.current = owner.states["yellow"];car.stop();

} }

car

car

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 53

Listener/Observer/Model-View-Controler/Mediator

im wesentlichen Hook aber Einsatz zur Überwachung von Änderungen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 54

Listener/Observer/Model-View-Controler

Struktur

Verhalten Daten

Drive

usedSpace :Integer

propertyChange (obj, attrName, oldVal, newVal)

Filesize :Integer

write(bytes[])

:DriveusedSpace = 38

write ("aaaa")

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

} }…

:Filesize = 23

:Filesize = 15

listenersnListener

propertyChange (obj, attrName, oldVal, newVal)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 55

Listener/Observer/Model-View-Controler

Struktur

Verhalten Daten

Drive

usedSpace :Integer

propertyChange (obj, attrName, oldVal, newVal)

Filesize :Integer

write(bytes[])

:DriveusedSpace = 38

write ("aaaa")

class File {…void firePropertyChange (attrName, oldVal, newVal){

for (l in listeners){

l.propertyChange (this,attrName,oldVal,newVal); } }…

:Filesize = 23

:Filesize = 15

listenersnListener

propertyChange (obj, attrName, oldVal, newVal)

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 56

Listener/Observer/Model-View-Controler

Struktur

Verhalten Daten

Drive

usedSpace :Integer

propertyChange (obj, attrName, oldVal, newVal)

Filesize :Integer

write(bytes[])

:DriveusedSpace = 38

write ("aaaa"):Filesize = 23

:Filesize = 15

listenersnListener

propertyChange (obj, attrName, oldVal, newVal)

class Drive {…void propertyChange (obj,attrName,oldVal,newVal){

usedSpace += newVal – oldVal;}

}

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 57

MVC

Struktur

Verhalten Daten

DriveusedSpace :Integer

:DriveusedSpace = 38

write ("aaaa")

class SpaceUpdater {…void propertyChange (obj,attrName,oldVal,newVal){

for (t : targets) {t.usedSpace += newVal – oldVal;

}

}

}

:Filesize = 23

:Filesize = 15

targetsn

:SpaceUpdater

SpaceUpdater

propertyChange (obj, attrName, oldVal, newVal)

Filesize :Integer

write(bytes[])

listenersnListener

propertyChange (obj, attrName, oldVal, newVal)

Computer

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 58

Struktur

Verhalten Daten:Drive

usedSpace = 38

write ("aaaa")

class SpaceUpdater {…void propertyChange (obj,attrName,oldVal,newVal) {

Dir parent = obj.getParent();

while (parent != null) {

parent.usedSpace += newVal – oldVal;

parent = parent.getParent();}

}

}

:Filesize = 23

:Filesize = 15

:SpaceUpdater

SpaceUpdater

propertyChange (obj, attrName, oldVal, newVal)

Filesize :Integer

write(bytes[])

listenersnListener

propertyChange (obj, attrName, oldVal, newVal)

Computer

DirusedSpace :Integer

filesparentn

1

Drive

:DirusedSpace = 38

:DirusedSpace = 38

:ComputerusedSpace = 38

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 59

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 60

Hausaufgabe 5?:

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 61

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 62

Template Method

Motivation ähnlich wie Hook aber feste Vorgabe von abstrakten Template-Methoden alle Template-Methoden müssen überschrieben werden

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 63

Template Method: Alarm

+ ring ()~ start ()~ stop ()

Struktur

Verhalten Daten

class Alarm {void ring () {

start ();…stop ();…

} }

:FlashLight

:Sirene

:MailAlarm

MailAlarmring ()

Sirenering ()

FlashLight~ start ()~ stop ()

~ start ()~ stop ()

~ start ()~ stop ()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 64

Template Method: Alarm

+ ring ()~ start ()~ stop ()

Struktur

Verhalten Daten

class FlashLigth {void start () {

powerOn ();}

void stop () {powerOff ()

} }

:FlashLight

:Sirene

:MailAlarm

MailAlarmring ()

Sirenering ()

FlashLight~ start ()~ stop ()

~ start ()~ stop ()

~ start ()~ stop ()

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 65

Decorator

ähnlich wie Composite mit nur einem Kind ähnlich wie Chain-of-Responsibility erweitere eine Strategy um zusätzliche Aktionen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 66

Decorator:

Struktur

Verhalten Daten

class MailAlarm {ring () {

sendMail();orig.ring();

} }

:House

:Sirene

:MailAlarm

MailAlarmring ()

Houserun ()ring ()

Alarmring ()

Sirenering ()

alarm 0..1

FlashLightring ()

0..1 orig

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 67

Proxy

ähnlich wie Decorator aber kein Zusatzeffekt sondern remote, lazy oder cache Effekte

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 68

Proxy:

Struktur

Verhalten Daten :House

:Sirene

:MailAlarm

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 69

Adapter

ähnlich wie Decorator aber Schnittstellenanpassung

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 70

Adapter:

Struktur

Verhalten Daten

:House

:Sirene

:MailAlarm

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 71

Hausaufgabe:

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 72

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel

Flyweight

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 74

Flyweight

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 75

Struktur

Verhalten Daten

Interpreter / Macro / Command

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 76

Command

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 77

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 78

Hausaufgabe: Command

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 79

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 80

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 81

Factory Method:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 82

Prototype:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 83

Komplexer Prototyp

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 84

Abstract Factory:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 85

Hausaufgabe:

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 86

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 87

Facade:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 88

Facade:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 89

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 90

Plugins:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 91

Import Umkehrung:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 92

Import Umkehrung:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 93

Daten Plugin:

Struktur

Verhalten Daten

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 94

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 95

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 96

Reuse Architekturen:

Bibliotheken Frameworks Plugin Architekturen Software Bus / ECMA Toaster Corba / RMI / REST Component & Connector Android Intents Product Line Architecture

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 97

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 98

Components & Connectors Architekturen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 99

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 100

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 101

Components & Connectors Architekturen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 102

Components & Connectors Architekturen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 103

Components & Connectors Architekturen

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 104

Wie erreicht man:

Wartbarkeit Erweiterbarkeit Qualität Produktivität Sicherheit Robustheit Usability Skalierbarkeit Verfügbarkeit

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

Design Pattern SS2015 © 2015 Albert Zündorf, University of Kassel 105


Recommended