Einsetzen der erlernten Techniken

Prof. Dr. Wolfgang Schramm
Vorlesung
Zusatzmaterialien zu 3. Kapitel:
Einsatz der erlernten Techniken:
Abstrakte Klassen & Interfaces
Techniken
T
h ik der
d
Programmentwicklung
Einsetzen der erlernten Techniken
Es gibt ein Entensimulationsspiel SimEnte:
D S
Das
Spiel
i l zeigt
i t eine
i Vi
Vielzahl
l hl von E
Entenarten,
t
t
di
die h
herumschwimmen
h i
und
d
Quak-Geräusche von sich geben.
Das Klassenmodell von SimEnte:
Ente
quaken()
schwimmen()
anzeigen()
// andere ….
StockEnte
anzeigen()
anzeigen()
// zeigt Stockente
// zeigt Moorente
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 1
MoorEnte
Weitere Enten
[Freeman&Freeman:
Entwurfsmuster von Kopf bis
Fuß]
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
Erweiterung: Enten sollen auch fliegen können.
Ente
quaken()
Problem?
schwimmen()
anzeigen()
fliegen()
// andere ….
StockEnte
MoorEnte
anzeigen()
anzeigen()
// zeigt Stockente
// zeigt Moorente
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 2
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
Ente
quaken()
schwimmen()
anzeigen()
fliegen()
// andere ….
StockEnte
MoorEnte
GummiEnte
anzeigen()
anzeigen()
quaken() {
// zeigt Stockente
// zeigt Moorente
// zu quietschen
// überschreiben
}
anzeigen()
// zeigt Gummiente
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 3
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
Idee: Überschreiben der Methode fliegen() – so wie bei quaken.().
GummiEnte
Problem gelöst?
quaken() {
LockEnte
// zu quietschen
// überschreiben
quaken() {
}
fli
fliegen()
() {
// so überschreiben,
// so überschreiben,
}
fliegen() {
// dass sie nichts tun
// dass sie nichts tun
}
anzeigen()
// so überschreiben,
g Gummiente
// zeigt
}
anzeigen()
// dass sie nichts tun
… und immer so weiter?
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 4
// zeigt Lockente
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
Idee: Herausziehen der Methode fliegen() aus der Oberklasse Ente in ein
Interface FlugFähig – ebenso bei quaken()  Interface QuakFähig
Ente
Problem gelöst?
schwimmen()
FlugFähig
fliegen()
StockEnte
anzeigen()
// andere ….
MoorEnte
QuakFähig
quaken()
GummiEnte
anzeigen()
anzeigen()
anzeigen()
quaken()
quaken()
quaken()
fliegen()
fliegen()
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 5
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
Bekannt:
fliegen() und quaken() sind diejenigen Teile des Klasse Ente, die
über die Enten hinweg variieren
variieren.
Idee:
Diese beiden Verhalten müssen von der Klasse Ente getrennt
werden  Herausziehen der beiden Methoden aus der Klasse Ente
und erstellen eines neuen Satzes von Klassen für das jeweilige
Verhalten.
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 6
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
<<Interface>>
<<Interface>>
FlugVerhalten
g
QuakVerhalten
quaken()
fliegen()
FliegtMitFlügeln
Quaken
Q
FliegtGarNicht
Quietschen
Qu
e sc e
fliegen() {
fliegen() {
quaken() {
quaken() {
// Implementiert
// Entenfliegen
// nichts tun – kann
// nicht fliegen
// Implementiert
// Entenquaken
}
}
}
// Implementiert
// Gummienten
Gummienten// quietschen
}
StummesQuaken
quaken() {
// nichts tun
}
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 7
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
•
•
•
•
Andere Typen von Objekten können das Flug- und Quakverhalten
wiederverwenden weil diese Verhalten nicht mehr in der Entenklasse
wiederverwenden,
verborgen sind.
Man kann einfach neue Verhalten hinzufügen, ohne irgendeine bestehende
Verhaltenklasse oder eine der Entenklassen zu ändern
ändern, welche die
Flugverhalten nutzen.
Eine Ente delegiert ihr Flug- und Quakverhalten.
Es ist möglich,
ö
das Verhalten einer Ente dynamisch zu verändern!
ä
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 8
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der erlernten Techniken
Verhaltensvariablen
werden
d mit
it
Interface-Typ
deklariert
Ente
FlugVerhalten flugVerhalten
Instanzenvariablen
halten zurr Laufzeit
La f eit
eine Referenz auf
ein spezifisches
Verhalten
QuakVerhalten quakVerhalten
Diese Methode
ersetzen
fliegen() und
quaken()
tuQuaken()
ttuFliegen()
Fli
()
schwimmen()
anzeigen()
// andere ….
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 9
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Einsetzen der <<Interface>>
erlernten Techniken
Gekapseltes
G
k
lt
Flugverhalten
FlugVerhalten
Strategy-Pattern
fliegen()
Ente
FlugVerhalten flugVerhalten
QuakVerhalten quakVerhalten
fliegen()
g () {
fliegen()
g () {
// Implementiert
// Entenfliegen
// nichts tun – kann
// nicht fliegen
}
}
tuQuaken()
tuFliegen()
schwimmen()
anzeigen()
setQuakVerhalten()
setFlugVerhalten ()
StockEnte
anzeigen()
FliegtGarNicht
FliegtMitFlügeln
Client
MoorEnte
anzeigen()
Gekapseltes
Quakverhalten
<<Interface>>
QuakVerhalten
quaken()
Quaken
Quietschen
GummiEnte
quaken() {
quaken() {
anzeigen()
// Implementiert
// Entenquaken
// Implementiert
// Gummienten// quietschen
}
}
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 10
Algorithmen
© Prof. Dr. Wolfgang Schramm
HS Mannheim
Strategy-Pattern
•
•
Das Strategy-Pattern definiert eine Familie von Algorithmen, kapselt sie
einzeln und macht sie austauschbar
austauschbar.
Das Strategy-Pattern ermöglicht es, den Algorithmus unabhängig von den
Clients, die ihn einsetzen, variieren zu lassen.
Techniken der Programmentwicklung
Kapitel 3 (Zusatz) Folie 11
© Prof. Dr. Wolfgang Schramm
HS Mannheim