Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Seminar Softwaretechnik Dipl.-Inform. Susanne Jucknath-John

Ähnliche Präsentationen


Präsentation zum Thema: "Seminar Softwaretechnik Dipl.-Inform. Susanne Jucknath-John"—  Präsentation transkript:

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

2 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

3 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.

4 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

5 Refactoring to Patterns
Gemeinsame Ziele Lesbarkeit Wartbarkeit Lösungsvorschläge Einsatz von Pattern anstelle normalen Refactorings Beispiel: Simplification OO-Refactoring Beispiel: Refactoring der Konstruktoren

6 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.

7 Bsp. Creation Method Loan 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)

8 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

9 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

10 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.

11 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

12 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

13 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

14 Factory : Abstract and Concrete
<< interface>> NodeFactory createStringNode(...) : StringNode StandardNodeFactory DecodingNodeFactory createStringNode(...) : StringNode createStringNode(...) : StringNode return new StringNode(...); return new DecodingStringNode(new StringNode(...));

15 Extract Factory Eine Klasse mit mehreren Creation Methoden kann die Klasse schnell von seiner Hauptaufgaben ablenken. Eine mögliche Refactoring sieht so aus: Loans Loans Loan Loan LoanFactory #Loan(...) +newAdvisor(...) +newRCTL(...) +newTermLoan(...) +newVariable(...) +newRevolver(...) +calcCapital(...) +calcIncome(...) +calcROC(...) +setOutstanding(...) #Loan(...) +calcCapital(...) +calcIncome(...) +calcROC(...) +setOutstanding(...) +newAdvisor(...) +newRCTL(...) +newTermLoan(...) +newVariable(...) +newRevolver(...)

16 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

17 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); }

18 Static Factory Method ... Der code sieht jetzt etwas anders aus ....
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");

19 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

20 Visualisierung – Java API
Quelle: swt.cs.tu-berlin.de/lehre/vsp/ss04

21 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

22 Links und Literatur Refactoring To Patterns: Joshua Kerievsky , Addison-Wesley, ISBN Refactoring Home Page, Eine Pattern Sprache zur Erzeugung von Objekten, Arno Haase Consulting, .com/veroeffentlichungen/ObjekteErzeugen.pdf


Herunterladen ppt "Seminar Softwaretechnik Dipl.-Inform. Susanne Jucknath-John"

Ähnliche Präsentationen


Google-Anzeigen