22
Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne Jucknath- John SS 05 29.07.05 Gehalten von Asif Khan

Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Embed Size (px)

Citation preview

Page 1: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 1SWT Seminar SS 05 – Pattern Creation

Pattern Creation

Seminar Softwaretechnik

Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne Jucknath-John

SS 05

29.07.05

Gehalten von Asif Khan

Page 2: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 2SWT Seminar SS 05 – Pattern Creation

Gliederung

● Was ist ein Pattern? - Kurze Einführung● Was ist “Pattern Creation”?● Einführendes Beispiel ● Was ist überhaupt eine Factory? ● Creation Methods und Factory Methods● Abstract and Concrete Factory● Extract Factory, Static Factory Method● Visualisierung ● Fazit und Literatur

Page 3: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 3SWT Seminar SS 05 – Pattern Creation

Einführung

● Ein Entwurfsmuster (engl. design pattern) beschreibt eine Lösung für ein Entwurfsproblem und stellt eine wiederverwendbare Vorlage zur Problemlösung dar.

● Entstanden ist der Ausdruck in der Architektur.

● In den letzten Jahren hat der Ansatz der Entwurfsmuster auch zunehmendes Interesse im Bereich der Mensch-Computer-Interaktion gefunden.

● In den 1970er Jahren hatte Christopher Alexander eine Sammlung von Entwurfsmuster zusammengestellt.

Page 4: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 4SWT Seminar SS 05 – Pattern Creation

Was ist ein Pattern (Muster)

● Pattern bestehen aus drei Teilen– Problem– Lösung– Kontext

● Patterns sind Lösungen zu Problemen in einer Kontext(z.B. Objekt Erzeugung in Java)

● Ein Problem ist das Wichtigste Teil eines Patterns

● Pattern-Sprachen sind Sammlungen von Patterns zu einem gemeinsamen Thema

Page 5: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 5SWT Seminar SS 05 – Pattern Creation

Refactoring to Patterns

● Gemeinsame Ziele– Lesbarkeit– Wartbarkeit

● Lösungsvorschläge– Einsatz von Pattern anstelle normalen

Refactorings– Beispiel: Simplification

● OO-Refactoring– Beispiel: Refactoring der Konstruktoren

Page 6: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 6SWT Seminar SS 05 – Pattern Creation

Pattern Creation

● Multiple Konstruktoren in einer Klasse machen es schwer den richtigen Konstruktor aufzurufen.

● Extract Class - wird benutzt, um die Anzahl der Konstruktoren durch Refactoring zu reduzieren.

● Creation Method – ist entweder eine statische oder eine nicht statische Methode, die ein Objekt erzeugt.

Page 7: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 7SWT Seminar SS 05 – Pattern Creation

Bsp. Creation Method

Loan+ Loan(commitment, riskRating, maturity)+ Loan(commitment, riskRating, maturity, expiry)+ Loan(commitment, outstanding, riskRating, maturity, expiry)+ Loan(capitalStrategy, commitment, riskRating, maturity, expiry)+ Loan(capitalStrategy, commitment, outstanding, riskRating, maturity, expiry)

Loan- Loan(capitalStrategy, commitment, outstanding, riskRating, maturity, expiry)+ createTermLoan(commitment, riskRating, maturity) : Loan+ createTermLoan(capitalStrategy, commitment, outstanding, riskRating, maturity) : Loan+ createRevolver(commitment, outstanding, riskRating, maturity, expiry)+ Loan(capitalStrategy, commitment, riskRating, maturity, expiry)+ Loan(capitalStrategy, commitment, outstanding, riskRating, maturity, expiry)

Page 8: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 8SWT Seminar SS 05 – Pattern Creation

Konstruktor

● Jeder Konstruktor sollte sicherstellen, daß das Objekt vollständig und sinnvoll initialisert ist

● Andersfalls, wirft er eine Exception

● Problem: Viele Klassen verlassen sich darauf, dass die Felder ihrer Instanzen bestimmte Bedingungen genügen Bsp. Lesen einer Datei, wenn es nicht existiert

Page 9: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 9SWT Seminar SS 05 – Pattern Creation

Bsp.: LizenzManager Klasse// unsichere Implementierung: Erzeugung und Initialisierung sind getrennt

public class LizenzManager {

private Date gueltigBis;private String typ;

// Default-Konstruktor wird vom Compiler generiert, und neue// Instanzen werden nicht initialisiert

public boolean istLizenzGueltig () {return gueltigBis.after (new Date ());

}

public String getNachricht () {return "Lizenz " + typ +" gültig bis " + gueltigBis;

}

public void readLizenzDatei (String dateiname) throws IOException{

... // Code zum Einlesen der Lizenzdatei

}}

Page 10: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 10SWT Seminar SS 05 – Pattern Creation

LizenzManager (2)

LizenzManager mgr = new LizenzManager (); try {mgr.readLizenzDatei ("license.dat");}catch (IOException exc) {...}

● Was passiert, wenn beim Lesen der Datei eine Exception auftaucht, so dass das mgr Objekt nur halb initialisiert ist?

● Lösung: Stelle sicher, dass jeder Konstruktor der Klasse das Objekt vollständig initialisiert und andernfalls eine Exception wirft.

Page 11: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 11SWT Seminar SS 05 – Pattern Creation

Erweiterte LizenzManager Klasse// sichere Implementierung: Konstruktor stellt die Initialisierung sicher

public class LizenzManager {private Date _gueltigBis;private String _typ;

// Initialisierender Konstruktor, weil kein Default-Konstruktor erzeugt wird, ist dies der einzige Konstruktor, und // das Objekt wird initialisiert

public LizenzManager (String typ, Date gueltigBis){

_typ = typ;_gueltigBis = gueltigBis;

}

public boolean istLizenzGueltig () {return _gueltigBis.after (new Date ());

}

public String getNachricht () {return "Lizenz " + _typ +" gültig bis " + _gueltigBis;

}

public void readLizenzDatei (String dateiname) throws IOException{

... // Code zum Einlesen der Lizenzdatei}

}

Page 12: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 12SWT Seminar SS 05 – Pattern Creation

Creation Method

● Je mehr Konstruktoren, desto höher ist die Wahrscheinlichkeit den falschen Konstruktor aufzurufen.

● Zusammen mit nicht aufgerufenen Konstruktoren scheint der Code komplizierter zu sein (aus Sicht eines Entwicklers)

● Die “Creation Method” löst solche Probleme● Konstrucktoren können explizit benannt werden

– createTermLoan(......) // Konstruktor von Loan– createRevolver(.....) // Konstruktor von Loan

Page 13: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 13SWT Seminar SS 05 – Pattern Creation

Creation Methods und Factory Methods

● Creation Method – eine statische oder nicht statische Methode, die Objeke einer Klasse erzeugt

● Factory Method – ist eine nicht statische Methode in einer Basis Klasse (Base class) und wird für polymporph creation verwendet

● Alle Factory Methoden sind auch Creation Methoden aber nicht alle Creation Methoden sind auch Factory Methoden

Page 14: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 14SWT Seminar SS 05 – Pattern Creation

Factory : Abstract and Concrete<< interface>>

NodeFactory

createStringNode(...) : StringNode

StandardNodeFactory

createStringNode(...) : StringNode

DecodingNodeFactory

createStringNode(...) : StringNode

return new StringNode(...); return new DecodingStringNode(new StringNode(...));

AbstractFactory

Page 15: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 15SWT Seminar SS 05 – Pattern Creation

Extract Factory

● Eine Klasse mit mehreren Creation Methoden kann die Klasse schnell von seiner Hauptaufgaben ablenken.

● Eine mögliche Refactoring sieht so aus:Loans

Loan

#Loan(...)+newAdvisor(...)+newRCTL(...)+newTermLoan(...)+newVariable(...)+newRevolver(...)

+calcCapital(...)+calcIncome(...)+calcROC(...)+setOutstanding(...)

Loans

LoanFactoryLoan

#Loan(...)+calcCapital(...)+calcIncome(...)+calcROC(...)+setOutstanding(...)

+newAdvisor(...)+newRCTL(...)+newTermLoan(...)+newVariable(...)+newRevolver(...)

Page 16: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 16SWT Seminar SS 05 – Pattern Creation

Static Factory Method

● Oft bieten statische create – Methoden eine bessere Kapselung der Erzeugung von Instanzen als die Konstruktoren

● Problem: Um neue Objekte zu erzeugen, benutzt man das Schlüsselwort “new”. Im folgenden Beispiel wird verschiedene Arten von Personen erzeugt.

Person boss = new Manager ("Bill Gates");

Person mitarbeiter = new Mitarbeiter ("John Smith")

● Es gibt eine Vererbungshierarchie. Manager und Mitarbeiter Klassen sind aus der Klasse Person vererbt

● Das ist aus Perspektive des Creation Interface keine gute Lösung -> mangelnde Übersichtlichkeit

Page 17: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 17SWT Seminar SS 05 – Pattern Creation

Static Factory Method ...

● Lösung: Füge statische create- Methode ein. Die Namen der Methoden können so ausgewählt werden, dass sie den Quellcode zusätzlich Dokumentieren

● Der code, der Objekte erzeugt, kann sich nur auf die Absicht konzentrieren

public class Person {...

public static Person createManager (String name) {

return new Manager (name);}

Page 18: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 18SWT Seminar SS 05 – Pattern Creation

Static Factory Method ...

public static Person createMitarbeiter (String name) {

return new Mitarbeiter (name);}...

}

● Der code sieht jetzt etwas anders aus ....

Person boss = Person.createManager("Bill Gates");

Person mitarbeiter = Person.createMitarbeiter("John Smith");

Page 19: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 19SWT Seminar SS 05 – Pattern Creation

Visualisierung und Creation Pattern

● Bei wenigen Klassen:– UML Klassenmodell (mit Methoden)

● Bei grossen Systemen:– Klassenmodell allgemein als Graph– Knotengröße abhängig von der Anzahl der

Methoden oder der Konstruktoren

Page 20: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 20SWT Seminar SS 05 – Pattern Creation

Visualisierung – Java API

Quelle: swt.cs.tu-berlin.de/lehre/vsp/ss04

Page 21: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 21SWT Seminar SS 05 – Pattern Creation

Fazit

● Patterns sind Lösungen zu Problemen in einer Kontext

● Refactoring spielt eine wichtige Rolle in Softwareentwicklung

● Gemeinsame Ziele sind Wartbarkeit und Lesbarkeit● Eine “Creation Method” ist eine statische / nicht

statische Methode, die Objekte einer Klasse erzeugt

● Factory Methoden sind nicht statische Methoden und werden für polymorph creation verwendet

Page 22: Asif Khan 1 SWT Seminar SS 05 – Pattern Creation Pattern Creation Seminar Softwaretechnik Veranstalter : Prof. Dr.-Ing. Stefan Jähnchen Dipl.-Inform. Susanne

Asif Khan 22SWT Seminar SS 05 – Pattern Creation

Links und Literatur

● Refactoring To Patterns: Joshua Kerievsky , Addison-Wesley, ISBN 0321213351

● Refactoring Home Page, http://www.refactoring.com

● Eine Pattern Sprache zur Erzeugung von Objekten, Arno Haase Consulting, http://www.haase-consullting .com/veroeffentlichungen/ObjekteErzeugen.pdf