32
Harald Köbler [email protected] Software Design Patterns Prototype

Harald Köbler [email protected] Software Design Patterns Prototype

Embed Size (px)

Citation preview

Page 1: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Software Design Patterns

Prototype

Page 2: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Aufgabe: Erzeugungsmuster (Creational Pattern)

Gültigkeitsbereich: objektbasierend

Page 3: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Zweck:

Bestimme die Arten zu erzeugender Objekte durch die Verwendung eines prototypischen Exemplars und erzeuge neue Objekte durch Kopieren dieses Prototypen.

Page 4: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Motivation:

• Das Erzeugen einer Instanz einer Klasse ist sehr zeitraubend oder komplex.

• Es werden Kopien der original Instanz erzeugt und abgeändert.

Page 5: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Anwendbarkeit:

• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden

Page 6: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Anwendbarkeit:

• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden

• Klassen werden erst zur Laufzeit spezifiziert

Page 7: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Anwendbarkeit:

• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden

• Klassen werden erst zur Laufzeit spezifiziert

• parallele Klassenhierarchien vermeiden

Page 8: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Anwendbarkeit:

• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden

• Klassen werden erst zur Laufzeit spezifiziert

• parallele Klassenhierarchien vermeiden

• Exemplare einer Klasse haben nur wenige Zustandskombinationen

Page 9: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Struktur:

Page 10: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

Page 11: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten

Page 12: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten

• Hinzufügen und entfernen von Produkten zur Laufzeit

Page 13: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten

• Hinzufügen und entfernen von Produkten zur Laufzeit

• Spezifikation neuer Objekte durch Variation von Werten

Page 14: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten

• Hinzufügen und entfernen von Produkten zur Laufzeit

• Spezifikation neuer Objekte durch Variation von Werten

• Spezifikation neuer Objekte durch Variation der Struktur

Page 15: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten

• Hinzufügen und entfernen von Produkten zur Laufzeit

• Spezifikation neuer Objekte durch Variation von Werten

• Spezifikation neuer Objekte durch Variation der Struktur

• Verringerte Unterklassenbildung

Page 16: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Konsequenzen:

• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)

• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten

• Hinzufügen und entfernen von Produkten zur Laufzeit

• Spezifikation neuer Objekte durch Variation von Werten

• Spezifikation neuer Objekte durch Variation der Struktur

• Verringerte Unterklassenbildung

Wichtig: jede Unterklasse von Prototype muss die Operation „Clone()“ implementieren

Page 17: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Implementierung:

• statisch typisierten Programmiersprachen wie C++

Page 18: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Implementierung:

• statisch typisierten Programmiersprachen wie C++

• Verwendung von Prototypenverwalter

Page 19: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Implementierung:

• statisch typisierten Programmiersprachen wie C++

• Verwendung von Prototypenverwalter

• Implementierung der Clone()-Operation

„shallow copy“ – „deep copy“

Page 20: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Implementierung:

• statisch typisierten Programmiersprachen wie C++

• Verwendung von Prototypenverwalter

• Implementierung der Clone()-Operation

„shallow copy“ – „deep copy“

• Initialisierung geklonter Objekte

Page 21: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:

class Swimmer

{

String name;

int age;

String club;

float time;

boolean female;

}

Page 22: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:public class SwimData implements Cloneable

{

Vector swimmers;

public SwimData(String filename)

{

String s = "";

swimmers = new Vector();

//open data file

InputFile f = new InputFile(filename);

s= f.readLine(); //read in and parse each line

while(s != null)

{

swimmers.addElement(new Swimmer(s));

s= f.readLine();

}

f.close();

}

Page 23: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:

Liste in GUI anzeigen:

swList.removeAll(); //clear list

for (int i = 0; i < sdata.size(); i++)

{

sw = sdata.getSwimmer(i);

swList.addItem(sw.getName()+" "+sw.getTime());

}

Page 24: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:

Liste in GUI anzeigen:

swList.removeAll(); //clear list

for (int i = 0; i < sdata.size(); i++)

{

sw = sdata.getSwimmer(i);

swList.addItem(sw.getName()+" "+sw.getTime());

}

sxdata = (SwimData)sdata.clone();

sxdata.sortByTime(); // re-sort

cloneList.removeAll(); // clear list

Page 25: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:

Geklonte Liste in GUI anzeigen:

 for(int i = 0; i< sxdata.size(); i++)

{

sw = sxdata.getSwimmer(i);

cloneList.addItem(sw.getName()+” “+sw.getTime());

}

Page 26: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:

Nach „Clone“

Page 27: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Beispielcode:

Nach „Refresh“:

Page 28: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Verwandte Muster:

• Abstrakte Fabrikmuster (Abstract Factory)

• Kompitions- und Dekorierermuster

(Composite, Decorator)

Page 29: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Prototype im nicht-Computerbereich:

Page 30: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Page 31: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Literaturquellen:

• „Design Patterns“, AW-Verlag Gamma, Helm, Johnson, Vlissides

• „Entwurfsmuster“, AW-Verlag Übersetzt Dirk Riehle

• „The Design Patterns – Java Companion“ AW-Verlag, James W. Cooper

Page 32: Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype

Harald Köbler

[email protected]

Internetquellen:

• http://www.fh-wedel.de/~si/seminare/ws97/Ausarbeitung/2.Winter/gamma10.htm

• http://home.earthlink.net/~huston2/dp/prototype.html

• www2.informatik.uni-erlangen.de/Lehre/SS01/XML/Docs/Erzeugungsmuster.pdf

Catalog of Non-Software Examples of Design Patterns:

• http://www.agcs.com/supportv2/techpapers/patterns/papers/tutnotes/