28.10.2014 Aufrufe

Einführung in die Informatik I Kapitel 13: Entwurfsmuster

Einführung in die Informatik I Kapitel 13: Entwurfsmuster

Einführung in die Informatik I Kapitel 13: Entwurfsmuster

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I<br />

Prof. Bernd Brügge, Ph.D<br />

Technische Universität München<br />

W<strong>in</strong>tersemester 2003/2004<br />

<strong>Kapitel</strong> <strong>13</strong>: <strong>Entwurfsmuster</strong><br />

2<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 1


Überblick über <strong>die</strong>ses <strong>Kapitel</strong><br />

<strong>Entwurfsmuster</strong><br />

– Ziele von <strong>Entwurfsmuster</strong>n<br />

– Kategorien von <strong>Entwurfsmuster</strong>n<br />

<strong>Entwurfsmuster</strong> <strong>in</strong> <strong>die</strong>sem <strong>Kapitel</strong><br />

¸Brückenmuster: Unterstützung von Altsystem und visionärem System<br />

– Strategiemuster: Zugriff auf e<strong>in</strong>e Familie von Algorithmen<br />

– Adaptermuster: Verb<strong>in</strong>dung zweier <strong>in</strong>kompatibler Schnittstellen<br />

(Verb<strong>in</strong>dung zu e<strong>in</strong>em Altsystem)<br />

– Beobachtermuster: Trennung zwischen Modell und verschiedenen Sichten<br />

vom Modell<br />

– Modell-Sicht-Steuerung (Model-View-Controlller, MVC): Trennung vom<br />

Modell, verschiedenen Sichten und der Programmsteuerung<br />

Objekte im MVC Muster heissen auch “bus<strong>in</strong>ess objects”<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 2


Entwicklung e<strong>in</strong>es Interaktiven Spiels<br />

In e<strong>in</strong>em rechtw<strong>in</strong>kliges Feld fahren viele Autos. E<strong>in</strong>ige s<strong>in</strong>d<br />

schnell, e<strong>in</strong>ige s<strong>in</strong>d langsamer. (Die Anzahl der Autos ist beliebig,<br />

aber ist zur Compilationszeit festgelegt).<br />

Der Spieler kontrolliert e<strong>in</strong> bestimmtes Auto mit der Maus.<br />

Die Anfangsrichtung der Autos ist zufällig gewählt.<br />

Die Autos können mite<strong>in</strong>ander und mit dem Spielrand kolli<strong>die</strong>ren.<br />

w Bei e<strong>in</strong>er Kollision zwischen Autos gibt es e<strong>in</strong>en Gew<strong>in</strong>ner und<br />

ei-nen Verlierer. Der Verlierer bleibt stehen und fällt aus.<br />

w Wenn e<strong>in</strong> Auto mit dem Spielfeldrand kolli<strong>die</strong>rt, wird es<br />

abhängig von se<strong>in</strong>er Geschw<strong>in</strong>digkeit und Richtung wieder auf<br />

das Spielfeld zurückgeworfen.<br />

Das Ziel: Werfen Sie als Spieler mit ihrem Auto soviele Autos wie<br />

möglich aus dem Rennen, bevor Ihr Auto aus dem Rennen geworfen<br />

wird.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 3


Objektentwurf von GameBoard, Referee und Car<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 7


E<strong>in</strong> Spiel mit 1 gegnerischen Auto<br />

In Gameboard.java (bumpers:cars:GameBoard.java) bestimmen Sie<br />

<strong>die</strong> Anzahl der schnellen und langsamen Autos<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 9


Klassifizierung der Autos<br />

Car<br />

FastCar<br />

SlowCar<br />

UserCar<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 11


Klasse Rectangle<br />

Diese Klasse ist im Packet java.awt def<strong>in</strong>iert.<br />

Sie def<strong>in</strong>iert e<strong>in</strong> Recheck durch <strong>die</strong> x,y<br />

Koord<strong>in</strong>aten der oberen l<strong>in</strong>ken Ecke und <strong>die</strong><br />

Breite (width) und Höhe (height).<br />

getSize() berechnet den Umfang des<br />

Rechtecks<br />

<strong>in</strong>tersects() prüft, ob e<strong>in</strong> gegebenes<br />

Rechteck das Rechteck schneidet<br />

growth() erweitert den Umfang des<br />

Rechtecks um e<strong>in</strong>e gegebene Höhe und Weite<br />

translate() bewegt <strong>die</strong> obere l<strong>in</strong>ke<br />

Ecke des Rechtecks<br />

+ x: <strong>in</strong>t<br />

+ y: <strong>in</strong>t<br />

+ height: <strong>in</strong>t<br />

+ width: <strong>in</strong>t<br />

Rectangle<br />

+Dimension getSize()<br />

+boolean <strong>in</strong>tersects(Rectangle r)<br />

+grow(<strong>in</strong>t h, <strong>in</strong>t v)<br />

+translate(<strong>in</strong>t x, <strong>in</strong>t y)<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie <strong>13</strong>


(0,0)<br />

Kollisionen: Vorüberlegungen (3)<br />

Jedes Auto repräsentieren wir durch e<strong>in</strong> um-fangendes<br />

Rechteck (bound<strong>in</strong>g rectangle).<br />

h<br />

(x,y)<br />

Damit bezeichnen wir das kle<strong>in</strong>ste Rechteck, das alle<br />

Pixels des entsprechenden Bildes vom Auto noch<br />

e<strong>in</strong>schliesst.<br />

w Wir bekommen das umfangende Rechteck durch<br />

getSize() durch getPosition().<br />

E<strong>in</strong>e liegt Kollision dann vor, wenn zwei gegebene<br />

umfangende Rechtecke m<strong>in</strong>destens e<strong>in</strong> Pixel geme<strong>in</strong>sam<br />

haben (<strong>in</strong>tersects()).<br />

w Das e<strong>in</strong>zige Problem damit ist, dass das Bild e<strong>in</strong>es Autos<br />

irregulär ist, und das umfangende Rechteck nicht ganz<br />

ausfüllt.<br />

Um dafür zu kompensieren, reduzieren wir das umfangende<br />

Rechteck auf 3/4 der orig<strong>in</strong>alen Größe (mit growth()), und<br />

platzieren se<strong>in</strong> Zentrum leicht nach l<strong>in</strong>ks unten (mit<br />

translate()).<br />

Noch e<strong>in</strong> „kle<strong>in</strong>es“ Problem: Wer ist der Gew<strong>in</strong>ner der<br />

Kollision?<br />

w<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 14


Prüfen von Kollisionen<br />

Referee<br />

Car<br />

public void moveCars() {<br />

// First each car makes a move<br />

// Then we check for collisions<br />

for (<strong>in</strong>t i = 0; i < cars.length; i++) {<br />

}<br />

}<br />

if (cars[i].isCrunched( )) {cont<strong>in</strong>ue;}<br />

Car crashedCar =<br />

collisionStrategy.detectCollision(<br />

drivenCar, cars[i]);<br />

if(crashedCar != null){<br />

BANG.play();<br />

crashedCar.setCrunched();<br />

if(drivenCar.isCrunched()){<br />

stopGame();<br />

}else{<br />

}<br />

// check if player won<br />

+startGame()<br />

+ stopGame()<br />

+ moveCars()<br />

+boolean isCrunched()<br />

+ Po<strong>in</strong>t getPosition()<br />

+ Dimension getSize()<br />

+ setCrunched()<br />

public Car detectCollision(Car car1, Car car2){<br />

Po<strong>in</strong>t p1 = car1.getPosition( );<br />

Dimension d1 = car1.getSize( );<br />

Rectangle r1 = new Rectangle(p1, d1);<br />

r1.translate(p1.x / 8, p1.y / 8);<br />

r1.grow(-1 * d1.width / 4, -1 * d1.height / 4);<br />

Po<strong>in</strong>t p2 = car2.getPosition( );<br />

Dimension d2 = car2.getSize( );<br />

Rectangle r2 = new Rectangle(p2, d2);<br />

r2.translate(p2.x / 8, p2.y / 8);<br />

r2.grow(-1 * d2.width / 4, -1 * d2.height / 4);<br />

if (r1.<strong>in</strong>tersects(r2)) {<br />

if (p1.y > p2.y){return car2; }else{return car1;}<br />

}<br />

return null;<br />

}<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 15<br />

*


Beziehung zwischen Referee und Kollisionen<br />

Referee<br />

CollisionStrategy<br />

<strong>in</strong>itGame()<br />

startGame()<br />

stopGame()<br />

moveCars()<br />

setCollisionStrategy(strategy:CollisionStrategy)<br />

getCollisionStrategy():CollisionStrategy<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

YourCollision<br />

RandomCollision<br />

DefaultCollision<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 16


Aufgabe: Entwickeln Sie YourCollision!<br />

Laden Sie <strong>die</strong> Bumpers Version von der Info I Portalseite<br />

w http://wwwbruegge.<strong>in</strong>.tum.de/projects/lehrstuhl/twiki/b<strong>in</strong>/view/Lehrstuhl/<strong>Informatik</strong>1WiSe2003/<br />

w Kompilieren und spielen Sie das Spiel:-)<br />

w Schreiben Sie Ihre neue Kollisionsfunktion<br />

w Klassenname muss personifiziert se<strong>in</strong> (z.B. CollisionBerndBruegge)<br />

w Schicken Sie den Quellcode Ihrer neuen Klasse per e-mail an<br />

timo.wolf@<strong>in</strong>.tum.de (mit Attachment, aber ohne Wurm:-)<br />

t Betreff: “Bumpers Info”<br />

t Achtung: e-mail wird gefiltert, <strong>die</strong> Betreffzeile muss exakt se<strong>in</strong><br />

w Letzte Möglichkeit: Vorlesung am Dienstag (via Chat)<br />

w Aus allen funktionierenden Beiträgen wird e<strong>in</strong> Gew<strong>in</strong>ner ausgelost.<br />

Am Dienstag wird <strong>die</strong> Entwicklungsumgebung CodeGuide benutzt<br />

w Läuft auf allen Plattformen (L<strong>in</strong>ux, MacOS X, W<strong>in</strong>dows)<br />

w Runterladbare Version (30 Tage Probe): http://www.omnicore.com<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 17


Ideen für Kollionsfunktionen<br />

Das Auto muss von l<strong>in</strong>ks getroffen werden<br />

Das Auto muss von rechts getroffen werden<br />

Das Auto muss von oben rechts kommen<br />

Das gegnerische Auto muss zweimal getroffen werden<br />

w Achtung: Gegnerisches Auto muss erst bestimmt werden<br />

Das gegnerische Auto muss <strong>in</strong> e<strong>in</strong>er bestimmten Richtung fahren<br />

usw….<br />

?<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 18


Stand des “Bumpers++” Projektes<br />

Insgesamt 35 E<strong>in</strong>reichungen bisher<br />

Die ersten 11 E<strong>in</strong>reichungen <strong>in</strong> me<strong>in</strong>er Liste<br />

w Sebastian Wegener<br />

w Jochen Mehlhorn<br />

w Maria Sterr<br />

w Mart<strong>in</strong> Lehner<br />

w Andreas Spurny<br />

w Jörg Selbach und Samuel Kerschbaumer<br />

w Robert Isele<br />

w Ivo Bonev & Aleksandar Kanchev<br />

w Stefan Puchner<br />

w Christian Schröder<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 19


Weiteres Vorgehen<br />

Heute: Vorführung <strong>die</strong>ser 11 E<strong>in</strong>reichungen<br />

wJeder Student/Student<strong>in</strong> führt <strong>die</strong> Lösung selbst vor<br />

Wer heute während der Vorlesung noch e<strong>in</strong>reicht wird noch<br />

begutachtet.<br />

wE<strong>in</strong>reichung per Chat bis <strong>13</strong>:30!<br />

Preise (gestiftet von der Firma Apple)<br />

w1. Preis: Gutsche<strong>in</strong> für e<strong>in</strong>en iPod m<strong>in</strong>i<br />

w2. Preis: Gutsche<strong>in</strong> für e<strong>in</strong>en iPod m<strong>in</strong>i<br />

Preisverleihung am nächsten Dienstag!<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 20


Vorführungen<br />

Wenn Sie Ihren Namen hier sehen, bitte nach vorne kommen (es<br />

sei denn, Sie <strong>in</strong> der Arcisstrasse:-)<br />

w Sebastian Wegener<br />

w Jochen Mehlhorn<br />

w Maria Sterr<br />

w Mart<strong>in</strong> Lehner<br />

w Andreas Spurny<br />

w Jörg Selbach / Samuel Kerschbaumer<br />

w Robert Isele<br />

w Ivo Bonev & Aleksandar Kanchev<br />

w Stefan Puchner<br />

w Christian Schröder<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 21


Für <strong>die</strong> wagemutigen “just <strong>in</strong> time” Entwickler<br />

Es stehen zur Verfügung: 7 iBooks mit CodeGuide und Bumpers<br />

Holen Sie sich e<strong>in</strong> iBook (nicht per eBay:-)<br />

w First come, first served<br />

iBooks bei<br />

w Timo Wolf, Patrick Renner<br />

w Oliver Creighton, Michael Nagel<br />

w Sie stehen auch für Fragen stehen zur Verfügung<br />

Öffnen Sie das Bumpers Projekt<br />

F<strong>in</strong>den Sie <strong>die</strong> Klasse “CollisionStrategy”.<br />

Legen Sie los!<br />

E<strong>in</strong>senden der Lösung aus dem Hörsaal<br />

w Über Rendezvous an Bumpers<br />

E<strong>in</strong>senden der Lösung aus der Arcisstrasse<br />

w Über AIM und Buddylist: Bernd Bruegge<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 22


Senden der Lösung per iChat<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 23


Senden der Lösung per iChat<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 24


Senden der Lösung per iChat<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 25


Öffnen des Bumper Projektes <strong>in</strong> CodeGuide<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 26


Auswählen des “bumpers.cpr” Projektes<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 27


Das geöffnete Projekt<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 28


Übersetzen und Starten von Bumpers<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 29


Das gestartete Spiel Bumpers<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 30


Auswahl des benutzer-def<strong>in</strong>ierten Java Packets control<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 31


Erzeugen e<strong>in</strong>er neuen Klasse<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 32


Wähle Sie “Class” aus<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 33


Wählen Sie e<strong>in</strong>en Namen für Ihre Klasse<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 34


Die neue Klasse ist erzeugt<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 35


Kopieren Sie den Quellcode von “DefaultCollision.java” and ändern Sie den<br />

Rumpf der Methode detectCollision<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 36


Sebastian Wegener<br />

Spielerauto gew<strong>in</strong>nt <strong>die</strong> Kollision, wenn es mit höherer<br />

Geschw<strong>in</strong>digkeit von oben kommt. Sonst verliert es.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 37


Jochen Mehlhorn<br />

Der Spieler gew<strong>in</strong>nt, wenn se<strong>in</strong> Auto 4 Geschw<strong>in</strong>digkeitse<strong>in</strong>heiten<br />

langsamer als das andere Auto ist.<br />

Gew<strong>in</strong>nt der Spieler e<strong>in</strong>e Kollision, erhöht sich se<strong>in</strong>e<br />

Geschw<strong>in</strong>digkeit.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 38


Maria Sterr<br />

Spieler gew<strong>in</strong>nt, wenn se<strong>in</strong> Auto von oben l<strong>in</strong>ks, oder von unten<br />

rechts kommt. Ansonsten verliert er.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 39


Mart<strong>in</strong> Lehner<br />

Die Kollisionsbereiche der Autos werden <strong>in</strong> vordere, h<strong>in</strong>tere und<br />

seitliche Trefferbereiche aufgeteilt.<br />

Je nach Trefferbereich und e<strong>in</strong>er Zufallszahl gew<strong>in</strong>nt oder verliert<br />

e<strong>in</strong> Auto.<br />

Die drei Trefferbereiche werden durch <strong>die</strong> Klasse Rectangle<br />

dargestellt.<br />

Es wird jeder e<strong>in</strong>zelne Bereich auf e<strong>in</strong>e Kollision überprüft und<br />

somit <strong>die</strong> Position der Kollision berechnet.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 40


Andreas Spurny<br />

Der Spieler kann 5 Kollisionen verlieren, bevor er das Spiel verliert.<br />

Das Spielerauto gew<strong>in</strong>nt e<strong>in</strong>e Kollision von rechts unten. Ansonsten<br />

verliert es <strong>die</strong> Kollision.<br />

Verliert der Spieler e<strong>in</strong>e Kollision gegen e<strong>in</strong> Auto mit e<strong>in</strong>er<br />

Geschw<strong>in</strong>digkeit größer als 5, so ist das Spiel bei der nächsten<br />

verlorenen Kollision verloren.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 41


Jörg Selbach / Samuel Kerschbaumer<br />

Das obere Auto gew<strong>in</strong>nt <strong>die</strong> Kollision.<br />

Das höhere Auto wird nicht mit e<strong>in</strong>em umgebenden Rechteck,<br />

sondern Pixel-basiert berechnet.<br />

Dazu müssen <strong>die</strong> Farbwerte des Image gelesen werden.<br />

Dazu werden Klasse PixelGrabber aus dem<br />

java.awt.image API verwendet.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 42


Robert Isele<br />

Das schnellere Auto ist immer Gew<strong>in</strong>ner e<strong>in</strong>er Kollision.<br />

Der Kollisionsgew<strong>in</strong>ner verliert aber erheblich an Geschw<strong>in</strong>digkeit.<br />

Das Spielerauto wird automatisch schneller.<br />

Pixelgenaue Kollisionsabfrage<br />

Um defekte Autos erkennen zu können, liegen sie auf dem Dach<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 43


Ivo Bonev & Aleksandar Kanchev<br />

Der Spieler hat 5 M<strong>in</strong>uten Zeit zu gew<strong>in</strong>nen.<br />

E<strong>in</strong> Auto ist zerstört, wenn es von dem Spielerauto <strong>in</strong>nerhalb von 5<br />

Sekunden zweimal getroffen wird.<br />

Trifft der Spieler unterschiedliche Autos, wird e<strong>in</strong> Zähler erhöht, der<br />

zur Niederlage führt.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 44


Stefan Puchner<br />

Wird das Spielerauto von unten oder oben angefahren, verliert es <strong>die</strong><br />

Kollision.<br />

E<strong>in</strong> Auto verliert an Geschw<strong>in</strong>digkeit, wenn es von vorne angefahren<br />

wird.<br />

E<strong>in</strong> Auto verliert <strong>die</strong> Kollision, wenn es bei m<strong>in</strong>imaler<br />

Geschw<strong>in</strong>digkeit von vorne angefahren wird.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 45


Christian Schröder<br />

Der Spieler wird um e<strong>in</strong>e Feuerwaffe bereichert.<br />

Gegner können nicht nur durch e<strong>in</strong>en Unfall, sondern auch durch <strong>die</strong><br />

Waffe zerstört werden.<br />

Neben der Kollisionsklasse wurden noch weitere Klassen verändert<br />

und neue Bilder e<strong>in</strong>gefügt.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 46


E<strong>in</strong> Spiel: Erreiche-15<br />

Wir starten mit den neun Zahlen 1,2,3,4, 5, 6, 7, 8 and 9.<br />

Sie und Ihr Gegner wählen abwechselnd e<strong>in</strong>e Zahl<br />

Jede Zahl kann nur e<strong>in</strong>mal genommen werden: Wenn Ihr Gegner e<strong>in</strong>e<br />

Zahl gewählt hat, können Sie <strong>die</strong>se Zahl nicht mehr wählen.<br />

Die erste Person, <strong>die</strong> 3 Zahlen gewählt hat, <strong>die</strong> zusammen 15<br />

ergeben, hat gewonnen.<br />

Beispiel:<br />

Sie:<br />

Ihr Gegner:<br />

1 5 3 8<br />

6 9 7 2<br />

Gegner<br />

Gew<strong>in</strong>nt!<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 47


Neues Spiel<br />

Ich: 7 4 1 9<br />

Andy: 3 5 2 8<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 48


Characteristika von Erreiche-15<br />

Schwierig zu spielen<br />

Das Spiel ist besonders schwierig, wenn es nicht erlaubt ist, sich<br />

irgend etwas aufzuschreiben.<br />

Warum?<br />

w Alle Zahlen müssen überprüft werden, um zu sehen, ob man<br />

gewonnen oder verloren hat. (Was sagt das über <strong>die</strong><br />

Laufzeitkomplexität aus?)<br />

w It is hard to see what the opponent will take if you take a certa<strong>in</strong><br />

number<br />

w The choice of the number depends on all the previous numbers<br />

w Not easy to devise an simple strategy<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 49


E<strong>in</strong> anderes Spiel: Tic-Tac-Toe<br />

Quelle: http://boulter.com/ttt/<strong>in</strong>dex.cgi<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 50


E<strong>in</strong>e Patt Sitation<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 51


Strategie zur Ermittlung e<strong>in</strong>er Gew<strong>in</strong>nsituation<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 52


Gew<strong>in</strong>n-Situationen für Tic-Tac-Toe<br />

Gew<strong>in</strong>nmuster<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 53


Tic-Tac-Toe ist “leicht”<br />

Warum? Reduktion der Komplexität durch Muster und Symmetrie<br />

Muster: Wenn der Spieler <strong>die</strong> folgenden 3 Muster kennt, kann er<br />

jeden Zug des Gegners neutralisieren.<br />

• Symmetrie:<br />

♦ Man braucht sich nur <strong>die</strong>se 3 Muster zu merken und kann<br />

mit 8 völlig verschiedenen Spielsituationen fertig werden.<br />

♦Weiterh<strong>in</strong> muss man sich nur 3 Eröffnungszüge und <strong>die</strong><br />

Antworten des Gegners darauf merken.<br />

♦Dann kann man Tic-Tac-Toe nicht mehr verlieren.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 54


Erreiche-15 und Tic-Tac-Toe s<strong>in</strong>d identische Probleme<br />

Jedes Tupel von 3 Zahlen, mit der man das Erreiche-15 Spiel<br />

gew<strong>in</strong>nt, ist auch e<strong>in</strong>e Gew<strong>in</strong>nsituation für Tic-Tac-Toe.<br />

Jede Tic-Tac-Toe Lösung ist e<strong>in</strong>e Lösung für das Erreiche-15 Spiel.<br />

Um <strong>die</strong> Beziehung zwischen beiden Spielen zu sehen, positionieren<br />

wir <strong>die</strong> 9 Zahlen <strong>in</strong> folgendem Arrangement:<br />

8 1 6<br />

3 5 7<br />

4 9 2<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 55


Sie:<br />

Gegner:<br />

1 5 3 8<br />

6 9 7 2<br />

8 1 6<br />

3 5 7<br />

4 9 2<br />

8 1 6<br />

3 5 7<br />

4 9 2<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 56


<strong>Entwurfsmuster</strong><br />

Hauptziel:<br />

w Wiederverwenden von existierendem Entwurfswissen<br />

w Wiederverwenden von bereits existierender Funktionalität.<br />

Def<strong>in</strong>ition: E<strong>in</strong> <strong>Entwurfsmuster</strong> beschreibt e<strong>in</strong> Problem, das immer<br />

wieder <strong>in</strong> unserer Umgebung auftaucht, und es beschreibt den Kern<br />

der Lösung zu <strong>die</strong>sem Problem, und zwar <strong>in</strong> solcher Weise, dass man<br />

<strong>die</strong> Lösung wiederverwenden kann, ohne den Lösungsweg<br />

wiederholen zu müssen.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 57


Was ist e<strong>in</strong> gutes Muster?<br />

Gute Muster adressieren unsere mentalen Grenzen:<br />

w Unser Kurzgedächtnis hat nur e<strong>in</strong>e limitierte Kapazität (7+-2).<br />

Gute Muster s<strong>in</strong>d <strong>in</strong>tellektuell “langweilig”.<br />

w E<strong>in</strong> “natürliches Modell” überw<strong>in</strong>det psychologische Grenzen<br />

besser als e<strong>in</strong>e schlechte Repräsentation.<br />

Gute Muster reduzieren <strong>die</strong> Komplexität des Systems<br />

w Durch <strong>die</strong> Wahl des Modells werden komplexe Tätigkeiten<br />

e<strong>in</strong>fach.<br />

w Benutzung von Symmetrien<br />

Gute Muster lassen sich leicht kommunizieren.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 58


E<strong>in</strong>schub: Delegation<br />

Bei der Delegation teilen sich zwei Klassen <strong>die</strong> Ausführung e<strong>in</strong>er<br />

Operation<br />

w Die Empfängerklasse empfängt den Operationsaufruf und<br />

delegiert ihn an <strong>die</strong> Delegationsklasse.<br />

w Der Klassenentwickler muss sicherstellen, dass <strong>die</strong> Klasse<br />

Benutzer <strong>die</strong> Delegate Klasse nicht missbrauchen kann.<br />

Ruft auf<br />

Delegiert zu<br />

Benutzer Empfänger Delegate<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 59


Wiederverwendung von existierendem Code:<br />

Delegation oder Implementationsvererbung?<br />

Beispiel:<br />

w Wir müssen e<strong>in</strong>e Klasse Keller implementieren.<br />

w Es existiert schon <strong>die</strong> Implementation e<strong>in</strong>er Klasse Liste und<br />

wollen sie wiederverwenden.<br />

Delegation: Klasse A fängt <strong>die</strong> Operation ab und sendet sie an e<strong>in</strong>e<br />

andere Klasse B, <strong>die</strong> <strong>die</strong> existierende Funktionalität enthält.<br />

Implementationsvererbung: Die existierende Funktionalität ist <strong>in</strong><br />

der Oberklasse A, <strong>die</strong> neue Funktionalität ist <strong>in</strong> der Unterklasse B.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 60


Beispiel: Implementation e<strong>in</strong>es Kellers (mit existierender Liste)<br />

Implementationsvererbung<br />

Delegation<br />

Liste<br />

Liste ist verborgen !<br />

+Add()<br />

+Remove()<br />

Benutzer<br />

Keller<br />

Liste<br />

Benutzer<br />

Keller<br />

+Push()<br />

+Pop()<br />

+Top()<br />

+Push()<br />

+Pop()<br />

+Top()<br />

Remove()<br />

Add()<br />

L Die Unterklasse kennt <strong>die</strong> Details der Oberklasse.<br />

L Änderung <strong>in</strong> der Oberklasse erfordert Recompilation der Unterklasse.<br />

L Operationen Add() und Remove() s<strong>in</strong>d öffentlich für Benutzer.<br />

L Gefahr des Missbrauchs der Kellergesetze!<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 61


Die “Zutaten” von <strong>Entwurfsmuster</strong>n<br />

Komposition (auch Schwarzer Kasten Wiederverwendung)<br />

w Das neue Objekt mit neuer Funktionalität ist e<strong>in</strong>e Aggregation<br />

von existierenden Komponenten<br />

w Wichtiges Konzept: Delegation<br />

Vererbung (Weißer Kasten Wiederverwendung)<br />

w Neue Funktionalität wird durch Vererbung erreicht.<br />

w Wichtige Konzepte: Implementationsvererbung und<br />

Spezifikationsvererbung<br />

Jedes <strong>Entwurfsmuster</strong> ist e<strong>in</strong>e Komb<strong>in</strong>ation von<br />

Delegation und Vererbung von Klassen<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 62


Zur Wiederholung: Das Brückenmuster<br />

Delegation<br />

Implementation<br />

Benutzer<br />

Abstraktion<br />

+Operation1()<br />

+Operation2()<br />

+Operation3()<br />

+Operation4()<br />

Vererbung<br />

+Operation1Impl()<br />

+Operation2Impl()<br />

+Operation3Impl()<br />

+Operation4Impl()<br />

Entkoppelung<br />

des Benutzers<br />

von der<br />

Implementation<br />

Konkrete<br />

ImplementationA<br />

+Operation1Impl()<br />

+Operation2Impl()<br />

Konkrete<br />

ImplementationB<br />

+Operation1Impl()<br />

+Operation2Impl()<br />

Polymorphe<br />

Implementationen<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 63


Anwendungsmöglichkeiten für das Brückenmuster<br />

Flexibilität: Wenn man e<strong>in</strong> permanente B<strong>in</strong>dung zwischen der<br />

Schnittstelle und se<strong>in</strong>er Implementation verh<strong>in</strong>dern will.<br />

w Wenn <strong>die</strong> Implementation zur Laufzeit selektiert werden solll<br />

w Wenn zwischen mehreren Implementationen zur Laufzeit h<strong>in</strong>-und<br />

hergewechselt werden soll.<br />

w Änderungen <strong>in</strong> der Implementation sollen nicht vom Benutzer<br />

bemerkt werden, d.h. der Benutzercode muss nicht recompiliert<br />

werden.<br />

Erweiterbarkeit:<br />

w Die Schnittstelle soll mit e<strong>in</strong>er bestimmten Implementation<br />

geliefert werden.<br />

w Später soll e<strong>in</strong>e neue Implementation ohne große Änderungen im<br />

Benutzercode h<strong>in</strong>zugefügt werden.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 64


E<strong>in</strong> weiteres Muster: Strategiemuster<br />

Motivation:<br />

w In Bumpers gibt jetzt viele Kollisionsfunktionen alle mit derselben<br />

Schnittstelle<br />

w Für unterschiedliche Situationen ist <strong>die</strong> e<strong>in</strong>e oder <strong>die</strong> andere Variante<br />

wünschenswert<br />

t Für den Anfänger möchte man e<strong>in</strong>e e<strong>in</strong>fache Funktion bereitstellen<br />

t E<strong>in</strong>en Fortgeschrittenen Spieler möchte man komplizierteren<br />

Funktionen herausfordern.<br />

Die unterschiedliche Situation nennen wir Kontext<br />

Die geme<strong>in</strong>same Schnittstelle nennen wir Strategie<br />

Kontext hieß früher auch Politik und Strategie nannte man<br />

Mechanismus<br />

w Das Strategiemuster erlaubt e<strong>in</strong>e Trennung zwischen der Politik und<br />

den Mechanismen zur Implementierung der Politik<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 65


UML Klassendiagramm für Bumpers<br />

Benutzer<br />

Bumpers<br />

Kontext<br />

Strategie<br />

Referee<br />

CollisionStrategy<br />

<strong>in</strong>itGame()<br />

startGame()<br />

stopGame()<br />

moveCars()<br />

setCollisionStrategy(strategy:CollisionStrategy)<br />

getCollisionStrategy():CollisionStrategy<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

YourCollision<br />

RandomCollision<br />

DefaultCollision<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

detectCollision(car1:Car, car2:Car):Car<br />

getName():Str<strong>in</strong>g<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 66


Allgeme<strong>in</strong>es Strategiemuster<br />

Benutzer<br />

Kontext<br />

Strategie<br />

+KontextSchnittstelle()<br />

+ AlgorithmusSchnittstelle()<br />

Algorithmus1<br />

Algorithmus2<br />

Algorithmus3<br />

AlgorithmusSchnittstelle()<br />

AlgorithmusSchnittstelle()<br />

AlgorithmusSchnittstelle()<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 67


Strategiemuster vs Brückenmuster<br />

Ähnlich wie beim Brückenmuster können e<strong>in</strong>e Unterklasse durch<br />

e<strong>in</strong>e andere Unterklasse zur Laufzeit ersetzt werden.<br />

Beim Brückenmuster wird <strong>die</strong> Ersetzung gewöhnlich zur Startzeit<br />

gemacht (im Konstruktor der Klasse Abstraktion)<br />

Beim Strategiemuster wird e<strong>in</strong>e Kontextschnittstelle <strong>in</strong> der Klasse<br />

Kontext angeboten, <strong>die</strong> vom Benutzer zur Laufzeit benutzt werden<br />

kann, um <strong>die</strong> gewünschte Unterklasse auszuwählen<br />

w Anfänger vs. Experte<br />

w Laufzeitkomplexität vs Speicherkomplexität<br />

w Niveau des Spiels<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 68


Strategiemuster<br />

Auswahl des Algorithmus <strong>in</strong><br />

der Klasse Benutzer<br />

Benutzer<br />

Kontext<br />

Strategie<br />

+KontextSchnittstelle()<br />

+ AlgorithmusSchnittstelle()<br />

Algorithmus1<br />

Algorithmus2<br />

Algorithmus3<br />

AlgorithmusSchnittstelle()<br />

AlgorithmusSchnittstelle()<br />

AlgorithmusSchnittstelle()<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 69


Brückenmuster<br />

Auswahl der Unterklasse im<br />

Konstruktor<br />

Benutzer<br />

Abstraktion<br />

+Operation1()<br />

+Operation2()<br />

+Operation3()<br />

+Operation4()<br />

Implementation<br />

+Operation1Impl()<br />

+Operation2Impl()<br />

+Operation3Impl()<br />

+Operation4Impl()<br />

Konkrete<br />

ImplementationA<br />

Konkrete<br />

ImplementationB<br />

+Operation1Impl()<br />

+Operation2Impl()<br />

+Operation1Impl()<br />

+Operation2Impl()<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 70


Bumpers Programmieraufgabe<br />

Insgesamt 40 E<strong>in</strong>sendungen!<br />

Kern der Aufgabe war es, e<strong>in</strong>e Unterklasse zu schreiben und den<br />

Quellcode <strong>die</strong>ser neuen Klasse an den Aufgabensteller zu schicken.<br />

t “Offshore-Programmierungs” Modell<br />

Viele orig<strong>in</strong>elle E<strong>in</strong>sendungen<br />

E<strong>in</strong>ige E<strong>in</strong>sendungen g<strong>in</strong>gen weit über das h<strong>in</strong>aus, was gefragt<br />

wurde.<br />

w Allerd<strong>in</strong>gs nicht als Unterklasse der Klasse CollisionStrategy,<br />

sondern durch e<strong>in</strong>e Anzahl von Änderungen im gesamten<br />

Bumpers Code<br />

Nach langem Überlegen haben wir uns entschlossen, alle<br />

E<strong>in</strong>sendungen zu berücksichtigen und <strong>die</strong> beiden Preise durch e<strong>in</strong>e<br />

Verlosung zu bestimmen!<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 71


E<strong>in</strong>sendungen<br />

1 Aleksandar Kanchev<br />

2 Alex Duliu<br />

3 Andreas Me<strong>in</strong>l<br />

4 Andreas Pfadler<br />

5 Andreas Spurny<br />

6 Andreas Würfl<br />

7 Benjam<strong>in</strong> Frank<br />

8 Christian Kern<br />

9 Christian Schröder & Johannes Stamme<br />

10 Christian Stöger<br />

11 Cornelia Kucke<strong>in</strong><br />

12 Dennis Titze<br />

<strong>13</strong> Deyan Peev<br />

14 Dom<strong>in</strong>ik Grusemann<br />

15 Florian Hamel<br />

16 Florian Reichl<br />

17 Ivo Bonev<br />

18 Jakob Vogel & Sebastian Hagen<br />

19 Jan Birke<br />

20 Jochen Mehlhorn<br />

21 Johannes Pichlers<br />

22 Jörg Selbach<br />

23 Julia Braun<br />

24 Leon v. Tippelskirch<br />

25 Lukas Mai<br />

26 Maria Sterr<br />

27 Mario Gemoll<br />

28 Mart<strong>in</strong> Lehner<br />

29 Nick Heuser<br />

30 Nicolas Heuser<br />

31 Peter Pichlmaier<br />

32 Ralf Stauder<br />

33 Rene Treffer<br />

34 Robert Isele<br />

35 Samuel Kerschbaumer<br />

36 Sebastian Wegener<br />

37 Stefan Kiendl<br />

38 Stefan Puchner<br />

39 Thomas Endres<br />

40 Thomas Müller<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 72


Verlosung<br />

Gutsche<strong>in</strong> für e<strong>in</strong>en iPod m<strong>in</strong>i<br />

wName: Dom<strong>in</strong>ik Grusemann<br />

Gutsche<strong>in</strong> für e<strong>in</strong>en iPod m<strong>in</strong>i<br />

wName: Nicolas Heuser<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 73


Und weiter geht es <strong>in</strong> der Vorlesung<br />

Adaptermuster<br />

Proxymuster<br />

Beobachtermuster<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 74


Zusammenarbeit von <strong>in</strong>kompatiblen Systemen<br />

Apollo <strong>13</strong>: “Houston we have a problem”<br />

Nach der Explosion mussten <strong>die</strong> Astronauten vom Command<br />

Module <strong>in</strong> den Lunar Module umziehen<br />

w Lunar Module<br />

t Entwurfsparameter: 2 Leute leben dar<strong>in</strong> für 2 Tage<br />

t Jetzt: 3 Leute müssen für 4 Tage dar<strong>in</strong> leben<br />

w Im Lunar Module System gab es 4 Kanister zum Speichern von<br />

Kohlendioxid mit runden Öffnungen<br />

t Nach 1.5 Tagen waren <strong>die</strong> Kanister gefüllt, und der Anteil<br />

vom Kohlendioxid im Lunar Module wurde lebensgefährlich<br />

t Entfernung des Kohlendioxids wurde zum großen Problem<br />

Im Command Module gab es Lithiumhydroxid Kanister, <strong>die</strong><br />

Kohlendioxid entfernen konnten, aber sie hatten e<strong>in</strong>e quadratische<br />

Öffnung!<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 75


Kohlendioxidspeicher-<br />

Schnittstelle im<br />

Lunar Module System<br />

Kohlendioxidspeicher-<br />

Schnittstelle im<br />

Command Module System<br />

Astronaut<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 76


Adaptermuster<br />

Konvertiert <strong>die</strong> Schnittstelle e<strong>in</strong>er existierenden Klasse <strong>in</strong><br />

e<strong>in</strong>e andere Schnittstelle, <strong>die</strong> vom Benutzer erwartet wird.<br />

E<strong>in</strong> Adapter lässt Funktionen und Klassen<br />

zusammenarbeiten, <strong>die</strong> ursprünglich nicht für <strong>die</strong><br />

Zusammenarbeit entworfen worden s<strong>in</strong>d.<br />

Wird oft benutzt um e<strong>in</strong>e alte Softwarekomponente -<br />

manchmal Legacy System genannt - <strong>in</strong> e<strong>in</strong>em neuen<br />

System wieder zu verwenden.<br />

Anderer Name: Wrapper<br />

Es gibt 2 Arten von Adaptermustern:<br />

w Klassen-Adapter : Benutzt Mehrfachvererbung<br />

w Objekt-Adapter: Benutzt E<strong>in</strong>fachvererbung und<br />

Delegation<br />

Objekt-Adapter gibt es häufiger als Klassen-Adapter. Wir<br />

werden hier nur Objekt-Adapter besprechen.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 77


Adaptermuster<br />

Benutzer<br />

Zielschnittstelle<br />

Request()<br />

Adaptee<br />

Exist<strong>in</strong>gRequest()<br />

Vererbung<br />

adaptee<br />

Adapter<br />

Delegation<br />

Request()<br />

Adaptee ist das Altsystem. Oft ist es nicht e<strong>in</strong>mal e<strong>in</strong>e Klasse.<br />

Zielschnittstelle ist <strong>die</strong> neue moderne Spezifikation!<br />

Adapter ist das Verb<strong>in</strong>dungsglied zwischen Zielschnittstelle und<br />

Adaptee.<br />

w Vererbung wird benutzt, um <strong>die</strong> Schnittstelle der abstrakten Klasse<br />

Zielschnittstelle zu implementieren.<br />

w Delegation wird benutzt um den Adaptee an den Adapter zu b<strong>in</strong>den.<br />

w Zielschnittstelle wird <strong>in</strong> Java als Schnittstelle realisiert.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 78


Adapter vs Brückenmuster<br />

Ähnlichkeit:<br />

w Beide Muster verstecken <strong>die</strong> Details e<strong>in</strong>er existierenden<br />

Implementation<br />

Unterschied:<br />

w Das Adaptermuster ist dazu da, um völlig unabhängig vone<strong>in</strong>ander<br />

entworfene Komponenten zusammenarbeiten zu lassen.<br />

t Es wird auf Systeme angewandt, nachdem sie implementiert<br />

worden s<strong>in</strong>d.<br />

w Das Brückenmuster wird bereits während des Entwurfs benutzt, um<br />

Abstraktionen und Implementationen unabhängig vone<strong>in</strong>ander<br />

entwickeln zu lassen.<br />

t Entwicklung e<strong>in</strong>es erweiterbaren Systems.<br />

t H<strong>in</strong>zufügen neuer Abstraktionen, selbst wenn sie während der<br />

Analyse noch nicht bekannt waren.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 79


Beobachtermuster: Motivation<br />

Subjekt<br />

Sichten<br />

DaimlerChrysler<br />

Aktie<br />

Wert der Aktie<br />

Zeitlicher Verlauf des Aktienkurses<br />

Anteil an me<strong>in</strong>em Portfolio<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 80


Beobachtermuster<br />

Das Beobachtermuster def<strong>in</strong>iert e<strong>in</strong>e “e<strong>in</strong>s-zu-viele”<br />

Abhängigkeit zwischen 2 Arten von Objekten:<br />

– Subjekt<br />

– Beobachter<br />

Wenn sich der Zustand des Subjektes ändert, dann werden<br />

alle Beobachter benachrichtigt<br />

– Jeder Beobachter ist dann selbst dafür verantwortlich, den neuesten<br />

Zustand zu zeigen.<br />

Anderer Name:<br />

– Verleger-Abonnent (Publisher-Subscriber)<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 81


E<strong>in</strong> weiteres Beispiel: Sichten e<strong>in</strong>er Vorlesung. Es gibt 3<br />

Möglichkeiten den Date<strong>in</strong>amen zu ändern. Was passiert jeweils?<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 82


Sichten e<strong>in</strong>es Date<strong>in</strong>amen<br />

+subscribeView()<br />

+unsubscribeView()<br />

+notifyView()<br />

File<br />

*<br />

+updateFilename()<br />

View<br />

InfoView<br />

ListView<br />

SlideView<br />

+updateFilename()<br />

+updateFilename()<br />

+updateFilename()<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 83


Das allgeme<strong>in</strong>e Beobachtermuster<br />

Subject<br />

addObserver(observer)<br />

deleteObserver(observer)<br />

notifyObservers()<br />

observers *<br />

Observer<br />

update()<br />

ConcreteSubject<br />

subjectState<br />

getState()<br />

setState(newState)<br />

subject<br />

ConcreteObserver<br />

observerState<br />

update()<br />

Subject repräsentiert das zu observierende Objekt<br />

– ConcreteSubject repräsentiert den aktuellen Zustand e<strong>in</strong>es Objektes<br />

Die Klasse Observer repräsentiert e<strong>in</strong>e Sicht (“view”) des Zustandes<br />

– ConcreteObserver enthält den Zustand der Sicht<br />

Observer kann man als Java <strong>in</strong>terface implementieren. Subject nicht,<br />

denn es muss <strong>die</strong> Liste aller Beobachter speichern.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 84


Beobachtermuster <strong>in</strong> Bumpers: Car und Instrument<br />

Subject<br />

Observer<br />

DrivenCar<br />

+subscribeInstrument()<br />

+unsubscribeInstrument()<br />

+notifyInstrument()<br />

*<br />

Instrument<br />

+updateInstrument()<br />

Concrete<br />

Observer<br />

Rotations<br />

PerSecond<br />

Speedometer<br />

GPS<br />

Body<br />

+updateInstrument()<br />

+updateInstrument()<br />

+updateInstrument()<br />

+updateInstrument()<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 85


Beobachtermuster <strong>in</strong> Bumpers<br />

Car<br />

Lesen Sie den<br />

Code <strong>in</strong> Bumpers!<br />

+<strong>in</strong>itiate()<br />

DrivenCar<br />

public class DrivenCar extends Car {<br />

private ArrayList <strong>in</strong>struments = new ArrayList();<br />

*<br />

Instrument<br />

+<strong>in</strong>itiate()<br />

+subscribeInstrument()<br />

+unsubscribeInstrument()<br />

+notifyInstrument()<br />

+notifyInstruments()<br />

public void <strong>in</strong>itiate(<strong>in</strong>t max_x, <strong>in</strong>t max_y) {<br />

//..Sett<strong>in</strong>g up the car<br />

notifyInstruments();<br />

}<br />

public void notifyInstruments(){<br />

Iterator iter = <strong>in</strong>struments.iterator();<br />

while (iter.hasNext()) {<br />

Instrument C = (Instrument)iter.next();<br />

C.updateIntrument();<br />

}<br />

}<br />

+updateInstrument()<br />

public void subscribeInstrument(Instrument I){<br />

if(I != null && !this.<strong>in</strong>struments.conta<strong>in</strong>s(I)){<br />

this.<strong>in</strong>struments.add(I);<br />

}<br />

}<br />

public void unsubscribeInstrument(Instrument I){<br />

if(I != null && this.<strong>in</strong>struments.conta<strong>in</strong>s(I)){<br />

this.<strong>in</strong>struments.remove(I);<br />

}<br />

}<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 86


Modell-View-Controller (Modell-Sicht-Steuerung<br />

Muster)<br />

Steuerung<br />

Controller<br />

View<br />

<strong>in</strong>itiator repository<br />

*<br />

1<br />

subscriber<br />

*<br />

Model<br />

1<br />

notifier<br />

Observer<br />

(GUI, Graphische Benutzer<br />

Schnittstelle)<br />

Subject<br />

(“Bus<strong>in</strong>ess Objects”,<br />

Datenbank)<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 87


Programmierpraktikum Application Server<br />

Sommersemester 2004<br />

Für Info I Interessierte:<br />

Vorbesprechung im Anschluss an <strong>die</strong>se Vorlesung<br />

Volker Hafner<br />

Ort: 01:07:014<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 88


Proxy Muster: Motivation<br />

Es ist <strong>13</strong>:30.<br />

Ich sitze mit me<strong>in</strong>em drahtlosen Laptop <strong>in</strong> der Vorlesung<br />

Ich muss heute noch unbed<strong>in</strong>gt Bruegge’s Buch bei amazon.com<br />

kaufen.<br />

Ich kriege 1 kb/sec<br />

Was kann ich tun?<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 89


Proxy Muster<br />

Problem: Wenn das Objekt komplex ist, dann ist Objekt-<br />

Instantiierung “teuer”<br />

Lösung:<br />

– Verzögere <strong>die</strong> Instantiierung bis zu der Zeit, wo das Objekt tatsächlich<br />

benutzt wird<br />

– Wenn es nie benutzt wird, fallen <strong>die</strong> Kosten für <strong>die</strong> Objekt Instantiierung<br />

also nicht an!<br />

Problem: Wenn das Objekt auf e<strong>in</strong>em anderen Rechner ist, dann ist<br />

sogar der Objekt-Zugriff “teuer”<br />

Lösung:<br />

– Instantiiere und <strong>in</strong>itialisiere e<strong>in</strong> “kle<strong>in</strong>eres” lokales Objekt, das als<br />

Stellvertreter (“proxy”) für das richtige Objekt agiert.<br />

– Greife vorwiegend auf <strong>die</strong>ses lokale Objekt zu<br />

– Greife auf das entfernte (richtige) Objekt nur zu, wenn der Benutzer es<br />

möchte.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 90


Proxymuster Klassendiagramm<br />

Benutzer<br />

Subjekt<br />

Request()<br />

Vererbung<br />

Proxy<br />

Request()<br />

Delegation<br />

RealesSubjekt<br />

Request()<br />

Das Proxymuster ist auch e<strong>in</strong>e Komb<strong>in</strong>ation<br />

von Vererbung und Delegation<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 91


Proxymuster im Detail<br />

Benutzer<br />

Subjekt<br />

Request()<br />

Vererbung<br />

Proxy<br />

Request()<br />

Delegation<br />

RealesSubjekt<br />

Request()<br />

Wir benutzen Spezifikationsvererbung für <strong>die</strong> Klasse Subjekt<br />

– In Java kann man Subjekt als Schnittstelle (<strong>in</strong>terface) implementieren.<br />

– Proxy ist Unterklasse der abstrakten Klasse Subjekt.<br />

Der Benutzer ruft immer Request() <strong>in</strong> Proxy auf.<br />

– Die Implementation von Request() <strong>in</strong> der Klasse Proxy benutzt dann Delegation,<br />

um auf Request() <strong>in</strong> RealesSubjekt zuzugreifen.<br />

– RealesSubjekt ist ebenfalls Unterklasse der abstrakten Klasse Subjekt.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 92


Anwendungen fürs Proxymuster<br />

Verteilte Programmierung:<br />

– Reduzierung der Kosten von Zugriffen auf entfernte Objekte<br />

– Virtuelle Objekte<br />

Authentifizierung:<br />

– Überprüfung der Zugriffsrechte e<strong>in</strong>es Aufrufers<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 93


Virtuelles Proxy Beispiel<br />

Image<br />

bound<strong>in</strong>gBox()<br />

draw()<br />

ProxyImage<br />

bound<strong>in</strong>gBox()<br />

draw()<br />

realSubject<br />

RealImage<br />

bound<strong>in</strong>gBox()<br />

draw()<br />

Images werden separat vom Text gespeichert und gezeigt.<br />

Der Benutzer kann nicht sagen, ob er es mit ProxyImage anstatt<br />

von RealImage zu tun hat.<br />

Das Zeigen kann im Proxy anders implementiert se<strong>in</strong> also <strong>in</strong><br />

RealImage<br />

– ProxyImage kann beispielsweise e<strong>in</strong> leeres Rechteck anstelle des Bildes<br />

zeigen<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 94


Beispiel:<br />

Webseitenzugriff<br />

via RealImage<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 95


Aktivierung der Proxy Klasse<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 96


Beispiel:<br />

Webseitenzugriff<br />

via Proxy<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 97


Image<br />

bound<strong>in</strong>gBox()<br />

draw()<br />

ProxyImage<br />

bound<strong>in</strong>gBox()<br />

draw()<br />

realSubject<br />

RealImage<br />

bound<strong>in</strong>gBox()<br />

draw()<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 98


TUM<br />

Mit Proxy<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 99


TUM<br />

Ohne Proxy<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 100


Taxonomie von <strong>Entwurfsmuster</strong>n<br />

EntwurfsMuster<br />

Strukturelle<br />

Muster<br />

Verhaltens<br />

Muster<br />

Erzeugungs<br />

Pattern<br />

Kommando<br />

Beobachter<br />

Strategie<br />

Abstrakte<br />

Fabrik<br />

Builder<br />

Muster<br />

Adapter Brücke Kompositum<br />

Proxy<br />

Mehr Muster<br />

In Info II<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 101


Weiterführende Literatur über Muster<br />

E. Gamma, R. Helm, R.Johnson, J. Vlissides<br />

– Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley,<br />

1995<br />

F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal<br />

– Pattern-Oriented Software Architecture: A System of Patterns. Wiley, 1996.<br />

M. Fowler<br />

– Analysis Patterns: Reusable Object Models. Addison-Wesley, 1997.<br />

T. J. Mowbray & R. C. Malveau<br />

– CORBA Design Patterns. Wiley, 1997.<br />

S. W. Ambler<br />

– Process Patterns: Build<strong>in</strong>g Large-Scale Systems Us<strong>in</strong>g Object Technology.<br />

Cambridge University Press, 1998.<br />

W. J. Brown, H. W. McCormick, & S. W. Thomas<br />

– AntiPatterns and Patterns <strong>in</strong> Software Configuration Management. Wiley, 1999.<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 102


Gedanken zur Vorlesung (Anstatt e<strong>in</strong>er Evaluierung)<br />

Viele Experimente. Zuviele?<br />

– Vorlesung als Broadcast vs Vorlesung als Interaktion<br />

Die Internetverb<strong>in</strong>dung zur Arcisstrasse<br />

– Können wir auch im Sommersemester anbieten<br />

– Immer noch am Experimentieren<br />

– Videofilme<br />

– Audio<br />

Vorlesungsfolien<br />

– Zeitiges Posten auf dem Portal<br />

– Genauigkeit vs. Anzahl der Änderungen<br />

– “Filme” der Vorlesungsfolien<br />

– Alternative Darstellung der Folien? MultiFrameViewer<br />

Interaktive Vorlesung<br />

– Programmieraufgaben während der Vorlesung<br />

Zentralübung<br />

– Zusätzliche <strong>in</strong>teraktive Programmieraufgaben (Bumpers)<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 103


Was kommt jetzt?<br />

Am Donnerstag (12.Februar) ke<strong>in</strong>e Vorlesung<br />

Klausur:<br />

– 14. Februar 2004, 9:00 <strong>in</strong> verschiedenen Hörsälen<br />

– Bitte achten Sie auf <strong>die</strong> Platzverlosung<br />

– Lesen Sie noch e<strong>in</strong>mal das Merkblatt und schauen sie auf <strong>die</strong> Info I-<br />

Portalseite<br />

E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> II, Sommersemester 2004<br />

– Dienstag 12:15- <strong>13</strong>:45<br />

– Donnerstag 8:30 - 10:00<br />

– Zentralübung Dienstag nachmittag: Timo Wolf<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 104


Vielen Dank!<br />

Auf Wiedersehen <strong>in</strong> Info II<br />

Copyright 2004 Bernd Brügge, Christian Herzog E<strong>in</strong>führung <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> I TUM W<strong>in</strong>tersemester 2003/2004 <strong>Kapitel</strong> <strong>13</strong>, Folie 105

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!