Seminar Softwaretechnik Dipl.-Inform. Susanne Jucknath-John

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

der Universität Oldenburg
mit Entwicklungsumgebungen (Eclipse) Software verbessern
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Programmierung Ausführbare Klassen
Einführung in die Programmierung Zusammenfassung
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Erweiterte Zuweisungskompatibilität
Konstruktoren.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Java-AG Ausnahmebehandlung Gerhard Gröger.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
Software Design Patterns Extreme Programming (XP).
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Einführung in die Programmierung Datensammlung
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Die Persistenzschicht
Teil II Objekte ergeben ein Ganzes
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium #3 Philipp Effenberger
Programmiervorkurs WS 2014/15 Instanzmethoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.
Software Design Patterns
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Objektorientierte (OO) Programmierung
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Tutorium Software-Engineering SS14 Florian Manghofer.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Implementieren von Klassen
 Präsentation transkript:

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 29.07.05 Gehalten von Asif Khan

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

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.

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

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

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.

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)

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

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

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.

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

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

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

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

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(...)

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

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

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");

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

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

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

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