![Page 1: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/1.jpg)
Design und Implementation
Tilman Vierhuff
5. August 2004
![Page 2: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/2.jpg)
2
Was euch heute erwartet
• Richtlinien zu gutem Programmierstil und Effizienz
• Entwurfsmuster
T. Vierhuff: Design und Implementation 5. August 2004
![Page 3: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/3.jpg)
Implementationsrichtlinien
![Page 4: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/4.jpg)
Implementationsrichtlinien 4
Packages
• Sammlung miteinander verwandter Klassen
• Gemeinsame Verwandtschaft (z. B. Unterklassen von
Component in java.awt)
• Gemeinsame Kategorie (z. B. Tokenizer, Iterator,Calendar usw. in java.util)
• Modulartige Kapselung zusammenarbeitender Klassen
• Private Hilfsklassen mit eingeschrankter Sichtbarkeit
T. Vierhuff: Design und Implementation 5. August 2004
![Page 5: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/5.jpg)
Implementationsrichtlinien 5
Klassen
• Beschreibung von Objekt-Bestandteilen und -Verhalten zur
(evtl. indirekten) Erzeugung von Instanzen
• in Ausnahmefallen zur Sammlung statischer Methoden
(z. B. java.lang.Math)
Interfaces• Implementationsunabhangige Schnittstellen
• ermoglichen moderate Formen der Mehrfachvererbung
• auch als leere Marker-Interfaces (z. B.
java.lang.Cloneable)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 6: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/6.jpg)
Implementationsrichtlinien 6
Vererbung
• Vererbung in Java bedeutet ist ein
• Negativbeispiele: Vector und Stack
• Anwendung fur◦ Familien verwandter Objekte (AVM, Atom, List, Pair, Coref)
◦ Konkrete Datentypen (List, ArrayList und LinkedList)
◦ Spezialisierung mit zusatzlichen Eigenschaften (Reader,FilterReader, PushBackReader usw.)
◦ Verbergen von Implementationsdetails (Plattformabhangigkeiten)
• Dasselbe gilt fur public-Vererbung in C++
T. Vierhuff: Design und Implementation 5. August 2004
![Page 7: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/7.jpg)
Implementationsrichtlinien 7
Eigenschaften guter Schnittstellen
• vollstandig: Alle notwendigen Operationen vorhanden
• minimal: nicht durch andere Methoden ersetzbar
(gelegentliche Ausnahme: unterschiedliche Parameter)
• allgemein: Keine uberflussigen Einschrankungen
• parametrisierbar: Wiederverwendbarkeit durch Anpassung
• unabhangig: moglichst wenig Vernetzung mit anderen
Typen (außer vordefinierten)
• abgesichert: Nicht mehr Zugriff gestatten als unbedingt
notwendig
T. Vierhuff: Design und Implementation 5. August 2004
![Page 8: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/8.jpg)
Implementationsrichtlinien 8
Methoden
• Objektverhalten auf Anfrage von außen
• offentliche Methoden erhalten und hinterlassen das Objekt
immer in konsistentem Zustand
• keine Kettenaufrufe (obj.init(); obj.calculate();obj.finish();); wenn mehrere Schritte notwendig sind,
zusammen kapseln
• Sonderfalle Konstruktoren / Destruktor
• im allgemeinen Beschrankung auf eine Aufgabe
(mehrfache Aufgaben in C++ zum Teil unsicher)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 9: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/9.jpg)
Implementationsrichtlinien 9
Methoden (II)
• Selectors: Ermittlung von Eigenschaften;
Beispiel: int size()
• Modifiers: Veranderung; Beispiel: void setElementAt()
• Converters: Umwandlung; Beispiel: String toString()
• Iterators: Sonderfall, schrittweises Weiterrucken mit
Ruckgabe; Beispiel: Object next()
• Sonstige, z. B. void printStackTrace(OutputStream)
• Kombination von getX() und setX() im allgemeinen
nicht sinnvoll (= public!)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 10: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/10.jpg)
Implementationsrichtlinien 10
Bezeichner
• Bezeichner drucken aus, was der Sinn eines Objekts / einer
Methode ist (setElementAt())
• Bezeichner drucken aus, ob Kosten mit einer Methode
verbunden sind (loadLexicon())
• Richtige Interpretationsebene nutzen
(getArrayList() vs. getColors())
• Geschmackssache: Typkennzeichnung (z. B. Zeiger mit p)
• in C++: Wer ist fur dynamische Objekte zustandig?
Namensgebung: T * allocate(), adoptPointer(T *)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 11: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/11.jpg)
Implementationsrichtlinien 11
Standardmethoden
• Von der Sprache vorgesehene Minimalschnittstelle
• In Java:
String toString nutzlich zum Debuggen
boolean equals(Object) wenn flacher Vergleich zuwenig
int hashCode() gleichzeitig mit equalsObject clone() bei Bedarf
void finalize() ausnahmsweise fur Ressourcen
T. Vierhuff: Design und Implementation 5. August 2004
![Page 12: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/12.jpg)
Implementationsrichtlinien 12
Generierte Methoden in C++
• vom Compiler automatisch definiert
• bei Member-Zeigern: selbst definieren oder durch privateDeklaration verbieten
Klasse() Defaultkonstruktor
Klasse(const Klasse&)”Copy“-Konstruktor
Klasse& operator=(const Klasse&) Zuweisung
(virtual) ~ Klasse() (virtueller) Destruktor
T. Vierhuff: Design und Implementation 5. August 2004
![Page 13: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/13.jpg)
Implementationsrichtlinien 13
Generierte Methoden in C++
• vom Compiler automatisch definiert
• bei Member-Zeigern: selbst definieren oder durch privateDeklaration verbieten
Klasse() Defaultkonstruktor
Klasse(const Klasse&)”Copy“-Konstruktor
Klasse& operator=(const Klasse&) Zuweisung
(virtual) ~ Klasse() (virtueller) Destruktor
(fur operator&() und operator&() const ist die
Standarddefinitionen meist adaquat)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 14: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/14.jpg)
Implementationsrichtlinien 14
Effizienz
• Richtige Wahl der Algorithmen
• Verschachtelte Rekursion und Iteration vermeiden
• Schleifen und Rekursionen”sauber“ halten
• Mehrfachberechnungen vermeiden
• Kleine Verbesserungen:◦ final deklarieren
◦ Einfache Datentypen verwenden
◦ Iteratoren verwenden
◦ Initialisierung statt Zuweisung im Konstruktor
◦ In C++: Temporare Variablen vermeiden
T. Vierhuff: Design und Implementation 5. August 2004
![Page 15: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/15.jpg)
Implementationsrichtlinien 15
Dynamische Speicherverwaltung
• new sucht und verwaltet passenden Speicher
• Garbage Collector (bzw. delete) gliedert wieder ein
• uberflussige Reservierung und Freigabe vermeiden
• Objekte gleichen Wertes gemeinsam benutzen
• Objekte wiederverwenden und verandern
statt neu anlegen und umkopieren
• Gilt auch fur Stringkonkatenation und dynamische Arrays
• In C++ besonders kritisch: Explizite Speicherverwaltung
T. Vierhuff: Design und Implementation 5. August 2004
![Page 16: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/16.jpg)
Implementationsrichtlinien 16
Typbestimmung zu Laufzeit
• instanceof und java.lang.reflect (in C++ typeidund dynamic cast<>()) selten sinnvoll◦ nicht einfach erweiterbar
◦ manuelle Wartung notwendig
◦ kostentrachtig
• Eleganter: Wenn moglich, Vererbung und
Methodenredefinition
T. Vierhuff: Design und Implementation 5. August 2004
![Page 17: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/17.jpg)
Implementationsrichtlinien 17
In C++: inline
• Code wird eingesetzt statt Funktionen aufgerufen
• Nur fur kleinste Methoden sinnvoll
• Codeaufblahung kann erheblichen Overhead verursachen
(Caching, Page faults)
• insbesondere unsinnig bei Konstruktoren
• Methoden mit static-Variablen und virtual-Bindung
konnen nie inline expandiert werden
• Klassenabhangigkeit und offene Implementationsdetails
• nur ein Vorschlag an den Compiler
T. Vierhuff: Design und Implementation 5. August 2004
![Page 18: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/18.jpg)
Implementationsrichtlinien 18
Exceptions
• Abbruch und Sprung zum nachsten passenden catch
• Verlockend einfach zum Verlassen komplexer
Berechnungen
• Exception zu verstehen als Ausnahmezustand, wenn es
keinen anderen Ausweg gibt (z. B. Konstruktoren)
• Nach Moglichkeit Standard-Exception-Klassen benutzen
• Fangen von Exceptions in sicheren Systemen unbedingt
erforderlich
• Kein catch(Exception) oder gar catch(Throwable)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 19: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/19.jpg)
Implementationsrichtlinien 19
Unsichere Methode in C++
class Stack{private: T buf[100];
int pos;public: Stack();
void push(const T& t);const T pop();
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 20: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/20.jpg)
Implementationsrichtlinien 20
Unsichere Methode in C++
class Stack{private: T buf[100];
int pos;public: Stack();
void push(const T& t);const T pop();
}Stack::Stack(): pos(0){}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 21: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/21.jpg)
Implementationsrichtlinien 21
Unsichere Methode in C++
class Stack{private: T buf[100];
int pos;public: Stack();
void push(const T& t);const T pop();
}void Stack::push(const T& t){
buf[pos++] = t;}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 22: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/22.jpg)
Implementationsrichtlinien 22
Unsichere Methode in C++
class Stack{private: T buf[100];
int pos;public: Stack();
void push(const T& t);const T pop();
}T Stack::pop(){ // ??}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 23: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/23.jpg)
Implementationsrichtlinien 23
Unsichere Methode in C++
class Stack{private: T buf[100];
int pos;public: Stack();
void push(const T& t);const T pop();
}T Stack::pop(){
return buf[--pos];}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 24: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/24.jpg)
Implementationsrichtlinien 24
Unsichere Methode in C++
class Stack{}T Stack::pop(){
return buf[--pos];}
main(){Stack s;T t;s.push(t);t = s.pop();
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 25: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/25.jpg)
Implementationsrichtlinien 25
Unsichere Methode in C++
class Stack{}T Stack::pop(){
return buf[--pos];}
main(){Stack s;T t;s.push(t);t = s.pop(); // Problem bei Exception in Zuweisung!!!
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 26: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/26.jpg)
Implementationsrichtlinien 26
Single und Multiple Dispatching
• Aufruf von (virtuellen) Methoden in Java und C++ zur
Laufzeit nur vom Typ des Empfangerobjekts abhangig
• Manchmal Abhangigkeit von mehr Typen erwunscht
• Losung: Mehrfacher Methodenaufruf mit Auflosung eines
Objekts pro Aufruf+ Ubersichtlichkeit
+ Vermeidung expliziter Typanfragen und -konvertierungen
– Bei zusatzlichen Typen Veranderung der Oberklasse
– Hoherer Anfangsaufwand
◦ Aufwand bei Aufruf nicht hoher als fur switch/Konversion
T. Vierhuff: Design und Implementation 5. August 2004
![Page 27: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/27.jpg)
Implementationsrichtlinien 27
Single Dispatching in Java
abstract class AVM{abstract AVM unify(AVM);
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 28: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/28.jpg)
Implementationsrichtlinien 28
Single Dispatching in Java
abstract class AVM{abstract AVM unify(AVM);
}class Atom extends AVM{
String value;AVM unify(AVM that){
if(that instanceof Atom&& ((Atom)that).value.equals(this.value))return this;
return null;}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 29: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/29.jpg)
Implementationsrichtlinien 29
Single Dispatching in Java
abstract class AVM{abstract AVM unify(AVM);
}class AttrPair extends AVM{
String attribute;AVM value;AVM unify(AVM that){
if(that instanceof AttrPair&& ((AttrPair)that).attr.equals(attr))return value.unify(((AttrPair)that).value);
return null;}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 30: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/30.jpg)
Implementationsrichtlinien 30
Double Dispatching in Java
abstract class AVM{abstract AVM unify(AVM);AVM unify(Atom){ return null; }AVM unify(AttrPair){ return null; }AVM unify(List){ return null; }AVM unify(Coref){ return null; }
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 31: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/31.jpg)
Implementationsrichtlinien 31
Double Dispatching in Java
abstract class AVM{abstract AVM unify(AVM);AVM unify(Atom){ return null; }// ...
}class Atom extends AVM{
String value;AVM unify(AVM that){ return that.unify(this); }AVM unify(Atom that){
return value.equals(that.value) ? this : null;}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 32: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/32.jpg)
Implementationsrichtlinien 32
Double Dispatching in Java
abstract class AVM{abstract AVM unify(AVM);AVM unify(AttrPair){ return null; }// ...
}class AttrPair extends AVM{
String attribute;AVM value;AVM unify(AVM that){ return that.unify(this); }AVM unify(AttrPair that){
return attr.equals(that.attr) ?value.unify(that.value) : null;
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 33: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/33.jpg)
Entwurfsmuster
![Page 34: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/34.jpg)
Entwurfsmuster 34
Entwurfsmuster
• Grundlegende OOP-Designregeln:
◦ Dinge → Objekte
◦ Aktionen → Methoden
◦ Gemeinsamkeiten → Oberklassen
• In großeren Projekten außerdem wichtig: Interaktion zwischen
verschiedenen Klassen und Objekten
• Entwurfsmuster: Typische Ansatze der Modellierung
• Erzeugungsmuster, Strukturmuster, Verhaltensmuster
T. Vierhuff: Design und Implementation 5. August 2004
![Page 35: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/35.jpg)
Erzeugungsmuster
![Page 36: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/36.jpg)
Erzeugungsmuster 36
Prototypen (Exemplars)
• Objekterzeugung durch Objekt gleichen Typs
• In Java: Kopieren mit Object clone()
• In C++:”Copy-Konstruktor“ (durch statische Typisierung
eingeschrankt)
• Beispiel: Kopieren von Lexikoneintragen zur Weiterverarbeitung
T. Vierhuff: Design und Implementation 5. August 2004
![Page 37: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/37.jpg)
Erzeugungsmuster 37
Prototypen in Java
class Prototype implements Cloneable{public Object clone(){
Object klon;try{
klon = (Prototype) super.clone();}catch(CloneNotSupportedException e){
// kann eigentlich nicht passieren}// hier klassentypische Detailsreturn klon;
}}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 38: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/38.jpg)
Erzeugungsmuster 38
Singletons
• Klassen, von denen nur eine einzige Instanz existieren darf
• Beschrankter Zugang zur Konstruktion
• Beispiel: Eindeutige, zentrale Ressourcen, z. B. Datenbank
class Singleton{private static instance = new Singleton();private Singleton(){}public Singleton getInstance(){
return instance;}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 39: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/39.jpg)
Erzeugungsmuster 39
Singletons falsch in C++class Singleton{private:
static Singleton instance;Singleton();
public:static Singleton& getInstance();
};Singleton Singleton::instance;Singleton::Singleton(){}Singleton& Singleton::getInstance(){
return instance;}
Zeitpunkt der Initialisierung von instance undefiniert!
T. Vierhuff: Design und Implementation 5. August 2004
![Page 40: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/40.jpg)
Erzeugungsmuster 40
Singletons in C++
class Singleton{private:
Singleton();public:
static Singleton& getInstance();};Singleton::Singleton(){}Singleton& Singleton::getInstance(){
static Singleton instance;return instance;
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 41: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/41.jpg)
Erzeugungsmuster 41
Fabrikmethode (Virtueller Konstruktor)
• Erzeugung von Typen, die erst zur Laufzeit bekannt werden
• Erzeugte Objekte als Ruckgabewerte von Methoden
• Erzeugungsmethode entscheidet uber Wahl des
Konstruktors
• Beschrankter Zugang zur Konstruktion
• Ergebnistyp ist Oberklasse oder -interface des
tatsachlichen Typs
• Beispiel: Einlesen aus Dateien
T. Vierhuff: Design und Implementation 5. August 2004
![Page 42: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/42.jpg)
Erzeugungsmuster 42
Fabrikmethode in Java
TokenXXXXXX
������
Number Stringpublic class Token{
protected Token();Token next(PushbackReader r){
char c = s.read();unread(c);if(c>=’0’ && c<=’9’) return new Number(r);else return new Name(r);
}}public class Number extends Token{ ... }public class Name extends Token{ ... }
T. Vierhuff: Design und Implementation 5. August 2004
![Page 43: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/43.jpg)
Erzeugungsmuster 43
Fabrikklasse (Abstract Factory, Kit)
• Erzeugung von Objekten, deren Typ geheimgehalten wird
• Erzeugte Objekte als Ruckgabewerte von Methoden
• Sammlung von Erzeugungsmethoden in einem Objekt
• Beschrankter Zugang zur Konstruktion
• Ergebnistyp ist Oberklasse oder -interface des
tatsachlichen Typs
• Benutzercode ist unabhangig vom tatsachlichen Typ der
Objekte
• Beispiel: Hardwareabhangige Spezialisierungen
T. Vierhuff: Design und Implementation 5. August 2004
![Page 44: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/44.jpg)
Erzeugungsmuster 44
Fabrikklasse in Java
Objecthhhhhhhhhhhhhhhhhhhh
((((((((((((((((((((
Windowhhhhhhhhhh
((((((((((
LinuxWindow MacWindowButtonhhhhhhhhhh
((((((((((
LinuxButton MacButtonclass Factory{
public Window newWindow(){return new LinuxWindow();
}public Button newButton(){
return new LinuxButton();}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 45: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/45.jpg)
Erzeugungsmuster 45
Erbauer (Builder)
• Trennung von Reprasentation und Konstruktion
• Zur Kombination komplizierter Konstruktionsalgorithmen
mit unterschiedlichen Reprasentationen
• Konstruktionsalgorithmus wird mit erwunschtem
Reprasentations-Erbauer parametrisiert
• Beispiel: Compiler-Frontend mit unterschiedlichen
Backends; Gleiche Erzeugung des Syntaxbaums mit
variabler Codegenerierung
T. Vierhuff: Design und Implementation 5. August 2004
![Page 46: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/46.jpg)
Strukturmuster
![Page 47: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/47.jpg)
Strukturmuster 47
Brucke (Bridge, Handle/Body)
• Entkopplung von Abstraktion und Implementation
• Paar von Klassen fur Interaktion mit Benutzer und
systemabhangiges Verhalten
• Hilft, Neukompilierung zu vermeiden, wenn Schnittstelle
gleich bleibt
• Implizite Fabrikmethode
• Beispiel: Plattformabhangige Grafik (z. B.
java.awt.peer)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 48: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/48.jpg)
Strukturmuster 48
Brucke in Java
public class Handle{ // plattformunabhaengigprivate Body body = new Body();public void tuWas(){
body.tuWas();}
}
private class Body{ // plattformabhaengigpublic void tuWas(){
...}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 49: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/49.jpg)
Strukturmuster 49
Proxy (Surrogat)
• Verandert den Zugriff auf ein Objekt
• Als Reprasentation ferner oder teurer Ressourcen
• Erlaubt Lazy Evaluation, Zugriffsschutz
(Parallelverarbeitung, Firewall), Smart Pointer
• Keine veranderte Funktionalitat
T. Vierhuff: Design und Implementation 5. August 2004
![Page 50: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/50.jpg)
Strukturmuster 50
Proxy in Java
public class Proxy{private HugeStructure huge;public Object getDetail(){
if(huge==null) huge = new HugeStructure();return huge.getDetail();
}}private class HugeStructure{
Object[] contents = new Object[1000000]Object getDetail(){
return contents[0];}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 51: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/51.jpg)
Strukturmuster 51
Kompositum
• Verwandtschaftsbeziehung von Einzelobjekten und
Containerobjekten
• Gemeinsame abstrakte Oberklasse
• Operationen der Oberklasse
• Beispiel: Dateien und Verzeichnisse
T. Vierhuff: Design und Implementation 5. August 2004
![Page 52: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/52.jpg)
Strukturmuster 52
Kompositum in JavaAVMhhhhhhhhhh
((((((((((
Atom Pair Listpublic abstract class AVM{
abstract AVM unify(AVM that);}public class Atom extends AVM{
private final String value;AVM unify(AVM that){ ... }
}public class List extends AVM{
private final ArrayList avms;AVM unify(AVM that){ ... }
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 53: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/53.jpg)
Strukturmuster 53
Fliegengewicht (Flyweight)
• In großer Zahl gemeinsam benutzte Objekte mit wenigen
Eigenschaften
• Beschrankter Zugang zur Konstruktion
• Verhindert Speicherverschwendung
• Verwaltungsaufwand beim”Erzeugen“ bzw. Aufsuchen der
Objekte
• Interne Speicherung in Hashtabelle oder Suchbaum
• Beispiel: Atomare AVMs
T. Vierhuff: Design und Implementation 5. August 2004
![Page 54: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/54.jpg)
Strukturmuster 54
Fliegengewicht
public class Atom extends AVM{private final String value;private static final Hashtable atoms = new Hashtable();private Atom(String value){
this.value = value;}public Atom create(String value){
Atom neu = (Atom) atoms.get(value);if(neu==null)
atoms.put(value, neu = new Atom(value));return neu;
}}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 55: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/55.jpg)
Strukturmuster 55
Fassade
• Zentrale Schnittstellenklasse fur Packages
• Erleichtert die Handhabung umfangreicher
Utility-Sammlungen
• Verbirgt Implementationsdetails
• Vermindert Abhangigkeiten
• Ahnelt einer Brucke fur ganze Package
T. Vierhuff: Design und Implementation 5. August 2004
![Page 56: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/56.jpg)
Strukturmuster 56
Adapter (Wrapper)
• Anpassung der Schnittstellen vorhandener Klassen
• Keine eigene Funktionalitat, nur Weiterleitung
• Nutzlich bei Integration verschiedener Bibliotheken
• In C++ typischer Kandidat fur inline-Methoden
T. Vierhuff: Design und Implementation 5. August 2004
![Page 57: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/57.jpg)
Strukturmuster 57
Decorator
• Dynamische Erweiterung von Objekten zur Laufzeit
• Vorgeschaltete Objekte schalten Zusatze ein, um und aus
• Decorator-Klassen von dekorierten Klassen abgeleitet
• Beispiele: Graphische Anzeigen, Streamklassen (java.io)
T. Vierhuff: Design und Implementation 5. August 2004
![Page 58: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/58.jpg)
Verhaltensmuster
![Page 59: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/59.jpg)
Verhaltensmuster 59
Beobachter (Observer)
• Objekte, die vom Zustand anderer Objekte abhangen
• Anmeldung im beobachteten Objekt
• Automatische Nachrichten bei relevanten Veranderungen
• Abhangigkeiten werden automatisiert
• Sinnvoll in großen, verteilten Anwendungen
• Beispiel: Mehrere Darstellungen derselben Daten
T. Vierhuff: Design und Implementation 5. August 2004
![Page 60: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/60.jpg)
Verhaltensmuster 60
Observer in Java
public class Data extends java.util.Observable{public void commitChanges(){
setChanged();notifyObservers();
}}public class Viewer implements java.util.Observer{
public Viewer(Data data){data.addObserver(this);
}public void update(Observable o, Object arg){
System.out.println(o.toString());}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 61: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/61.jpg)
Verhaltensmuster 61
Iterator
• Durchlaufen aller Elemente eines Containers
• Trennt Zugriff von der Datenstruktur
• Erlaubt beliebig viele gleichzeitige Durchlaufe
• Einheitliche, containerunabhangige Schnittstelle
T. Vierhuff: Design und Implementation 5. August 2004
![Page 62: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/62.jpg)
Verhaltensmuster 62
Iterator in Java
public class Container{Object [] inhalt;public Iterator iterator(){
return new java.util.Iterator(){int wo;public boolean hasNext(){
return wo<inhalt.length;}public Object next(){
return inhalt[wo++];} };
}}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 63: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/63.jpg)
Verhaltensmuster 63
Benutzung von STL-Iteratoren in C++
#include<vector>#include<iostream>main(){
std::vector<int> v;for(int i=0; i<10; ++i)
v.push_back(i);std::vector<int>::iterator i=v.begin(), j=v.end();for(; i!=j; ++i)
std::cout<<*i<<" ";std::cout<<std::endl;
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 64: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/64.jpg)
Verhaltensmuster 64
STL-ahnlicher Iterator (unvollstandig!)class container{private: int inhalt[10];public: class iterator{
private: int *wo;public: iterator(int *w){ wo = w; }
int &operator*(){ return *wo; }void operator++(){ ++wo; }iterator operator++(int){
return iterator(wo++);}
};iterator begin(){ return iterator(inhalt); }iterator end(){ return iterator(inhalt+10); }
T. Vierhuff: Design und Implementation 5. August 2004
![Page 65: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/65.jpg)
Verhaltensmuster 65
Vermittler (Mediator)
• Zentralisierte Kommunikation zwischen großer Anzahl
verschiedener Objekte
• Einheitliches Protokoll
• Mehrfache Abhangigkeiten vereinfacht auf mehrere
Einzel-Beziehungen
• Beispiel: Zentrale Steuerung der Kaffemaschine
T. Vierhuff: Design und Implementation 5. August 2004
![Page 66: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/66.jpg)
Verhaltensmuster 66
Schablone (Template Method)
• Algorithmus mit Spezialisierung durch Untermethoden
• Oberklasse definiert Rahmenhandlung mit abstrakten
Lucken
• Unterklasse fullen abstrakte Lucken durch Uberschreiben
• Typischerweise verwandte Probleme mit gleichem
Verwaltungsaufwand
T. Vierhuff: Design und Implementation 5. August 2004
![Page 67: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/67.jpg)
Verhaltensmuster 67
Schablone in Java
abstract class Find{int[] array;int find(){
for(int i=0; i<array.length; ++i)if(pred(array[i])) return array[i];
return 0;}abstract boolean pred(int);
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 68: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/68.jpg)
Verhaltensmuster 68
Schablone in Java
abstract class Find{int[] array;int find(){
for(int i=0; i<array.length; ++i)if(pred(array[i])) return array[i];
return 0;}abstract boolean pred(int);
}class FindFive extends Find{
boolean pred(int i){ return i==5; }}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 69: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/69.jpg)
Verhaltensmuster 69
Schablone in Java
abstract class Find{int[] array;int find(){
for(int i=0; i<array.length; ++i)if(pred(array[i])) return array[i];
return 0;}abstract boolean pred(int);
}class FindEven extends Find{
boolean pred(int i){ return i%2==0; }}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 70: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/70.jpg)
Verhaltensmuster 70
Strategie (Policy)
• Familie von Algorithmen mit gleicher Schnittstelle
• Algorithmusobjekte als Parameter anderer Algorithmen
verwendbar
• Algorithmen je nach Bedarf einfach austauschbar
• Nur fur variierendes Verhalten bei gleicher Verwendung
• Beispiel: Zeilenumbruchstrategien, Registerbelegung in
Compilern
T. Vierhuff: Design und Implementation 5. August 2004
![Page 71: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/71.jpg)
Verhaltensmuster 71
Zustand (State)
• Eigenschaften eines Objekts als eigenes Subobjekt
• Zustand als Ganzes austauschbar und wiederherstellbar
• Beispiel: Dialogzustande, Adaption an bestimmte Benutzer
T. Vierhuff: Design und Implementation 5. August 2004
![Page 72: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/72.jpg)
Verhaltensmuster 72
Zustand in Java
class UserModel{String name;Drink favourite;
}class DialogueState{
UserModel um;changeUser(UserModel um){
this.um = um;}
}
T. Vierhuff: Design und Implementation 5. August 2004
![Page 73: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/73.jpg)
Verhaltensmuster 73
Befehl (Command, Action)
• Reprasentation von Benutzerinteraktionen als Objekte
• Weitergabe von Befehlsobjekten zwischen Programmteilen
• Abspeichern von Befehlsobjekten in Datenstrukturen
• Implementation von Undo/Redo
• Protokollieren von Anderungen
T. Vierhuff: Design und Implementation 5. August 2004
![Page 74: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/74.jpg)
Literatur 74
Literatur
• Entwurfsmuster. Elemente wiederverwendbarerobjektorientierter Software von Erich Gamma, Richard
Helm, Ralph Johnson, John Vlissides.
Auch auf englisch erhaltlich. Obwohl ich sonst eher zur englischen
Originalliteratur rate, ist in diesem Fall die deutsche Ubersetzung
empfehlenswert, weil sie nicht nur gut gemacht wurde, sondern
sowohl die englischen Originalbegriffe als auch ihre deutschen
Pendants enthalt
T. Vierhuff: Design und Implementation 5. August 2004
![Page 75: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/75.jpg)
Literatur 75
Literatur
• Fur die, die in C++ programmieren:
Effektiv C++ programmieren und Mehr effektiv C++programmieren von Scott Meyers.
Dringend anzuratende Richtlinien zu gutem Programmierstil in
C++, darunter wirkliche Notwendigkeiten, potentielle
Fehlerquellen, Tips zu Effizienz und Eleganz, alles sehr gut und
ausfuhrlich erklart
T. Vierhuff: Design und Implementation 5. August 2004
![Page 76: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/76.jpg)
Literatur 76
Literatur
• Falls jemand von euch glaubt, sich mit C++ auszukennen:
Exceptional C++: 47 Engineering Puzzles,Programming Problems, and Solutions von Herb
Sutter.
Inzwischen auch auf deutsch ubersetzt, die Ubersetzung kenne ich
aber nicht. Knobelaufgaben mit ausfuhrlich beschriebenen
Losungen, die praktisch jedem beweisen, dass C++ weit weniger
trivial ist als die meisten denken. Wer es durchgearbeitet hat, kann
sich auch am Folgeband versuchen.
T. Vierhuff: Design und Implementation 5. August 2004
![Page 77: Tilman Vierhuff - Uni Bremen || Startseite · Implementationsrichtlinien 6 Vererbung • Vererbung in Java bedeutet ist ein • Negativbeispiele: Vector und Stack • Anwendung f¨ur](https://reader030.vdocuments.pub/reader030/viewer/2022040707/5e08a77f65c9c838ac2a668f/html5/thumbnails/77.jpg)
Viel Erfolg!