1 / 22

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. Pattern Creation. Gliederung. Was ist ein Pattern? - Kurze Einführung Was ist “Pattern Creation”?

eldon
Download Presentation

Pattern Creation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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(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. ErweiterteLizenzManager 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 DecodingNodeFactory StandardNodeFactory 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 ... 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 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

More Related