1 WS 2012 Software-Engineering II Analyse- und Entwurfsmuster.

Slides:



Advertisements
Ähnliche Präsentationen
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Advertisements

1 WS 2012 Software-Engineering II Einführung / Objektorientierung.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Einführung in die Informatik: Programmierung und Software-Entwicklung
Einführung in die Programmierung Zusammenfassung
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
Objektorientierter Entwurf (OOD) Teil 3: Qualitätsmodell
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Polymorphie (Vielgestaltigkeit)
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
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.
1 WS 2012 Software-Engineering II Aspektorientierung.
Software Design Patterns Creational Patterns Structural Patterns Behavioral Patterns –Behavioral Class Patterns Interpreter Template Method Pattern –Behavioral.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
Entwurfsmuster EDV Entwurfsmuster.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Informatikunterricht mit Java
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
20:00.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 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.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Analyse von Ablaufdiagrammen
PROCAM Score Alter (Jahre)
Tutorium PG Verbesserung Blatt 5 Beim instanziieren eines Fahrrades muss es möglich sein, alle benötigten Attribute dem Konstruktor zu übergeben.
Parameterübergabemechanismen für den Methodenaufruf
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Technische Frage Technische Frage Bitte löse die folgende Gleichung:
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Programmiervorkurs WS 2014 Referenzdatentypen
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
S INGLETON P ATTERN IN M ATLAB By Giuseppe
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
OOP II.
 Präsentation transkript:

1 WS 2012 Software-Engineering II Analyse- und Entwurfsmuster

2 WS 2012 Themenübersicht »Objektorientierung »Aspektorientierung »Vorgehensmodelle »UML »Analyse- & Entwurfsmuster »Objektorientiertes Testen »Versionsverwaltung »Refactoring »Labor (Praktischer Teil)

3 WS 2012 Muster (Patterns) »Beschreiben Lösungen zu häufig wiederkehrenden Problemen »Muster bieten »jahrelang erprobte Lösungen die durch ihre Dynamik und Flexibilität herausstechen »einheitliches Vokabular für die Arbeit im Team

4 WS 2012 Analysemuster Martin Fowler Addison-Wesley 386 Seiten ISBN: (Deutsch)

5 WS 2012 Analysemuster »Finden ihren Haupteinsatz in der Analysephase »Bieten in der Praxis bewährte Modellierungen von Standardzusammenhängen aus spezifischen Domänen

6 WS 2012 Beispiel: Muster Party Fowler: Die Bezeichnung Party soll immer dann verwendet werden, wenn bei der Modellierung eine Generalisierung von Person und Organisation gesucht wird. Bsp. aus der Domäne: Adressverwaltung Adressbuch: In ihrem Adressbuch speichert eine Firma sowohl Privatpersonen als auch Organisationen. Beide Entitäten besitzen gleiche Eigenschaften: - Post-Anschrift - Telefon-Nummer - -Adresse Die Entität Party soll einen Oberbegriff für diese Entitäten bilden.

7 WS 2012 Entwurfsmuster Head First Design Patterns Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates OReilly 638 Seiten ISBN: (Englisch) ISBN: (Deutsch)

8 WS 2012 Entwurfsmuster Design Patterns Elements of Reusable Object-Oriented Software Gang of Four Addison-Wesley 395 Seiten ISBN: (Englisch) (Die deutsche Ausgabe wird nicht empfohlen)

9 WS 2012 Entwurfsmuster »Einsatz: Entwurfs- und Implementierungsphase »Objektorientierte Klassenmodelle, die erprobte, generische Lösungen bieten »Lösen wiederkehrende Probleme »Helfen, erweiterbaren und damit wieder verwendbaren Code zu schreiben »Bieten Vokabular für Software-Ingenieure »Programmiersprachenunabhängig

10 WS 2012 Das Singleton-Pattern

11 WS 2012 Die Berufsakadie »Situation: Es kann nur eine geben! »Es muss verhindert werden, dass mehrere Instanzen der Klasse erzeugt werden, da die Berufsakademie unser zentrales Verwaltungsobjekt darstellt class x { … ba.addSemester( new Semester( TIT2005 ) ); } class y { … ba.addSemester( new Semester( TIT2006 ) ); // Muss dieselbe // Instanz sein!!! }

12 WS 2012 Ansatz: Statisches Attribut »Die Instanz der Berufsakademie wird in einem statischen Attribut der Klasse gespeichert Bei jedem Zugriff: //--- if( Berufsakademie.instance == null ) { Berufsakademie.instance = new Berufsakademie(); } //--- Berufsakademie.instance.addSemester( … );

13 WS 2012 Ansatz: Statisches Attribut Bei jedem Zugriff: //--- if( Berufsakademie.instance == null ) { Berufsakademie.instance = new Berufsakademie(); } //--- Berufsakademie.instance.addSemester( … ); »Das herkömmliche Instanzieren (new) wird nicht verhindert! »Das Initialisieren kann leicht vergessen werden!

14 WS 2012 Pattern: Singleton [I] »Die Methode getInstance liefert die eine Instanz der Klasse zurück »Ein privater Konstruktor verbietet das externe Instanzieren der Klasse »instance speichert die eine Instanz der Klasse als statisches Attribut Erzeugt Instanz oder gibt sie zurück Privater Konstruktor Speichert die Instanz

15 WS 2012 Pattern: Singleton [II] void someFunction() { Berufsakademie.getInstance().addSemester( … ); }

16 WS 2012 Das Template Method- Pattern

17 WS 2012 Benotung von Studenten I »klausurenKorrigieren definiert einen festen Algorithmus: »Musterlösung bereitstellen »Die Klausuren aller Studenten mit der Musterlösung vergleichen »Dem Studiengangsleiter die Ergebnisse mitteilen »Verschiedene Dozenten benoten Studenten unterschiedlich »Fair »Unfair »Alle kommen durch »Zufällig fairness = { fair, unfair, allekommendurch, zufällig}; if( fairness == fair ) { … } else if( fairness == unfair ) { } …

18 WS 2012 Benotung von Studenten II »Problem dieses Ansatzes: »Stets, wenn ein neuer Dozententyp erscheint, muss die Klasse BADozent angepasst werden »Die Methode klausurenKorrigieren wird unübersichtlich und unwartbar

19 WS 2012 Design Prizipien I »Codestellen isolieren, die sich häufig ändern können und flexibel für Änderungen zu machen »Trennung von statischen und dynamischen Programmstellen

20 WS 2012 Pattern: Template Method »Es werden Subklassen gebildet, die den variierenden Teil spezifisch implementieren »Alles Statische bleibt in der Superklasse, der variable Algorithmus wird der Subklasse überlassen

21 WS 2012 Template Method II »Die Methode benote wird abstrakt, jede Subklasse muss diese Implementieren »Das Grundgerüst des Algorithmus klausurenKorrigieren wird von der Klasse BADozent bereitgestellt (Musterlösung bereitstellen, alle Studenten benoten, Studiengangsleiter benachrichtigen)

22 WS 2012 Template Method III »Nun können alle Subklassen ihre eigene Implementierung realisieren class ZufälligeNotenDozent extends BADozent { protected void benote( BAStudent st ) { st.setNote( Math.Random() * ); } class UnfairerDozent extends BADozent { protected void benote( BAStudent st ) { st.setNote( Math.Random() * ); } class AlleKommenDurchDozent extends BADozent { protected void benote( BAStudent st ) { st.setNote( Math.Random() * ); } class FairerDozent extends BADozent { protected void benote( BAStudent st ) { st.setNote( Math.Random() * ); }

23 WS 2012 Lustlos? »Was, wenn manche Dozenten während der Korrektur die Lust verlieren und deshalb zu Beginn fairer korrigieren als gegen Ende? »(Bspw. ab 50% der Studenten) »Der Dozent weiß aktuell nicht, wieviele Studenten noch kommen

24 WS 2012 Hooks I »Hooks sind Methoden in der Basisklasse, die nicht abstrakt sind, sondern einen leeren Methoden-Body besitzen »Bei Bedarf kann eine Subklasse den Hook überschreiben, es ist ihr jedoch frei gestellt

25 WS 2012 Hooks II »BADozent wird um die Methoden korrekturStart und korrekturEnde erweitert »Jeder beliebige Dozenten-Typ kann nun herausfinden, wieviele Studenten er korrigieren wird und so seine Bewertung durchführen Ist nicht daran interessiert, wieviele Studenten folgen Benotung abh. von Anzahl

26 WS 2012 Das Factory Method- Pattern

27 WS 2012 Wer erstellt all diese Objekte? »Viele Subklassen machen die Verwaltung schwierig »Problem: Klassen werden an vielen Stellen des Codes erzeugt »Verlust der Übersicht »Es entstehen Abhängigkeiten zwischen vielen Klassen »Bei Parametern im Konstruktor: Anpassung des Konstruktors verherend »Unwartbarer Code! new FairerDozent(…) new UnfairerDozent(…) new FairerDozent(…) new AlleKommenDurchDozent(…) new UnfairerDozent(…)

28 WS 2012 So nicht! Jeder kennt jeden! So verursacht die geringste Änderung ein Dilemma.

29 WS 2012 Design Prizipien II »Wenn möchlich nicht gegen konkrete Implementierungen sondern gegen Interfaces und abstrakte Klassen programmieren! LaunischerDozent infoDozent; … infoDozent = new LaunischerDozent(); infoDozent.klausuren…( … ); BADozent infoDozent; … infoDozent = new ???(); infoDozent.klausuren…( … ); statt besser

30 WS 2012 Design Prizipien III »Annahme: Die Art des Dozenten hängt von Fach, Geschlecht und Alter ab »Statt hier eine Unterscheidung zu machen, verwenden wir eine Klasse, die uns die Instanzen erzeugt BADozent infoDozent; … infoDozent = new ???(); infoDozent.klausuren…( … ); besser

31 WS 2012 Die Factory regelt das »Die Fakultäten kennen die Factory und die abstrakte Klasse BADozent, die Factory kennt alle Dozenten-Typen »Änderungen an den Dozenten-Typen müssen nur an der Factory gewartet werden

32 WS 2012 CreateDozent BADozent createDozent( int age, String subject, String gender ) { if( age > 65 ) { return new AlleKommenDurchDozent(); } if( subject.equals( DB ) && gender.equals( male ) ) { return new UnfairerDozent(); } if( subject.equals( BWL ) ) { return new ZufälligeNotenDozent(); } return new FairerDozent(); }

33 WS 2012 Und die Fakultäten? »Was, wenn Dozenten verschiedener Fakultäten unterschiedliche Gewichtungen bei der Charakterbildung der Dozenten haben? »Bsp: »Informatik: Fair = {<40, weiblich, nicht Datenbanken} »Maschinenbau: Fair = {>60, männlich, alle technischen Fächer}

34 WS 2012 Pattern: Factory-Method »Jede Fakultät verwendet ihre eigene Factory, die nach ihrem spezifischem Algorithmus die Dozenten klassifiziert »Die Klasse DozentFactory ist nun abstrakt und zwingt die Subklassen, die Methode zu implementieren

35 WS 2012 Erkannt? »Wieder wurden die variablen Teile von den statischen getrennt »Die Factory-Methode ist eine spezielle Template-Methode Potentiell variabel

36 WS 2012 Das State-Pattern

37 WS 2012 Zustände I

38 WS 2012 Zustände II »5 Zustände »Keine Klausur geschrieben »Klausur nicht best. »Nachklausur nicht best. »Fach best. »Fach nicht best. »3 Transitionen »durchgefallen »bestanden »krank am Klausurtag

39 WS 2012 Ansatz: Zustandsattribut class BAStudent { private final static int KEINE_KLAUSUR_GESCHR = 0; private final static int KLAUSUR_NICHT = 1; private final static int NACHKLAUSUR_NICHT = 2; private final static int BESTANDEN = 3; private final static int NICHT_BESTANDEN = 4; private int state = BAStudent.KEINE_KLAUSUR_GESCHR; public void durchgefallen() {…} public void bestanden() {…} public void krank() {…} }

40 WS 2012 Methoden public void durchgefallen() { switch( state ) { case KEINE_KLAUSUR_GESCHR: state = KLAUSUR_NICHT; break; case KLAUSUR_NICHT: state = NACHKLAUSUR_NICHT; break; case NACHKLAUSUR_NICHT: state = NICHT_BESTANDEN; break; default: throw new Exception( Nicht erlaubt! ); } public void bestanden() { … } public void krank() { if( state… ) { … } }

41 WS 2012 Design Prinzipien? »Keine Abkapselung der Programm-Teile, die variieren können »Zustandsübergänge sind nicht explizit sondern inmitten der Contitional Statements vergraben »Code ist Fehler- anfällig: ein neuer Zustand muss in allen Methoden gepflegt, kann jedoch übersehen werden »Nicht objektorientiert public void durchgefallen() { switch( state ) { case KEINE_KLAUSUR_GESCHR: state = KLAUSUR_NICHT; break; case KLAUSUR_NICHT: state = NACHKLAUSUR_NICHT; break; case NACHKLAUSUR_NICHT: state = NICHT_BESTANDEN; break; default: throw new Exception( Nicht erlaubt! ); }

42 WS 2012 State Pattern I »Interface State, definiert die Transitionsmethoden »Für jeden möglichen Zustand existiert eine Subklasse von State »BestandenState »NachklausurNichtState »DurchgefallenState »KlausurNichtState »KeineKlausurState »Die Klasse BAStudent delegiert den Methodenaufruf lediglich an das State-Objekt

43 WS 2012 State Pattern II »Alle State- Objekte haben eine Referenz auf das BAStudent-Objekt »Durch die Methode setState können die Zustände Transitionen auslösen

44 WS 2012 State Pattern III class KeineKlausurState implements State { BAStudent student; public KeineKlausurState( BAStudent student ) { this.student = student; //jeder State bekommt eine Referenz des Studenten injiziert } public void durchgefallen() { this.student.setState( … ); } public void bestanden() { this.student.setState( … ); } public void krank() { // der Zustand wird nicht geändert } Zustands- transitionen

45 WS 2012 State Pattern IV class KeineKlausurState implements State { BAStudent student; public KeineKlausurState( BAStudent student ) { this.student = student; //jeder State bekommt eine Referenz des Studenten injiziert } public void durchgefallen() { this.student.setState( … ); } public void bestanden() { this.student.setState( … ); } public void krank() { // der Zustand wird nicht geändert } Zustands- transitionen

46 WS 2012 State Pattern V class KeineKlausurState implements State { BAStudent student; public KeineKlausurState( BAStudent student ) { this.student = student; //jeder State bekommt eine Referenz des Studenten injiziert } public void durchgefallen() { this.student.setState( … ); } public void bestanden() { this.student.setState( … ); } public void krank() { // der Zustand wird nicht geändert } Zustands- transitionen Die Klasse BAStudent hält alle möglichen Zustände vor

47 WS 2012 State Pattern VI class KeineKlausurState implements State { BAStudent student; public KeineKlausurState( BAStudent student ) { this.student = student; //jeder State bekommt eine Referenz des Studenten injiziert } public void durchgefallen() { this.student.setState( this.student.GetKlausurNichtState() ); } public void bestanden() { this.student.setState( this.student.GetBestandenState() ); } public void krank() { // der Zustand wird nicht geändert }

48 WS 2012 Weitere Patterns? »Es gibt neben den hier vorgestellten noch viele nützliche Patterns »Patterns werden in der Software- Entwicklung gerne und häufig eingesetzt »Beispiel: Java SDK API »Factory Method: BorderFactory »Observer Pattern: Event-Listener »…