34
Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1 Heiko Behrens Ausgewählte Entwurfsmuster Vergleich der Implementierung in Smalltalk, Java und ObjectPascal

Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Embed Size (px)

Citation preview

Page 1: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Ausgewählte Entwurfsmuster

Vergleich der Implementierung inSmalltalk, Java und ObjectPascal

Page 2: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Bekannte Entwurfsmuster

• Singleton• Beobachter• Zustand• Fassade• Abstrakte Fabrik

Page 3: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Muster (Allgemein)

„Vorlage, Modell; Vorbild, Vollkommenes in seiner Art; [..] einzelnes Stück zur Ansicht, zur Auswahl [..]“Wahrig Deutsches Wörterbuch

„Jedes Muster beschreibt ein in unserer Umwelt beständig wiederkehrendes Problem und erläutert den Kern der Lösung für dieses Problem, so dass Sie diese Lösung beliebig oft anwenden können, ohne sie jemals ein zweites Mal gleich auszuführen.“Christopher Alexander

Page 4: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Struktur

• Entwurfsmuster• Singleton

– Allgmeine Darstellung– Implementierungsaspekte in Java,

ObjectPascal und Smalltalk

• Vermittler– Allgemeine Darstellung– Implementierungsaspekte in Java,

Smalltalk und ObjectPascal

Page 5: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Quellen

E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns, Addison-Wesley, 1994

M. Fowler. Analysis Patterns, Reusable Object Models, Addison-Wesley, 2000

A. Bien, J2EE Patterns, Entwurfsmuster für die J2EE, Addison-Wesley, 2002

Hillside Group, http://hillside.netGoogle, search?q=design+patterns

Page 6: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Entwurfsmuster (nach GoF)

• Mustername• Problemabschnitt• Lösungsabschnitt• Konsequenzenabschnitt

Kein Muster jedochADTs (einfach) oder Architekturen (komplex)Zusammensetzung anderer Muster (zB MVC)

Page 7: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Dargestellte Entwurfsmuster

Page 8: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton

• Sichert ab, dass eine Klasse genau ein Exemplar besitzt

• Stellt globalen Zugriffspunkt darauf bereit

Verwendung• Druckerspooler, Dateisystem, Logging,

Datenbank, etc.

Page 9: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Struktur)

attributeseinzigesExemplarsingletonDaten

operationsexemplargibSingletonDatensingletonOperation

Singleton

initialisiere ggf einiziges Exemplarreturn einzigesExemplar

Page 10: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Konsequenzen)

• Zugriffskontrolle auf das Exemplar• Verfeinerung von Funktionalität• Variable Anzahl von Exemplaren• Flexibler als Klassenmethoden

Page 11: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Java)

• Garantie des einzigen Exemplars durch Klassenvariable

• Privater Konstruktor verhindert Exemplarbildung durch Klienten

• Lazy-Initialization ermöglicht Konfiguration

Page 12: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Java Implementierung)

public class Singleton { private static Singleton einzigesExemplar; private Singleton(){ // nicht sichtbar für Klienten

} public static Singleton exemplar(){ // ggf einziges Exemplar erzeugen

if(einzigesExemplar==null) einzigesExemplar = new Singleton();

return einzigesExemplar; }}

Page 13: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Java Klient)

public class SingletonTest {

public static void main(String[] args) { // s1 = new Singleton() nicht möglich

// erzeugung des einzigen Objekts

Singleton s1 = Singleton.exemplar();

// bereits erzeugtes Objekt zurückgeben

Singleton s2 = Singleton.exemplar();

// es gilt: s1.equals(s2) && (s1==s2)

}}

Page 14: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Exkurs: Objekte in ObjectPascal

• Typenstrenge Überprüfung zur Übersetzungvar meinExemplar: TMeineKlasse;begin meinExemplar := TMeinNachfahre.Create;

• Speicherverantwortlichkeit beim EntwicklerObjekterzeugung;try Objektverwendung;finally Objektfreigabe;end;

Page 15: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (ObjectPascal)

• Verwaltung des einzigen Exemplars durch globale Variable

• Referenzzählung notwendig

Achtung:• Privater Konstruktor kann Exemplarbildung

vom Klienten nicht verhindern• Freigabe durch Klienten möglich

Page 16: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (ObjectPascal Impl.)

interface

type TSingleton = class private constructor Create; public class function Exemplar: TSingleton; procedure GibFrei; end;

implementation

constructor TSingleton.Create;begin // nicht sichtbar für Klienten // (verwendet TObject.Create)end;

var FSingleton: TSingleton; FSingletonReferenzen: Integer;

class function TSingleton.Exemplar: TSingleton;

begin if not Assigned(FSingleton) then FSingleton := TSingleton.Create;

Inc(FSingletonReferenzen); Result := FSingleton;end;

procedure TSingleton.GibFrei;begin Dec(FSingletonReferenzen); if FSingletonReferenzen<=0 then FreeAndNil(FSingleton);end;

Page 17: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (ObjectPascal Klient)var s1, s2: TSingleton;begin // s1 := TSingleton.Create möglich aber fehlerhaft

// erzeugung des einzigen Objekts s1 := TSingleton.Exemplar; try // bereits erzeugtes Objekt zurückgeben s2 := TSingleton.Exemplar; try // es gilt: s1=s2 finally // s2.Free möglich aber fehlerhaft s2.GibFrei; end; finally s1.GibFrei; end;end.

Page 18: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (ObjectPascal Erweitert)

Besseres Design möglich• Transparente Referenzzählung über NewInstance und FreeInstance

• Ressourcenverwaltung durch implizite Referenzzählung

• Zuweisbare lokale Konstante statt globaler Variablen

Page 19: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Exkurs: Objekte in Smalltalk

• Erzeugung durch Nachricht an KlassemeinObjekt := MeineKlasse new.meineMenge := ArrayedCollection with: 5 with: 6. meinString := String readFrom: aStream.

• Objekt durch speziellen KonstruktormeineMenge := #(1, 2, 3). meinString := 'multiply 6 by 9'.

• Erzeugung durch Nachricht an ObjektmeinPunkt := 23 @ 137. meineSumme := 6 * 9.

Page 20: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Smalltalk)

• Garantie des einzigen Exemplars durch Klassenvariable

• Erzeugung über new verursacht Fehler und verhindert Erzeugung weitere Exemplare

• Vorkonfiguration des Exemplars im Image möglich

Page 21: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Smalltalk Implementierung)

Smalltalk.Examples defineClass: #Singleton superclass: #{Core.Object} indexedType: #none private: false instanceVariableNames: '' classInstanceVariableNames: 'einzigesExemplar ' imports: '' category: 'Examples'

Klassenmethoden für „instance creation“new self error: 'Zur Erzeugung Nachricht exemplar an Klasse schicken‚

exemplar einzigesExemplar isNil ifTrue:[einzigesExemplar := super new]. ^einzigesExemplar

Page 22: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Singleton (Smalltalk Erweiterung)

Sogar transparente Erzeugung denkbar:new einzigesExemplar isNil ifTrue:[einzigesExemplar := super new]. ^einzigesExemplar

Aber: potenzielle Fehlerquelle:| left right |left := SingleWindow new.Right := SingleWindow new.left position: (100 @ 100).right position: (500 @ 100).

Page 23: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler

• Definiert Objekt, das Zusammenspiel von Objekten kapselt

• Fördert lose Kopplung, durch Vermeidung gegenseitiger Bezugnahme von Objekten

• Ermöglicht Zusammenspiel von Objekten zu variieren, ohne Objekte selbst zu verändern

Häufig eingesetzt in Dialogsystemen

Page 24: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

operationserzeugeWidgetswidgetGeaendert(..)zeigeDialog

DialogDirektor

operationsgeaendert

Widget

direktor.w idgetGeaendert(this)

operationsGibAusw ahl

ListBox

operationsSetzeText

EingabeFeldoperations

erzeugeWidgetsw idgetGeaendert(..)

ZeichensatzDialogDirektor

direktor

Vermittler (Struktur)

Page 25: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Ablauf)

: Klient : ZeichensatzDialogDirektor : ListBox : EingabeFeld

zeigeDialog

w idgetGeaendert

gibAusw ahl

setzeText

Page 26: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Konsequenzen)

• Schränkt Unterklassenbildung ein• Entkoppelt Kollegenobjekte• Vereinfacht Protokoll der Objekte • Abstrahiert von Art der Zusammenarbeit

• Zentralisiert Steuerung

Page 27: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Java)

• Ereignisorientiert• Widgets unterstützen Beaobachtermuster• Interfaces für Verbund verantwortlich genau eine Methode in Klasse pro Rolle

• Zusätzliche Informationen beim Widget hinterlegbar, um Sender zu identifizieren

Page 28: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Java Beispielstruktur)

attributesabbrechenButtonokButton

operationsinitialisiereWidgetsverw endeDatenverw erfeDaten

VermittlerVorlage

«interface»ActionListener

operationsinitialisiereWidgetsActionPerformed

VermittlerUnterschieden

operationsinitialisiereWidgets

VermittlerDelegiert

Page 29: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Java Fallunterscheidung)

public class VermittlerUnterschieden extends VermittlerVorlage implements ActionListener{

protected void initialisiereWidgets() { okButton.addActionListener(this); abbrechenButton.addActionListener(this); }

public void actionPerformed(ActionEvent arg0) { if(arg0.getSource()==okButton) verwendeDaten(); else if (arg0.getSource()==abbrechenButton) verwerfeDaten(); }}

Page 30: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Java Delegation)

public class VermittlerDelegiert extends VermittlerVorlage{

protected void initialisiereWidgets() { okButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ verwendeDaten(); } });

abbrechenButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { verwerfeDaten(); } }); }}

Page 31: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Smalltalk)

• Nachrichten(-Sendungen) sind Objekte• Selektion über Symbol bei Nachricht

perform: aSelector with: anArgument• Registratur in ActionList über Tripel

when: anEvent send: aSelector to: anObject• Versand von MessageSend im Ereignisfall

triggerEvent: anEvent

Alternative: Funktions Closures

Page 32: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (Smalltalk Beispiel)

Smalltalk/Vself addSubPane: (ListPane new

paneName: 'meineListPane'; owner: self; when: #select send: #listSelect: to: self).Smalltalk/X

| meinView |meinView := StandardSystemView new.

Button label: 'OK' action: [self verwendeDaten] in: meinView.Button label: 'Abbrechen' action: [self verwerfeDaten] in: meinView.

Page 33: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (ObjectPascal)

• Vermittler als Standard zur Dialoggestaltung• Referenz auf Methode eigener Datentyp

TNotifyEvent = procedure(Sender: TObject) of object;• Verwendung ale normale Variable

var meinEvent, anderesEvent: TNotifyEvent; begin // notwendig: TDieseKlasse.ButtonClick(Sender: TObject); meinEvent := Self.ButtonClick; anderesEvent := meinEvent;

// entspricht Self.ButtonClick(AButton); anderesEvent(AButton);

Page 34: Vergleich der Implementierung in Smalltalk, Java und ...heikobehrens.net/wp-content/uploads/2008/07/praesentation_ausgewaehlte... · Ausgewählte Entwurfsmuster - Vergleich der Implementierung

Ausgewählte Entwurfsmuster - Vergleich der Implementierung in Smalltalk, Java und ObjectPascal 1Heiko Behrens

Vermittler (ObjectPascal Beispiel)

beginwith TButton.Create(Self) dobegin Caption := 'OK'; Parent := Self; OnClick := VerwendeDaten;end;

with TButton.Create(Self) dobegin Caption := 'Abbrechen'; Parent := Self; OnClick := VerwerfeDaten;end;