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