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

Post on 06-Apr-2016

213 views 0 download

transcript

Design Pattern SS 15

Prof. Albert Zündorf

Fachgebiet für Software EngineeringWilhelmshö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.

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)

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

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

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

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

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

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

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

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

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

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

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)

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

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)

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

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

Vererbungskonzepte

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

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

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

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

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)

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

Datenmodell mit Composite Pattern: naiv

Struktur

Verhalten Daten

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

Datenmodell mit Composite Pattern: besser

Struktur

Verhalten Daten

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

Datenmodell mit Composite Pattern: gut

Struktur

Verhalten Daten

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

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

Composite Pattern Problem:

Struktur

Verhalten Daten

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

Naiver Ansatz:

Struktur

Verhalten Daten

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

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

Visitor Pattern

Struktur

Verhalten Daten

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

Visitor Pattern mit Reflection

Struktur

Verhalten Daten

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

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

Hausaufgabe 3:

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

Strategy Pattern

ersetze if-then-else-if Ketten

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

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

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

Strategy Pattern

Struktur

Verhalten Daten

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

Hook Pattern (nicht im Gof-Buch)

zusätzliches Verhalten nachträglich einbauen

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

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

Chain of Responsibility

im wesentlichen Hook aber Abbruch wenn erfolgreich bearbeitet

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

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

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

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

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

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

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

Beobachtungen

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

Hausaufgabe 4:

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

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

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

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

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)

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)

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

}

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

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

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

Struktur

Verhalten Daten

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

Hausaufgabe 5?:

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

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

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

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

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

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

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

Proxy

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

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

Proxy:

Struktur

Verhalten Daten :House

:Sirene

:MailAlarm

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

Adapter

ähnlich wie Decorator aber Schnittstellenanpassung

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

Adapter:

Struktur

Verhalten Daten

:House

:Sirene

:MailAlarm

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

Hausaufgabe:

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

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

Flyweight

Struktur

Verhalten Daten

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

Flyweight

Struktur

Verhalten Daten

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

Struktur

Verhalten Daten

Interpreter / Macro / Command

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

Command

Struktur

Verhalten Daten

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

Struktur

Verhalten Daten

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

Hausaufgabe: Command

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

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

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

Factory Method:

Struktur

Verhalten Daten

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

Prototype:

Struktur

Verhalten Daten

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

Komplexer Prototyp

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

Abstract Factory:

Struktur

Verhalten Daten

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

Hausaufgabe:

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

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

Facade:

Struktur

Verhalten Daten

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

Facade:

Struktur

Verhalten Daten

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

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

Plugins:

Struktur

Verhalten Daten

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

Import Umkehrung:

Struktur

Verhalten Daten

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

Import Umkehrung:

Struktur

Verhalten Daten

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

Daten Plugin:

Struktur

Verhalten Daten

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

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

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

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

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

Components & Connectors Architekturen

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

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

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

Components & Connectors Architekturen

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

Components & Connectors Architekturen

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

Components & Connectors Architekturen

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

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