kapitel 7. „objektentwurf“ - software engineering · 2018-02-08 · kapitel 7. „objektentwurf...

137
Vorlesung „Softwaretechnologie“ Wintersemester 2010 R O O T S Kapitel 7. „Objektentwurf“ Teilweise nach „Brügge & Dutoit“, Kap. 8 Stand: 16.12.2010

Upload: others

Post on 01-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Vorlesung „Softwaretechnologie“Wintersemester 2010 R O O T S

Kapitel 7. „Objektentwurf“

Teilweise nach „Brügge & Dutoit“, Kap. 8

Stand: 16.12.2010

Page 2: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-2 R O O T S

Objektentwurf Definition Aktivitäten

Wichtige Aktivitäten Spezifikation von Schnittstellen Fortgeschrittene UML-Konzepte

und ihre Umsetzung in bisher bekannte „Kern-UML“-Konzepte

Umsetzung von „Kern-UML“ in implementierungsnahe, einfachere Designs

Wichtige Hilfsmittel CRC-Karten „Design by Contract“ Verhaltensprotokolle (Behaviour

Protocols) „Split-Object“-Entwurfsmuster

Überblick

Page 3: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-3 R O O T S

Der Objektentwurf als Produkt

… ist das komplette Modell des zu realisierenden Systems Klassendiagramme und dynamische Diagramme Verteilungs- und Komponentendiagramme

… dient als Basis für die Implementierung Automatische Code-Generierung aus Klassendiagrammen

Mittels CASE-Tools (CASE = Computer Aided Software Engineering = Computer-unterstütze Software Entwicklung)

Beispiel: Together, RationalRose, EnterpriseArchitect, ArgoUML, … Manuelle Implementierung des „Restes“

Page 4: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-4 R O O T S

Der Objektentwurf als Prozess

… bezeichnet die Ergänzung und Veränderung der Ergebnisse der Anforderungsanalyse und des Systementwurfs auf Basis von Implementierungsentscheidungen, die die gesetzten Anforderungen erfüllen.

… bezeichnet die Identifikation verschiedener Möglichkeiten, das Analyse- und Systemmodell zu implementieren sowie die begründeteAuswahl zwischen den Alternativen (siehe auch Kapitel „Rationale Management“).

Die Auswahl orientiert sich immer an den gesetzten Anforderungen und deren Prioritäten.

Aber: Betreiben wir nicht schon in der Anforderungserfassung Objektentwurf?

Page 5: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Objektentwurf: Die Lücke schließen

Problem

Maschine

System

Anwendungsobjekte

Lösungsobjekte

Spezielle Objekte

DBMSCORBA Registry

Standard Komponenten

Objektentwurf

Anforderungen

SystementwurfKamera

Roboterarm

Hardware

Page 6: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-6 R O O T S

Aufgaben des Objektentwurfs

Vollständige Definition aller Klassen und Assoziationen Auswahl von Algorithmen und Datenstrukturen Bestimmung neuer Klassen, die unabhängig von der

Anwendungsdomäne sind (z.B. “Cache”, Abstraktionen, Enturfsmuster, ...)

Überdenken der Typ- und Vererbungshierarchien Entscheidungen über den Kontrollfluss Optimierung

Page 7: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-7 R O O T S

Aktivitäten während des Objektentwurfs

1. Schnittstellenspezifikation Spezifikation der Schnittstellen aller Typen (Klassen und Interfaces)

2. Auswahl vorhandener Komponenten Bestimmung von Standardkomponenten und zusätzlicher Objekte der

Lösungsdomäne 3. Restrukturierung des Objektmodells

Umformen des Modell des Objektentwurfs zur Verbesserung von Verständlichkeit und Erweiterbarkeit sowie Realisierung von UML-Konzepten, die keine Entsprechung in Ihrer Programmiersprache haben

4. Optimierung des Objektmodells Umformen des Objektmodells unter Berücksichtigung von

Performanzkriterien, wie Reaktionszeit (z.B. der Benutzerschnittstelle) oder Speicherbedarf.

Fortsetzung aus dem Systementwurf

Page 8: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellenspezifikation

Schnittstellenidentifikation: CRC-KartenSchnittstellenfestlegung: Signatur-SpezifikationSchnittstellenverfeinerung: Verhaltens-Spezifikation durch Design by ContractSchnittstellenverfeinerung: Interaktions-Spezifikation durch Behaviour ProtocolsSchnittstellenverfeinerung: Spezifikation der „ausgehenden“ Schnittstelle

Page 9: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellen-Identifikation: CRC-Cards

Page 10: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

OO Modellierung: Class-Responsibility-Collaboration (CRC) Karten Class

Welche Klasse betrachten wir?

Responsibility Beschreibt die Aufgaben der Klasse

Collaboration Welche anderen Klassen werden

für die Aufgabe gebraucht?

Nutzen regt Diskussionen an lenkt den Blick auf das Wesentliche Hilft auf Schnittstelle statt Daten zu fokussieren beugt Konzentration von zu vielen

Verantwortlichkeiten an einer Stelle vor

“Schreib nie mehr auf, als auf eine Karte paßt!” eher die Klasse in zwei Klassen / Karten aufteilen! 1 Karte = höchstens DIN A5 groß (halbes DIN A4 Blatt)

Bestellung

Prüfe ob Artikel auf Lager

Bestimme Preis

Prüfe Zahlungseingang

Ausliefern

Lager

Artikel

Kunde, Kasse

Logistik

Class (Klassen-Name)

Responsibility(Aufgaben)

Collaboration(Zusammenarbeit)

Page 11: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-11 R O O T S

Einsatz von CRC-Cards

Wann in Analyse und früher Design-Phase

Wozu Identifikation von Klassen, Operationen und „Kollaborations“-Beziehung Einzig relevante Beziehung ist „Kollaboration“ mit anderen Klassen Instanzvariablen werden weitgehend ignoriert Fokus liegt auf Operationen und evtl. den Parametern und Ergebnissen,

die sie im Rahmen einer Kollaboration brauchen

CRC-Cards sind sehr hilfreiche für Anfänger in der OO Modellierung, da verhaltenszentriertes Denken gefördert wird!

Fokus auf Schnittstellenstatt auf Instanzvariablen, Aggregationen, Kardinalitäten, ...

Page 12: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-12 R O O T S

Was kommt nach CRC-Cards?

Ausarbeitung der Beziehungen, Kardinalitäten, ... Herkömliche Datenmodellierung (IS-Vorlesung)

Verfeinerung des Verhaltens Design by Contract

(Re)Strukturierung des Objektmodells Objekt-Orientierte Modellierungs-Prinzipien

Page 13: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellen-Spezifikation:Signaturen = Schnittstellen-Syntax

Page 14: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-14 R O O T S

Spezifikation der Schnittstellen

In Anforderungsanalyse: Identifikation von Attributen - ohne ihren Typ anzugeben Operationen - ohne ihre Parameter(typen)

anzugeben

Im Entwurf: Hinzufügen von Typsignaturen … weiteres später …

Im Systementwurf werden Typsignaturen für Dienste festgelegt.

Im Objektentwurf werden Typsignaturen für alle Typen des Designs festgelegt. Typen = Klassen und Interfaces

Hashtable

-numElements

+put()+get()+remove()+containsKey()+size()

Hashtable

-numElements: int

+put(key: Object, entry:Object)+get(key: Object): Object+remove(key: Object)+containsKey(key: Object): boolean+size(): int

Page 15: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-16 R O O T S

Warum reichen Typsignaturen nicht aus?

Sie sagen nur etwas darüber, wie man eine Operation aufruft.

Sie sagen nichts darüber, was die aufgerufene Operation macht. keine Verhaltensspezifikation Verhaltenszusicherungen (Contracts)

Sie sagen nichts darüber, in welcher Reihenfolge verschiedene Operationen des gleichen Objektes aufgerufen werden müssen. keine Interaktionsspezifikation Behaviour Protocols

Sie sagen nichts darüber, was der spezifizierte Typ selber von seiner Umgebung braucht, um die angebotenen Operationen realisieren zu können. keine explizite Spezifikation von Abhängigkeiten Benutzte Schnittstellen

(Required Interfaces)

Sie unterscheiden nicht verschiedene Clients Sichtbarkeitsinformationen

put(key: Object, entry:Object)

Page 16: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellen-Spezifikation:Verhaltensspezifikation durch

„Design by Contract“

Page 17: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-18 R O O T S

Design by Contract (DBC)

Behauptung (Assertion) Logische Aussage, die wahr sein muss Macht die Annahmen explizit, unter denen ein Design funktioniert Lässt sich automatisch überprüfen

Vertrag (Contract) Menge aller Assertions, die festlegen, wie zwei Partner interagieren Auftraggeber = aufrufende Operation / Klasse Auftragnehmer = aufgerufene Operation / benutzte Klasse

Page 18: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-19 R O O T S

Design by Contract: Vorbedingungen (‚Preconditions’) Definition

Eine Precondition ist eine Voraussetzungen dafür, dass eine Operation korrekt ausgeführt werden kann

Technische Realisierung Assertion die wahr sein muss, bevor eine Operation ausgeführt wird.

Beispiel: Operation “Ziehe die Wurzel einer Zahl” Signatur: squareRoot(input int) Pre-condition: input >= 0

Verantwortlichkeiten Der aufgerufene Code formuliert die Vorbedingung Der aufrufende Code muss die Einhaltung der Vorbedingung sicherstellen

Page 19: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-20 R O O T S

Design by Contract: Nachbedingung (Postcondition) Definition

Postcondition beschreibt deklarativ das Ergebnis eines korrekten Aufrufs Sagt aus, was getan wird, nicht wie es getan wird

Technische Realisierung Assertion die wahr sein muss, nachdem eine Operation ausgeführt wird.

Beispiel: Operation “Ziehe die Wurzel einer Zahl” Signatur: squareRoot(input i) Post-condition: input = result * result

Verantwortlichkeiten Der aufgerufene Code formuliert die Nachbedingung Der aufgerufene Code garantiert die Einhaltung der Nachbedingung …

aber nur wenn die Vorbedingung wahr ist!

Page 20: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-21 R O O T S

Design by Contract: Klasseninvariante (Class Invariant) Definition

Invariante beschreibt deklarativ legale Zustände von Instanzen einer Klasse

Technische Realisierung Assertion die für alle Instanzen einer Klasse immer wahr ist.

Beispiel: Klasse eines Benutzerkontos Invariante: Der Kontostand ist immer die Summe aller Buchungen “kontostand == summe(buchungen.betrag ())”

Verwendung Invarianten werden verwendet, um Konsistenzbedingungen zwischen

Attributen zu formulieren.

Verantwortlichkeiten Diese Bedingungen einzuhalten liegt in der gemeinsamen

Verantwortlichkeit aller Operationen einer Klasse.

Page 21: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-22 R O O T S

Zustand zu einem Zeitpunkt = Die Werte aller Instanzvariablen Mindestens der eigenen Var. Konzeptionell ist auch der

Zustand aller aggregierten Teil-Objekte eigener Zustand

legale Zustände werden durch Klasseninvarianten definiert Dame und Springer haben

gleichen Zustandsraum (jedes Schachbrett-Feld)

Figuren dürfen Spielfeldnicht verlassen

Legale Schachbrett-Zustände: pro Feld max. eine Figur

DBC spezifiziert legale Zustände

1

2

3

4

5

6

7

8

a b c d e f g h

Page 22: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-23 R O O T S

1

2

3

4

5

6

7

8

a b c d e f g h

Verhalten der Dame Verhalten = Zustandsübergänge

und daran gekoppelte Aktionen Dame bewegt sich horizontal

und diagonal beliebig weit Springer bewegt sich L-förmig

Legales Verhalten Mindestens:

Zustandsübergänge die nicht in illegale Zustände führen

Meist gibt es zusätzliche applikationsspezifische Bedingungen („Constraints“) s. nächste Folie

DBC spezifiziert legales Verhalten

Verhalten der Springer

Page 23: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-24 R O O T S

1

2

3

4

5

6

7

8

a b c d e f g h

DBC spezifiziert legales Verhalten

DDBC definiert legale Zustandsübergänge durch Vor- und Nachbedingungen

Beispiel: Eigene Figuren schlagenist verboten Vorbedingung der Operation

“zieheNach(Feld)”:Feld nicht von eigener Figurbelegt

Beispiel: Keine Figur ausser demSpringer kann über anderehinüberspringen Weitere Vorbedingung der

Operation “zieheNach(Feld)”

Page 24: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-25 R O O T S

OCL erlaubt die formale Spezifikation von Bedingungen (Constraints) für Werte von Modellelementen oder Gruppen von Modellelementen Noch keine Bedingungen an den Kontrollfluss möglich.

Ein Constraint wird in Form eines OCL Ausdrucks angegeben, der entweder den Wert wahr oder falsch hat. „Constraint“ in OCL = „Assertion“ in DBC

Beispiel: OCL Constraints für Hashtabellen Invariante:

inv: Bedeutet: „Für den Typ ‚Hashtable‘ gilt die Invariante ‚numElements >= 0‘.“

Vorbedingung: pre:

Nachbedingung: post: containsKey(key) and get(key) = entry

!containsKey(key)context Hashtable::put(key, entry)

context Hashtable::put(key, entry)

context Hashtable numElements >= 0

Formulierung von Kontrakten in UML: OCL (Object Constraint Language)

OCL Ausdruck: Namen beziehen sich auf

Elemente des Modells

Dargestellte Art von Assertion

Gültigkeits-bereich

Notation für “Methode ‘put’ aus Typ ‘Hashtable’ ”

Page 25: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-26 R O O T S

Formulierung von Kontrakten in UML

Jede Assertion kann auch als Notiz dargestellt und an des jeweilige UML Element “angehängt” werden. Die Art der Assertion wird als Stereotyp angegeben

Hashtable

numElements:int

put(key, entry:Object)get(key):Objectremove(key:Object)containsKey(key:Object):booleansize():int

Page 26: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Besondere Schlüsselworte in Nachbedingungen (‚postconditions‘) Wenn nichts explizit angegeben ist bezieht man sich in Nachbedingun-

gen auf den Nachzustand und in Vorbedingungen auf den Vorzustand. In Nachbedingungen muss aber manchmal explizit der Zustand vor

und nach der Ausführung der Operation in Beziehung gesetzt werden. Syntax

expr@pre = Der Wert des Ausdrucks expr vor Ausführung der Operationauf die sich die Nachbedingung bezieht.

expr@post = Der Wert des Ausdrucks expr nach Ausführung der Operation auf die sich die Nachbedingung bezieht.

Beispiele context Person::birthdayHappens() post: age = age@pre + 1 age@pre bezieht sich hier auf den Wert des Feldes age vor Begin der

Ausführung der Operation birthdayHappens() „Alter Wert“ [email protected] – Alter Wert des Feldes b von a. Darin der neue Wert des

Feldes c. [email protected]@pre – Alter Wert des Feldes b von a. Darin der alte Wert des

Feldes c.

Page 27: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-28 R O O T S

Weitere OCL-Schlüsselworte

result Bezug auf den Ergebniswert einer Operation (in Nachbedingungen).

self Bezug auf das ausführende Objekt (wie „this“ in Java).

Literatur OCL 2.0 Specification, Version 2.0, Date: 06/06/2005,

http://www.omg.org/docs/ptc/05-06-06.pdf

Page 28: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-29 R O O T S

DBC-Unterstützung in Java

Assertions Seit Java 1.4. Zur Ausführung des Java-Bytecodes mit Assertions wird

eine JVM 1.4 oder höher vorausgesetzt. Werden auch in den API-Klassen eingesetzt Können per Option des java-Aufrufs eingeschaltet (enabled)… …und abgeschaltet (disabled: Default) werden

Vorbedingungen, Nachbedingung und Invarianten …werden als boolesche Ausdrücke in den Quelltext geschrieben.

Vorteile von Assertions Schnelle, effektive Möglichkeit Programmierfehler zu finden. Bieten die Möglichkeit, Annahmen knapp und lesbar im Programm zu

beschreiben. Die Nutzung von Assertions zur Entwicklungszeit erlaubt es zu zeigen,

dass alle Annahmen richtig sind. Die Qualität des Codes erhöht sich somit.

Page 29: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-30 R O O T S

Anwendung Man kann Assertions an beliebigen Stellen des Quellcodes verwenden um

logische Ausdrücke zu überprüfen. Liefert ein solcher Ausdruck false zurück, wird ein AssertionError

ausgelöst und die Ausführung des Programms stoppt. Die ausgelösten Fehler sind vom Typ Error und nicht vom Typ Exception

Sie müssen daher nicht abgefangen werden!

Syntax

assert <boolean expression> : <String>;

assert (c != null) : "Customer is null“;

assert <boolean expression>;

assert (c != null);

DBC-Unterstützung in Java

oder:

Page 30: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-31 R O O T S

Warum DBC-Unterstützung in Java?

Der Effekt des assert Statements könnte auch mit einer if-Anweisung und explizitem Werfen von ungeprüften Ausnahmen realisiert werden.

Die Vorteile von sprachunterstützten Assertions sind Lesbarkeit

Der Quellcode wird klarer und kürzer Auf den ersten Blick ist zu erkennen, dass es sich um eine

Korrektheitsüberprüfung handelt und nicht um eine Verzweigung im Programmablauf

Effizienz Sie lassen sich für die Laufzeit wahlweise an- oder ausschalten Somit verursachen sie praktisch keine Verschlechterung des

Laufzeitverhaltens.

Page 31: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-32 R O O T S

Design by Contract: Sprachunterstützung

Java Assertions werden ab JDK 1.4 unterstützt Formulierung von pre -und, postconditions und invariants ist damit möglich

Contract4J Contracts als assertions für JDK 1.5 (Java 5) formuliert http://www.contract4j.org

Eiffel Kontrakte voll unterstützt (preconditions, postconditions und invariants) http://en.wikipedia.org/wiki/Eiffel_(programming_language)

Spec# C# mit voller Kontraktunterstützung und vielen anderen Erweiterungen http://research.microsoft.com/specsharp/

Andere Sprachen Kontrakte zumindestens in der Dokumentation explizit machen

In allen Sprachen Kontrakte als wichtiges Kriterium beim Entwurf mit beachten Ersetzbarkeit

Page 32: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-33 R O O T S

Subtyping / Ersetzbarkeit und Kontrakte

Instanzen von B sind immer für Instanzen von A einsetzbar

Instanzen von B bieten mindestens und fordern höchstensdas gleiche wie Instanzen von A

B ist ein Subtyp von A

Instanzen von B haben mindestens alle Methoden von A, und zwar mit (gleichen oder) stärkeren Nachbedingungen

und (gleichen oder) schwächeren Vorbedingungen

Page 33: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellen-Spezifikation:Interaktionsspezifikation durch „Behavour Protocols“

Page 34: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Gegeben Folgende Typspezifikation ... und sogar zugehörige Contracts

Problem Wir wüssten trotzdem nicht, wie das

beabsichtigte Zusammenspiel der einzelnen Methoden ist.

Kann man jede in jeder beliebigen Reihenfolge aufrufen, unabhängig von dem was man vorher aufgerufen hat?

Lösung Zu jedem Typ wird sein

„Verhaltensprotokoll“ mit angegeben Es ist ein regulärer Ausdruck der

legale Aufrufsequenzen und Wiederholungen spezifiziert

Beispiel „Erst Verbindung zuer Datenbank

erstellen, dann beliebig oft anfragen und in jedem Anfrageergebnis beliebig oft Teilergebnisse abfragen, dann Verbindung wieder schließen.“

Interaktionsspezifikation durch „Behaviour Protocoll“

DB_Interface

open(DB_descr) : Connectionclose(Connection)query(Connection,SQL) : ResultSetgetNext(ResultSet) : Result

protocoll DB_Interface_Use = open(DB_descr) ,( query(Connection,SQL) : ResultSet ,( getNext(ResultSet) : Result )* ,

)* ,close(Connection)

Page 35: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellen-Spezifikation:Sichtbarkeitsinformationen

Page 36: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-37 R O O T S

Hinzufügen von SichtbarkeitsinformationenUML definiert drei Sichtbarkeitsgrade: Private (-)

Auf diese Attribute/Operationen kann nur aus der sie definierenden Klassezugegriffen werden.

Protected (#) Auf diese Attribute/Operationen kann nur aus der sie definierenden Klasse

und deren Subklassen zugegriffen werden. Public (+)

Auf diese Attribute/Operationen kann aus jeder Klasse zugegriffen werden.

Die in Java bekante „package Sichtbarkeit“ gibt es in der UML nicht. Wenn gewünscht, entsprechenden Stereotyp benutzen, z.B. <<package_visible>>.

Page 37: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-38 R O O T S

Windowsize: Areavisibility: Booleandisplay()hide()Window

Window{ status=tested }

+ default-size: Rectangle+ size: Area = (100,100)# visibility: Boolean- xwin: XWindow+ display()+ hide()+ create()

Verschiedene Sichten von Klassen

Detaillierungsgrad Implementierung Analyse / Design „eingeklappt“

Notation public: + protected: # private: – Klassenvariable / -methode Abstrakte Klasse / Methode

Fließender ÜbergangCASE-Tools unterstützen einen fließenden Übergang, indem verschiedene Sichten definiert bzw. verschiedene Detail-Level ein-und ausgeblendet werden können.

Page 38: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-39 R O O T S

Sichtbarkeiten Zuletzt

Festlegung der Sichtbarkeiten ist schon sehr implementierungsnah.

Daher ist das der letzte Schritt, nach all den verschiedenen Formen der Festlegung der Typen über Signatur, Kontrakte und Protokolle.

Page 39: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Schnittstellen-Spezifikation:Explizite Spezifikation von „Benutzten Schnittstellen“

Siehe Abschnitt über „Komponenten“ im Kapitel „Systementwurf“

Page 40: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-47 R O O T S

Aktivitäten während des Objektentwurfs

1. Schnittstellenspezifikation Spezifikation der Schnittstellen aller Typen (Klassen und Interfaces)

2. Auswahl vorhandener Komponenten Bestimmung von Standardkomponenten

3. Restrukturierung des Objektmodells Umformen des Objektmodell zur Verbesserung von Verständlichkeit und

Erweiterbarkeit sowie Realisierung von UML-Konzepten, die keine Entsprechung in Ihrer Programmiersprache haben

4. Optimierung des Objektmodells Umformen des Objektmodells unter Berücksichtigung von

Performanzkriterien, wie Reaktionszeit (z.B. der Benutzerschnittstelle) oder Speicherbedarf.

Page 41: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Wiederverwendung

Page 42: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-49 R O O T S

Wiederverwendung

Wähle passende Datenstrukturen zu den jeweiligen Algorithmen Container-Klassen Arrays, Listen, Queues, Stacks, Mengen, Bäume

Suche nach vorhandenen Klassen in Klassenbibliotheken JSAPI, JTAPI, …

Definiere neue interne Klassen und Operationen nur wenn nötig. Komplexe Operationen erfordern eventuell Zerlegung

in neue Teiloperationen in neue Klassen

Page 43: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-50 R O O T S

Nutzung bestehender Software

Komponenten-Suchmaschinen Bsp: MeroBase, CodeConjurer Prof. Atkinson, Universität Mannheim

Auswahl existierender Standardklassenbibliotheken, Frameworks oder Komponenten Eigene oder von Drittanbietern (open source oder kommerziell)

Anpassung der Standardklassenbibliotheken, Frameworks oder Komponenten Nutzung vorgesehener Anpassungsmöglichkeiten

Parametrisierung Bildung von Unterklassen Konfiguration per „deployment descriptor“

Unvorhergesehene Anpassung Änderungen der API, falls der Quellcode verfügbar ist Sonst: Adapter oder Bridge Pattern Sonst: Aspektorientierte Programmierung

Page 44: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Erweiterung und Restrukturierung des Objektmodells

Umsetzung von fortgeschrittenen UML-Konzepten in „Kern-UML“ Umsetzung von Kern-UML in implementierungsnahes UML

Verbesserung von Verständlichkeit und Erweiterbarkeit

Page 45: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-52 R O O T S

Aktivitäten während des Objektentwurfs

1. Schnittstellenspezifikation Spezifikation der Schnittstellen aller Typen (Klassen und Interfaces)

2. Auswahl vorhandener Komponenten Bestimmung von Standardkomponenten zusätzliche Objekte der

Lösungsdomäne 3. Ergänzung und Restrukturierung des Objektmodells

Umformen des Objektmodell zur Umsetzung von UML-Konzepten, die nicht direkt von der Realisierungsumgebung unterstützt werden

... sowie zur Verbesserung von Verständlichkeit und Erweiterbarkeit 4. Optimierung des Objektmodells

Umformen des Objektmodells unter Berücksichtigung von Performanzkriterien, wie Reaktionszeit (z.B. der Benutzerschnittstelle) oder Speicherbedarf.

Page 46: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Erweiterung und Restrukturierung Fortgeschrittene UML-Konzepte

Abgeleitete AttributeAssoziationen als Klassen

AssoziationsklassenQualifizierte Assoziationen

Page 47: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-54 R O O T S

Bezug von UML zu gängigen OO Sprachen

C++

sprachspezifische Details

Konzepte ohne direkter Entsprechung in

gängigen Sprachen

direkt ineinander abbildbarer

gemeinsamer „Kern“

UML

Page 48: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-55 R O O T S

UML, statisches Modell: Multiple Vererbung Eine Klasse mit mehreren Oberklassen

studentische Hilfskraft

Student Angestellter

Page 49: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

UML, statisches Modell: Multiple Klassifikation Ein Objekt kann Instanz mehrerer Klassen sein

Person

Patient ArztKranken-gymnast

Kranken-schwester

Hausarzt Chirurg

Frau Mann

hahnemann : Mann, Hausarzt

Multiple Instanz

Diskriminator

Geschlecht Gesundheit Beruf

Fachgebiet

Page 50: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-57 R O O T S

UML, statisches Modell: Dynamische Klassifikation Eine Objekt kann Instanz mehrerer Klassen sein ... und seine Klassenzugehörigkeit ändern

Person

IngenieurManager HändlerFrau Mann

Geschlecht {static} Beruf {dynamic}

Page 51: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-58 R O O T S

obligatorisch (mandatory) Objekte müssen einer Klasse

aus dieser Partition angehören optional (optional) (default)

Objekte müssen nicht ...

statisch (static) (default) Objekte bleiben lebenslang in

einer Klasse dynamisch (dynamic)

Objekte können Klasse wechseln

impliziert "optional"

UML: Partitionierung von Unterklassen

Person

PatientFrau Mann

Geschlecht Gesundheit{optional, dynamic}

{mandatory, static}

hahnemann : Mann

hahnemann : Mann, Patient

hahnemann : Mann

t1

t2

t3

ZeitLegale Instanziierungen

Page 52: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-59 R O O T S

vollständig (complete) (default) impliziert Abstraktheit der

Oberklasse (falls es keine andere unvollständige Partition gibt)

überlappung (overlapping) impliziert Existenz

gemeinsamer Subtypen der Unterklassen

unvollständig (incomplete) hat oft konkrete Oberklasse für

alle nicht explizit gemachten weiteren Alternativen

disjunkt (disjoint) (default) impliziert Fehlen gemeinsamer

Subtypen der Unterklassen

UML: Partitionierung von Unterklassen

Figur

Linie PolygonKurve

Tier

Herbivore Carnivore

{incomplete, disjoint}

{complete, overlapping }

Omnivore

Page 53: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Können aus anderen Attributen berechnet werden Geben Hinweis auf Abwägung zwischen Neuberechnungsaufwand und

Konsistenzproblem bei redundanter Speicherung

UML: Abgeleitete Attribute

Account/balance:Money

Entryamount:Money

*

SummaryAccount

DetailAccount

*

{balance=sum of amounts of entries}

/entries

0..1 1

Abgeleitetes Attribut

Abgeleitete Rolle

*

/entries role is derived usingcomponent.entries

Anmerkung zur Berechnung eines abgeleiteten Attributs

components

OCL-Bedingung zur Berechnung eines abgeleiteten Attributs

Page 54: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Erweiterung und Restrukturierung Umsetzung fortgeschrittener

UML-Konzepte in „Kern-UML“ „Split Object“-Entwurfsmuster

Strategy Pattern als motivierendes BeispielEssenz von Split Objects

Weitere wichtige „Split-Object“-Patterns: State, Multiple Vererbung, Decorator

Page 55: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-62 R O O T S

UMLHigh

Dynamische Klassifikation Multiple Instanziierung Multiple Vererbung

Bidirektionale Assoziationen Qualifizierte Assoziationen

UMLCore

Statische Klassifikation Einfache Instanziierung Einfache Vererbung

Unidirektionale Assoziationen (Felder)

Restrukturierung des Objektmodells: UMLHigh UMLCore

„Split object“

Design

Patterns

Assoziations-

realisierung

Transformation von konzeptionellem Entwurf in „UMLHigh“ in implementierungsnahen Entwurf in „Kern-UML“

Umsetzung in verfügbare Zielsprache danach einfach, da die Kern-UML-Konzepte 1:1 in Programmiersprachen unterstützt sind

In diesem Abschnitt

Page 56: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Restrukturierung des Objektmodells: UMLHigh UMLLow

Typische Umsetzungsbeispiele Multiple Vererbung

Wiederverwendung: durch Aggregation und Forwarding Subtyping: durch Implementation eines gemeinsamen Interfaces Overriding: durch „Rückreferenzen“ (als Parameter oder Feld)

Multiple Instanziierung / Multiple Sichten Decorator (evtl. mit obiger Simulation von Subtyping und Overriding)

Dynamische Klassifikation / Dynamische Änderung der Klassenzugehörigkeit Strategy

Page 57: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-64 R O O T S

Motivation: Ein Beispiel

tuDas() ist geschlechtsspezifisch einheitlich

tuDies() ist personenspezifisch verschieden

Wie modelliert man objektspezifisches zustandsspezifisches dynamisch veränderbares

Verhalten?

?

Person...

tuDies(...)tuDas(...)

Man...

tuDas(...)

Woman...

tuDas(...)

Page 58: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-65 R O O T S

Schlecht, denn jede neue Alternative („begeistert“, „depresiv“, …) erfordert Änderung einer jeden mit Stimmungen befassten „case“-Anweisung

Typischerweise ist ja nicht nur eine Aktion (hier: tuDies) stimmungsabhängig…

1. Versuch: “Fest Kodieren”

Person...

tuDies(...)tuDas(...)

Man...

tuDas(...)

Woman...

tuDas(...)

tuDies(...) {...

case mood {happy: doItOneWay();sad: doItAnotherWay();

}}

Page 59: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-67 R O O T S

klassenspezifisch festes Verhalten :SadWoman

2. Versuch: “Multiple Vererbung”

Person...

tuDies(...)tuDas(...)

Man...

tuDas(...)

Woman...

tuDas(...)

Strategie...

tuDies(...)

Happy...

tuDies(...)

Sad...

tuDies(...)

SadWomanHappyMan HappyWoman SadMan

kombinatorische Explosion

Page 60: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-69 R O O T S

Person...

tuDies(...)tuDas(...)

setStrategy(…)

Man...

tuDas(...)

Woman...

tuDas(...)

Strategie...

tuDies(...)

Happy...

tuDies(...)

Sad...

tuDies(...)

strategy

:Woman :Happy

tuDies(...) {strategy.tuDies(...)

}setStrategy(s:Strategie) {

strategy = s}

tuDies(...) tuDies(...)

setStrategy(sad)

:Sad

3. Versuch: “Strategy Pattern”

Page 61: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Das Strategy Pattern

Page 62: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-71 R O O T S

Das Strategy Pattern: Einführung

Absicht Kapselung einer Familie von Algorithmen mit der Möglichkeit, sie beliebig

auszutauschen. Motivation

Berechnung von Zeilenumbrüchen mehrere Algorithmen können eingesetzt werden neue Varianten sollen später hinzugefügt werden können

Struktur (für obiges Beispiel)

Composition

traverse()repair()

Compositor

compose()

ArrayCompositor

compose()

TeXCompositor

compose()

SimpleCompositor

compose()

compositor.compose()

compositor

Page 63: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-72 R O O T S

Das Strategy Pattern: Anwendbarkeit und Struktur Anwendbar in folgendem Kontext

Einige ähnliche Klassen unterscheiden sich nur in gewissen Aspekten des Verhaltens. Diese können in ein Strategie-Objekt ausgelagert werden.

Verhalten ist abhängig von äußeren Randbedingungen Verschiedene Varianten eines Algorithmus werden benötigt

z.B. mit unterschiedlicher Zeit-/Platzkomplexität. Kapselung von Daten eines komplexen Algorithmus

Struktur (allgemein)

Context

contextOperation()

Strategy

algorithm()

ConcreteStrategyC

algorithm()

ConcreteStrategyB

algorithm()

ConcreteStrategyA

algorithm()

strategy

Page 64: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-73 R O O T S

Alternative Schnittstellen zwischen Kontext und Strategien1. Kontext übergibt alle relevanten Daten an die Strategie-Methode2. Kontext übergibt nur this an Strategie-Methode flexibelste Lösung3. Strategie-Objekt speichert bei Initialisierung feste Referenz auf Kontext

Implementierung von Default-Verhalten möglich In der Kontext-Klasse wird ein Default-Verhalten verwendet, wenn kein

Strategie-Objekt gesetzt ist.

ConcreteStrategyC

algorithm()

ConcreteStrategyB

algorithm()

ConcreteStrategyA

algorithm()

Das Strategy Pattern: Implementierung

default

Context

contextOperation()

Strategy

algorithm()

strategy

(Context)(T1,...,Tn)

(Context)(Context) (T1,...,Tn)(T1,...,Tn) (Context)(T1,...,Tn)

Page 65: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-74 R O O T S

Implementierung: Fallunterscheidung in Kontext

Vorteile ???

Nachteile Uneinheitliche Lösung: Kontext muss Default-Strategie kennen

...

if (strategy == null) ... default ...

else strategy.algorithm();

...

Context

contextOperation()

Strategy

algorithm()

ConcreteStrategyC

algorithm()

ConcreteStrategyB

algorithm()

strategy

Page 66: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-75 R O O T S

Implementierung: „Default-Strategie“-Klasse

Idee Jede Zuweisung "Strategy s = null;"

ersetzen durch "Strategy s = new DefaultStrategy();" Abfragen auf null und entsprechende Fallunterscheidungen löschen

Vorteile lesbarerer Code einheitliche Lösung, klare Trennung von Kontext und Strategien

...strategy.algorithm();...

... default ...Dies Variante ist als das

"Null Pattern"

bekannt.

Dies Variante ist als das "Null Pattern"

bekannt.

Dies ist das "Null Object Pattern"

Strategy

algorithm()

DefaultStrategy

algorithm()

ConcreteStrategyB

algorithm()

Context

contextOperation()

strategy

Page 67: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-76 R O O T S

Das Strategy Pattern: Konsequenzen

Konzeptuell Familie von zusammengehörigen Algorithmen Auswahl verschiedener Implementierungen desselben Verhaltens dynamische Alternative zu Unterklassenbeziehung Polymorphismus statt Fallunterscheidungen (if-then-else, switch-case) leichtere Erweiterbarkeit

Konsequenzen aus Implementierung Kontext übergibt evtl. Parameter, die nicht jedes Strategie-Objekt benötigt

this zu übergeben ist allgemeiner Zusätzliche Nachrichten zwischen Kontext und Strategie Erhöhte Anzahl an Objekten

Möglicherweise können aber Strategie-Objekte gemeinsam verwendet werden Flyweight-Pattern

Page 68: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-77 R O O T S

Prinzip Dekomposition: 2 Objekte Weiterleitung von Anfragen

Vorteile Dynamik Multiplizität Erweiterbarkeit

Strategy Pattern: Bewertung

Page 69: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Split Objects: Prinzipien

Page 70: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-79 R O O T S

Was sind also "Split Objects"?

Definition verschiedene Objekte die konzeptuell als eine Einheit agieren (schienbar) gemeinsame Identität (schienbar) gemeinsamer Zustand (schienbar) gemeinsames Verhalten Clients glauben mit einem einzigen Objekt zu interagieren

Motivation Vorausschauende Dekomposition

Aus konzeptuellem Objekt Teilaspekte (Zustand / Verhalten) extrahieren, die austauschbar sein sollen

Unvorhergesehene Komposition Zu existierendem Objekt nachträglich Teilaspekte (Zustand / Verhalten)

hinzufügen, die konzeptuell dazugehören

Page 71: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-80 R O O T S

Technik Mehrere physikalische Objekte Nur eines davon ist nach außen hin sichtbar Es stellt das Interface des konzeptuellen Gesamtobjektes zur Verfügung ... indem es die Fähigkeiten der anderen mit benutzt

Szenarien

Split Objects

TransitivitätGemeinsamkeiten Dynamik

Migrationverzögerte Erzeugung

Strategy,

State

Chain of responsibilityDecorator,

Flyweight

ProxyProxy

Page 72: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-81 R O O T S

Split Objects sind die Grundlage vieler Design Patterns Vorausschauende Dekomposition

Proxy Strategy State Flyweight

Unvorhergesehene Komposition Adapter Decorator Chain of Responsibility

Page 73: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-82 R O O T S

Gemeinsame Struktur

Aggregation Kind-Klasse ist "Ganzes" Eltern-Klasse ist "Teil" modellieren zusammen den

prinzipiellen Ablauf der Interaktion

evtl. Unterklassen modellieren Variabilität beliebige Kombination der

Instanzen

Forwarding Kind leitet empfangene Nachricht

an Eltern-Objekt weiter Grundlage für Code-

Wiederverwendung

Kind-Klasse

m()f()

Eltern-Klassem()

K_1 K_Nf()

E_1m()

E_Nm()

kindObj : K_1 elternobj : E_N

m(){

parent.m()

}

parent

Page 74: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-83 R O O T S

Beziehung zwischen Kind- und Elternobjekt

Elementare Beziehungen

Forwarding Kind leitet empfangene

Nachricht an Eltern-Objekt weiter

Subtyping Kind bietet volles Eltern-

Interface Overriding

im Kontext weitergeleiteter Nachrichten werden Methoden des Kindobjekts benutzt

... anstelle entsprechender Methoden des Elternobjekts

Zusammengesetzte Beziehungen

Resending forwarding ... ohne subtyping ... ohne overriding

Consultation forwarding ... mit subtyping ... ohne overriding

Delegation („Objektvererbung“) forwarding ... mit subtyping ... mit overriding

Page 75: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-84 R O O T S

Implementierung der Subtypbeziehung: Variante 1 Idee

Kind-Klasse ist Unterklasse

Vorteil allgemein anwendbar

Nachteil Kindklasse erbt auch die

Variablen der Elternklasse Duplizierung von Daten

Speicherverschwendung Konsistenzprobleme

Kind-Klasse

m()f()

Eltern-Klassem()

K_1 K_Nf()

E_1m()

E_Nm()

kindObj : K_1 elternobj : E_N

m(){

parent.m()

}

parent

Page 76: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-85 R O O T S

Implementierung der Subtypbeziehung: Variante 2 Idee

Kind implementiert gleiches Interface wie die Elternklasse

Eltern-Interface anstatt Eltern-Klasse in Typdeklarationen verwenden

Vorteil keine Datenduplizierung saubere Trennung

Subtyping Code Wiederverwendung

<<interface>>Eltern-Interf

m()

<<implements>>

Kind-Klasse

m()f()

Eltern-Klassem()

K_1 K_Nf()

E_1m()

E_Nm()

kindObj : K_1 elternobj : E_N

m(){

parent.m()

}

parent

Page 77: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Wie modelliert man Overriding?

Page 78: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-87 R O O T S

Man WomantuDas(...) tuDas(...)

TuDies-StrategietuDies(...)

Person tuDies(...) {this.ueben();this.tuDas();

}

Happy Sadueben(...) ueben(...)

tuDies(...)

this

tuDies(...)

this

“Schizophrene Objekte”: verschiedenes “this” in ursprünglicher Nachricht und weitergeleiteter Nachricht, obwohl

beide das gleiche konzeptionelle ein Objekt „fröhliche Frau“ ansprechen.

Strategy Pattern als Beispiel des Overriding-Problems

:Woman :Happy

strategy

tuDies(…)tuDas(…)

tuDies(...) {strategy.tuDies(...)

}

Page 79: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-89 R O O T S

Man WomantuDas(...) tuDas(...)

TuDies-StrategietuDies(...)

Person tuDies(trueSelf,…) {this.ueben();trueSelf.tuDas();

}

Happy Sadueben(...) ueben(...)

:Woman :Happy

strategy

tuDies(…)tuDas(…)

tuDies(...) {strategy.tuDies(this,...)

}

trueSelf

ueben()

tuDas()

Heureka! Heureka?

Overriding-Simulation: "this" explizit machen

Typ?!?

tuDies(...)

this

tuDies(...)

this

Page 80: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-90 R O O T S

Overriding-Simulation: Schwachpunkte

Festlegung des Typs von trueSelf “Strategy”-Klasse kann nur von “Personen” benutzt werden eingeschränkte Wiederverwendbarkeit

Festlegung welche Nachricht an trueSelf und welche an this geschickt wird Festlegung was in Unterklassen und was in Kindklassen redefinierbar ist eingeschränkte Wiederverwendbarkeit

manuelle Weiterleitung von Anfragen Fehleranfälligkeit hoher Programmieraufwand Erweiterung der Elternklassen erfordert Änderung aller Kindklassen

Änderung der Schnittstelle der Elternklasse erfroderlich Zusätzlicher trueSelf Parameter erfordert Anpassung der Aufrufe in allen

Clients der Elternklasse

Page 81: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-91 R O O T S

Alternative: Overriding-Simulation mit Instanzvarible Idee

trueSelf dem Elternobjekt im Konstruktor übergeben ... in Instanzvariable speichern

Vorteil Schnittstelle der Elternklasse bleibt unverändert Keine Folgeänderungen in Clients der Elternklasse

Nachteile Nur anwendbar wenn jedes Elternobjekt nur ein Kindobjekt hat Nicht anwendbar, wenn Nachrichten auch direkt an das Elternobjekt

geschickt werden (statt via dem gespeicherten Kindobjekt) Nicht rekursiv anwendbar

Anwendbarkeit z.B. für Simulation multipler Vererbung durch "split objects"

Page 82: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-92 R O O T S

Split Objects: Zwischen-Fazit

Grundidee Zerlegung in zwei Objekte

Techniken Code-Wiederverwendung mittels Forwarding Subtypbeziehung mittels Interfaces Overriding mittels explizitem "this" (als Parameter oder gespeichert) Je anspruchsvoller die Beziehung zwischen split objects

Resending Consultation Delegation

... um so komplexer die Implementierung

Diese Techniken bilden eine „Pattern Language“ zur Simulation von (multipler) Vererbung auf Objektebene

Page 83: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Auf "Split Objects"-Idee basierende Patterns

2. Das State Pattern

Page 84: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-94 R O O T S

Das State Pattern

Absicht Ein Objekt soll sein Verhalten ändern können, wenn sein Zustand sich

ändert. Motivation

Beispiel: Implementation vonTCP/IP

TCPConnection

open()close()acknowledge()

TCPState

open()close()acknowledge()

TCPClosed

open()close()acknowledge()

TCPListen

open()close()acknowledge()

TCPEstablished

open()close()acknowledge()

state -> open()

state

Page 85: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-95 R O O T S

Das State Pattern

Anwendbarkeit Das Verhalten eines Objekts hängt von seinem Zustand ab viele Fallunterscheidungen, die zustandsabhängig ein Verhalten

auswählen Struktur

Context

request()

State

handle()

ConcreteStateC

handle()

ConcreteStateB

handle()

ConcreteStateA

handle()

state

Page 86: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-96 R O O T S

Implementation des State Patterns

Definition der Zustandsänderungen Zustandsänderungen werden entweder im Kontext definiert ... oder (flexibler) in den Zustandsobjekten

Erzeugung von Zustandsobjekten Zustandsobjekte werden entweder einmal für den gesamten Programmlauf

erzeugt, .... oder jedesmal bei Bedarf

Verwendung von Delegation oder dynamischen Klassenänderungen in Self und Lava kann das State Pattern direkt ausgedrückt werden

Page 87: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-97 R O O T S

Das State Pattern: Konsequenzen

Modularisierung Zustandabhängiges Verhalten in eigene Klassenhierarchie ausgelagert zusammengehörige Methoden werden nach Zuständen getrennt

Explizitheit Zustandsänderungen werden explizit gemacht

Thread-Safety Zustandsänderungen sind atomar (eine Zuweisung)

Wiederverwendung Zustandsobjekte können evtl. von verschiedenen Kontexten verwendet

werden Erweiterbarkeit

neue Zustände erfordern keine / wenig Änderungen des Kontexts

Page 88: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-98 R O O T S

Implementation des Strategy und State Patterns Alternativen Schnittstellen zwischen Kontext und Strategien / States

Kontext übergibt alle relevanten Daten an die Strategie-Methode Kontext übergibt this an Strategie-Methode Strategie-Objekt speichert Referenz auf Kontext

Die letzten beiden Varianten sind flexibler sind ähnlich der vorgestellten Simulation von Overriding werfen ähnliche Fragen auf

Typ des übergebenen / gespeicherten "this" Schnittstelle von Kontext und Strategie bzw. State

:Context :State_Nalgorithm(...) algorithm( , ...) ->

trueSelf<- contextXXX()

<- setState()

Page 89: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-99 R O O T S

Simulation von Overriding: Typ von "trueSelf" = Context

algorithm(trueSelf : Context ) {trueSelf.contextInfo();...

}

statealgorithm()

contextAction()contextInfo()

setState()

Statealgorithm(Context)

Context

:Context :State_Nalgorithm(...) algorithm( , ...) ->

trueSelf<- contextXXX()

<- setState()

Page 90: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-100 R O O T S

Simulation von Overriding: Typ von "trueSelf" = CInterface

contextAction()contextInfo()

setState()

CInterface

OtherContext

...

...

:Context :State_Nalgorithm(...) algorithm( , ...) ->

trueSelf<- contextXXX()

<- setState()

algorithm(trueSelf : CInterface) {trueSelf.contextInfo();...

}

statealgorithm()

contextAction()contextInfo()

setState()

Statealgorithm(CInterface)

Context

Page 91: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-101 R O O T S

Vergleich

trueSelf : Context keine Verwendung der Elternhierarchie (States / Strategies / etc.) mit anderen

Context-Typen möglich das ist oft ausreichend

trueSelf : ContextInterface verschiedene Context-Typen die das ContextInterface implementieren sind

möglich flexibler Umstellung Variante 1 Variante 2 ist leicht:

begrenzte Änderung: trueSelf ist nur in der Elternhierarchie und dem Context bekannt mechanische Änderung: suchen und ersetzen Korrektheit: Compiler meldet, falls Ersetzung "Context ContextInterface" zu Typfehlern

führt "Erst einfache Lösung, ändern kann man immer noch." (siehe "Refactoring")

Page 92: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-102 R O O T S

Abgrenzung Strategy / State: Änderung des Elternobjektes Bei Strategy-Pattern

meist extern veranlasst Z.B. Anwendung bekommt mit, dass Verbindungsqualität schlecht ist, und

weist den Media-Player an, einen schnelleren aber niedrig-qualitativen Video-Rendering-Algorithmus zu nutzen.

Bei State-Pattern meistens intern veranlasst als Teil einer anderen Aktion, möglichst erst am Ende der Aktion! Merke: State-Pattern modelliert oft einen Zustandsautomat. Daher ist klar,

dass hier die Logik der Zustandsübergänge nicht extern bestimmt ist, sondern mit in den Zustands-Klassen modelliert wird „Wenn im Zustand … das Ereignis … auftritt und die Bedingung … wahr ist,

wird die Aktion … durchgeführt und in den Zustand … übergegangen.“ Siehe auch „Event [Condition] / Action“ –Notation in Zustandsdiagrammen

Page 93: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Auf "Split Objects"-Idee basierende Patterns

3. Simulation von Multipler Vererbung in Java

Page 94: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-107 R O O T S

Multiple Vererbung in Java

Absicht Interface und Code mehrerer "Oberklassen" wiederverwenden ... obwohl Java nur Einfachvererbung erlaubt

Motivation komplexe Klassen nicht reinmplementieren

Anwendbarkeit Interface und Code mehrerer "Oberklassen" wiederverwenden keine semantischen Konflikte zwischen "Oberklassen"-Methoden

Page 95: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-108 R O O T S

ErsetzbarkeitErsetzbarkeitSubtyping

Multiple Vererbung in Java

Struktur

m()clone()

Super_1f()

clone()

Super_2

clone()Sub

m()clone()

Super_1

f()clone()

Super_2f()

clone()

Sub

f()clone()

<<Interface>>

ISuper_2

Code reuse via

forwarding-Methoden

Overriding via gespeichertem "trueSelf"

Page 96: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-109 R O O T S

Implementation

Code-Reuse Aggregation und Forwarding protected Methoden der „Oberklasse“ müssen public deklariert werden protected Variablen der „Oberklasse“ brauchen public Zugriffsmethoden

damit sie aus der „Unterklasse“ aufrufbar sind.

Subtyping explizites "Oberklassen-Interface" ... enthält alles was in der Simulation public ist ... wird implementiert von "Oberklasse" und "Unterklasse"

Overriding gespeichertes "trueSelf„ (keine Schnittstellen-Änderung erforderlich)

im Konstruktor übergeben gespeichertes "trueSelf„ ist vom Typ "Oberklassen-Interface"

verschiedene Unterklassen möglich

Page 97: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-110 R O O T S

Implementation: Probleme

Code-Reuse keine automatische Propagierung von Änderungen des Oberklassen-

Interfaces Schutz von protected-Variablen und -Methoden aufgehoben

Subtyping Ersetzbarkeit von "Unterklasse" und "Oberklasse" für "Oberklassen-

Interface„, aber nicht von "Unterklasse" für "Oberklasse"! globale Änderung von Typdeklarationen erforderlich:

Oberklasse expr;

OberklassenInterface expr; globale Änderung von Zugriffen auf public-Variablen der "Oberklasse"

erforderlich: Oberklasse expr; expr.var;

OberklassenInterface expr; expr.getVar();

Page 98: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-111 R O O T S

Eiffel: Lösung semantischer Konflikte durch renaming

Java: Semantische Konflikte verhindern Subtyping

Multiple Vererbung: Semantische Konflikte

Super_1::clone is dClone();Super_2::clone is sClone();

deep clone shallow clone

"renaming“ (z.B. in Eiffel möglich)

m()clone()

Super_1f()

clone()

Super_2

Sub

m()clone()

Super_1

f()clone()

Super_2f()

clone()

Sub

f()clone()

<<Interface>>

ISuper_2

kann nicht beides gleichzeitig tun (gleichzeitg sowohl flach

als auch tief Klonen).

Page 99: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-112 R O O T S

Eiffel: Lösung semantischer Konflikte durch renaming

Java: Semantische Konflikte durch "schlanke interfaces" vorbeugen!

Multiple Vererbung: Semantische Konflikte

Super_1::clone is dClone();Super_2::clone is sClone();

deep clone shallow clone

"renaming“ (z.B. in Eiffel möglich)

m()clone()

Super_1f()

clone()

Super_2

Sub

m()clone()

Super_1

f()clone()

Super_2f()

clone()

Sub

f()clone()

<<Interface>>

ISuper_2

schlanker, da um clone() "abgespeckt"

Page 100: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-113 R O O T S

Implementation: Fazit

Simulation von „Multipler Vererbung“ ist am leichtesten bei neu entworfenen Programmen

„Multiples Erben" von bestehenden „Oberklassen“ ist unmöglich, wenn nicht vorbereitet aufwendig, wenn es Clients der "Oberklassen" gibt

Vorausschauender Entwurf lohnt sich keine public-Variablen Interfaces statt Klassen in Typdeklarationen "schlanke Interfaces" trueSelf-Parameter / -Variable vorsehen

Beispiel: Klasse "Thread"

Page 101: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-114 R O O T S

Background: Erzeugung von Threads durch Implementierung des Interface Runnable

Thread-Definition eigene Klasse implementiert Methode run() des Interface Runnable

kannThread-Erzeugung Übergeben einer Runnable-Instanz an Thread-Konstruktor ihre run() -Methode wird vom Thread aufgerufen von beliebiger Oberklasse Thread erben

class MyApplet extends Applet implements Runnable {Thread appletThread;public void run() { ...

}myApplet

appletThread

start() run()

public void start() { appletThread = new Thread(this);appletThread.start();

}}

Page 102: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-115 R O O T S

Thread-Design als antizipierte multiple Vererbung mit schlankem Interface

Applet::start is start()Thread::start is tstart()

run()

start()Applet

start()run()

Thread

MyApplet

start()Applet

start()run()

Threadstart()run()

Sub

run()

<<Interface>>

Runnable

Page 103: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-116 R O O T S

Wann ist multiple Vererbung überflüssig?

Wenn nur multiples Subtyping erwünscht (keine Code-Vererbung) lässt sich durch Interfaces erreichen

Wenn kein Subtyping erwünscht z.B. Stack erbt nicht das Listen-Interface ... sondern benutzt eine Liste zur internen Implementierung

Wenn Subtyping von einem schlankeren interface ausreicht z.B. Thread

Page 104: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Auf "Split Objects"-Idee basierende Patterns

4. Das Decorator Pattern

Page 105: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-118 R O O T S

Das Decorator Pattern: Motivation

Absicht vorhandenen Objekten zusätzliche Fähigkeiten geben (laut Gamme & al) Fähigkeiten vorhandenr Objekte verändern

Motivation objekt-spezifische Eigenschaften kontext-spezifische Eigenschaften modulare / unvorhergesehene Erweiterung Beispiel: GUI-Elemente

Scrollbars, Rahmen, etc. nur bei Bedarf zu TextView hinzufügen

Some applicationswould benefit fromusing objects tomodel every aspect ofthier functionality, but a naive design approach would beprohibitivelyexpensive.

For example, mostdocument editors

=+

aScrollbarDecorator

+

aBorderDecoratoraTextView

Some applications would benefit from using objects to model every aspect of thier functionality, but a naive design approach would be prohibitively expensive.

For example, most document editors

Page 106: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-119 R O O T S

Das Decorator Pattern: Idee

Veränderte oder zusätzliche Fähigkeiten ... sind zusätzliche Objekte ... mit erweiterter Schnittstelle ... zwischen ursprünglichem Objekt und Client

Context-spezifische Sicht ... entsteht durch Zugriff über verschiedene Decorators des gleichen

Objekts

aTextView aScrollbarDecorator aBorderDecorator aClient

aBorderDecorator otherClient

Page 107: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-120 R O O T S

Composite Pattern

Das Decorator Pattern: Klassenhierarchie

Vorschlag aus Gamma & al (für C++)

Decoratordraw()

VisualComponentdraw()

TextViewdraw()

decorated

draw() {decorated.draw()

}

ScrollbarDecoratorscrollPosition

draw()scrollTo()

BorderDecoratorborderWidth

draw()drawBorder()

draw() {super.draw();drawBorder();

}

aTextView aScrollbarDecorator aBorderDecorator aClient

Page 108: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-121 R O O T S

Das Decorator Pattern: Anwendbarkeit

objekt-spezifische Eigenschaften kontext-spezifische Eigenschaften

vorhandenen Objekten zusätzliche Fähigkeiten geben (laut Gamme & al) wie gesehen

vorhandene Fähigkeiten verändern (schwieriger) zusätzlich objektspezifisches Overriding realisieren

modulare / unvorhergesehene Erweiterung keine Änderung des "Hauptobjekts" erforderlich

wenn Vererbung nicht anwendbar ist

wenn die Identität des "Hauptobjekts" nicht wichtig ist siehe nächste Folie

Page 109: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-122 R O O T S

Das Decorator Pattern: Konsequenzen

Dynamik unvorhergesehene nachträgliche Erweiterung antizipierte nachträgliche Verhaltensänderung

Kleine Klassen Funktionalität wird incrementell hinzugefügt ... wenn man sie braucht! Kombinationen entstehen dynamisch statt statisch durch Vererbung

Verschiedene Objektidentität Identitäts-Tests (==) durch equals-Methode ersetzen

Viele Objekte leicht zu konfigurieren / anpassen Gesamtverhalten evtl. schwieriger zu durchschauen

Page 110: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-123 R O O T S

Das Decorator Pattern: Implementation

Erweiterung der Eltern-Schnittstelle (VisualComponent) von Elternklasse erben oder ... gleiches Interface implementieren wie Elternklasse

Eltern-Klasse (VisualComponent) "schlankes" Interface

nur was wirklich für alle Unterklassen gilt keine (wenig) Variablen

sonst werden Decorators mit irrelevantem Zustand überfrachtet (via Vererbung) Abstrakte Decorator-Klasse (Decorator)

kann weggelassen werden, wenn es nur einen konkreten Dekorator gibt

TextViewdraw()

VisualComponentdraw()

Decoratordraw()

decorated

VisualComponentdraw()

TextViewdraw()

decoratedDecoratordraw()

VisualInterfacedraw()

...

...

Interface

implementieren

Vererbung

Page 111: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-124 R O O T S

Decorator

Identität aus Client-Sicht konzeptuell: Eltern-Objekt real: Kind-Objekt

Erweiterung Kind-Objekt erweitert Eltern-

Objekt erweiterte Klasse unverändert

Typ-Konformität Erweiterung muss Subtyp sein

Strategy

Identität aus Client-Sicht konzeptuell: Kind-Objekt real: Kind-Objekt

Erweiterung Eltern-Objekt erweitert Kind-

Objekt erweiterte Klasse verändert

Typ-Konformität Erweiterung hat beliebigen Typ

Decorator versus Strategy

aBorder aText aText aBorder

Erweiterung(Decorator)

erweitertesObjekt

erweitertesObjekt

Erweiterung(Strategy)

Page 112: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-126 R O O T S

Simulation multipler Vererbung versus Decorator Simulation Multipler Vererbung

statisch Kindobjekt hat nach

Initialisierung immer gleiches Elternobjekt

„unshared“ jedes Elternobjekt hat ein

einziges Kindobjekt

Decorator Pattern

statisch Kindobjekt hat nach

Initialisierung immer gleiches Elternobjekt

„shared“ Kindobjekte teilen sich oft ein

Elternobjekt

o1:parentClasssub1:subClass

o2:parentClasssub2:subClass

o1:parentClassd2:Decorator

d3:Decorator2

d1:Decorator

Page 113: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Erweiterung und Restrukturierung Umsetzung fortgeschrittener

UML-Konzepte in „Kern-UML“ Assotiationen

Assoziationen und AssoziationsklassenUmsetzung von Assoziationen je nach ihrer Multiplizität und Navigierbarkeit

Umsetzung qualifizierter Assoziationen

Page 114: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-128 R O O T S

Assoziationen sind implizite Klassen!

... ihre Elemente

Person*

Ausleihe*

max:Person uml:Buch

tim:Person oop:Buch

xyz:Video

a11:Ausleiheperson = maxgeliehen = uml

Eine Assoziation

Buch Video

Ausleihbares Ding

... können aufgefasst werden als Instanzen einer Klasse "Ausleihe"

a12:Ausleiheperson = maxgeliehen = oop

a13:Ausleiheperson = maxgeliehen = xyz

a22:Ausleiheperson = timgeliehen = oop

a23:Ausleiheperson = timgeliehen = xyz

Page 115: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-129 R O O T S

UML, statisches Modell: Assoziationsklassen (1) Modellieren komplexe Assoziationen zwischen Klassen

Machen die implizite Klasse explizit wenn zusätzliche Attribute und Operationen der Beziehung modelliert werden müssen.

Beispiel Das Datum der Einstellung (Attribut "dateHired") Der Vorgang der Einstellung (Operation "hire")... sind Eigenschaften der Employment-Beziehung

Assoziationsklasse

Person*employer

0..1 employeeCompany

EmploymentdescriptiondateHiredsalaryhire(Person)promote(Person)

Page 116: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-130 R O O T S

Folgende Struktur auf Instanzenebene ist durch die Modellierung der Beziehung als Assoziationsklasse ausgeschlossen!

UML, statisches Modell: Assoziationsklassen-Constraint Es darf nur eine einzige Ausprägung der Beziehung zwischen zwei

Objekten geben! Z.B.: Eine Person dürfte nicht mehrere Anstellungen bei der gleichen Firma haben

Assoziationsklasse

second : Employment

john : Personibm : Company first : Employment

Person*employer

0..1 employeeCompany

EmploymentdescriptiondateHiredsalary

hire(Person)promote(Person)

Page 117: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-131 R O O T S

UML: Assoziation als eigenständige Klasse Alternative Modellierung: eigenständige Klasse statt

Assoziationsklasse Es kann nun beliebig viele Employment-Instanzen zwischen einer Person-Instanz

und einer Company-Instanz geben Mit anderen Worten: Jede Person kann beliebig oft in der gleichen Firma arbeiten

Person11

Company

EmploymentdescriptiondateHiredsalary

hire(Person)promote(Person)

**

eigenständige Klasse

Folgende Struktur auf Instanzenebene ist durch die Modellierung der Beziehung als eigenständige Klasse möglich!

john : Personibm : Company

first : Employment

second : Employment

Page 118: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-132 R O O T S

UML: Assoziation als eigenständige Klasse (2) Alternative Modellierung: eigenständige Klasse statt

Assoziationsklasse

Person11

Company

EmploymentdescriptiondateHiredsalaryhire(Person)promote(Person)

/employer

**

*0..1

Neben-Effekt "employer"-Rolle kann nun abgeleitet werden ... müsste eigentlich nicht mehr explizit angegeben werden ... außer zur Festlegung des Rollen-Namens "employer"

Notation für abgeleitete Rolle

eigenständige Klasse

Page 119: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-133 R O O T S

UML: Vergleich der Alternativen

Fallbeispiel 1: Jede Person hat pro Fähigkeit nur eine Kompetenz “Competency” als Assoziationsklasse

Person11

Company

EmploymentdescriptiondateHiredsalary

hire(Person)promote(Person)

**

Competencylevel

Person*

*Skill

Fallbeispiel 2: Eine Person hat in verschiedenen Arbeitsperioden unterschiedliche Jobs. “Employment” als eigenständige Klasse

Page 120: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Implementierung von Assoziationen

1:1, unidirektional oder bidirektional1:N, unidirektional oder bidirektional

N:M bidirektional

Page 121: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-135 R O O T S

UML: Assoziationen (Implementations-Sicht)

Varianten je nach Navigierbarkeit (uni-/bidirektional) und Kardinalität (1/*) s. nächste Folien.

Person*employer

* works-for employee

Employer-Rolle von Company in Beziehung zu Personfindet sich oft als Variablenname in der Implementierung von Person wieder:

class Person { Company[] employers;

}

Beziehungen mit unbegrenzter Kardinalität werden durch passende

"Collection"-Typen implementiert (Array, Vector, etc.).

Company

Navigations-Hinweis• in Implementations-Sicht• Hier: direkter Zugriff nur

von Person auf Company

Page 122: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-136 R O O T S

Unidirektionale Assoziation (1:1,N:1,1:N)

Unidirektionale Assoziationen sind einfach: Assoziation durch Instanzvariable in der „referenzierenden“ Klasse ersetzen. Falls die Kardinalität auf der „referenzierten“ Seite N >1 ist, sollte die Instanzvariable

eine Collection sein. Falls die Kardinalität auf der „ referenzierten“ Seite 1 ist braucht man keine

Collection (unabhängig von der Kardinalität der „referenzierenden“ Seite!)

Zoom_Aktion

zielKarte:Karte

Karte

Zoom_Aktion11

KartezielKarte

Objektentwurfsmodell vor der Transformation

Objektentwurfsmodell nach der Transformation

Page 123: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-137 R O O T S

Bidirektionale 1:1 Assoziation

Zoom_Aktion11

Karte

Zoom_Aktion

-zielKarte : Karte

+karte()+setzeKarte(k:Karte)

Karte

-zoom : Zoom_Aktion

+zoomAktion()+setzeZoomAktion(a:Aktion)

synchronized(this) {zielKarte = k;if (k.zoomAktion() != this)

k.setzeZoomAktion(this);}

synchronized(this) {zoom = a;if (a.karte() != this)

a.setzeKarte(this);}

Objektentwurfsmodell vor der Transformation

Objektentwurfsmodell nach der Transformation

: Zoom_Aktion : KartezielKarte = k;

zoom = a;

Beispiel-Instanziierung nach der Transformation

Page 124: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-138 R O O T S

Bidirektionale 1:N Assoziation

Zuweisung der Werte für ‚layerElements‘ und ‚containedIn‘ wie bei bidirektionaler 1:1 Assoziation

*1Layer LayerElement

Layer

-layerElements : Set<LayerElement>+elements() : Set<LayerElement>+addElement(le:LayerElement)+removeElement(le:LayerElement)

: Layer : LayerElement...

Objektentwurfsmodell vor der Transformation

Objektentwurfsmodell nach der Transformation

Beispiel-Instanziierung nach der Transformation

LayerElement

-containedIn :Layer

+getLayer() : Layer+setLayer(l)

Page 125: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-139 R O O T S

Bidirektionale N:M Assoziation (Naive Variante)

Problem 1: Deadlockfreies setzen von Rückreferenzen nicht mehr trivial. Problem 2 (aller bisherigen Varianten): Die Beziehung wird fest in den Klassen

verdrahtet. Das schafft zusätzliche Abhängigkeiten.

Layer LayerElement

: Layer...

Objektentwurfsmodell vor der Transformation

Objektentwurfsmodell nach der Transformation

Beispiel-Instanziierung nach der Transformation

**

Layer

-layerElements : Set<LayerElement>+elements() : Set<LayerElement>+addElement(le:LayerElement)+removeElement(le:LayerElement)

LayerElement

-containedIn : Set<Layer>

+getLayer() : Set<Layer>+addElement(le:Layer)+removeElement(le:Layer)

: LayerElement...

Page 126: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-140 R O O T S

Bidirektionale N:M Assoziation (Assoziation als Klasse)

Objektentwurfsmodell vor der Transformation

Objektentwurfsmodell nach der Transformation

Layer LayerElement

: Layer : LayerElement

Containment

- Containment[] Elements+ isContained(layer,elem)+ Containment (layer,elem)+ delete(Containment)+ layer() : Layer+ element() : LayerElement

: Containment

Containment : Class

1 111

Beispiel-Instanziierung nach der Transformation

Layer LayerElement**

Page 127: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-141 R O O T S

Qualifier gehört zur Assoziationen, nicht zu den Partner-Klassen modelliert Indizierung aus Sicht der einen Klasse Effekt: Kardinalität „am anderen Ende“ der Beziehung ist immer 0,1

Entweder gibt es kein passendes Objekt oder es ist durch den Qualifier eindeutig bestimmt

Show

Ticket

vorstellung:Datumplatz:Platz

Qualifizierte Assoziation

0..1

1

Verk

auf

Bank

Person

kontonummer

0..1

*

Kon

to

„qualifier“„qualifier“

Kardinalität nach

Qualifikation

Kardinalität nach

Qualifikation

Page 128: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-142 R O O T S

Qualifizierte Assoziation: Umsetzung

Der Qualifier „name“ wird zum Schlüssel (“key”) in der Hashtabelle.

nameScenario * 0..1 SimulationRun

Scenario

-runs:Hashtable

+elements()+addRun(simname,sr:SimulationRun)+removeRun(simname,sr:SimulationRun)

SimulationRun

- scenarios:Vector

+elements()+addScenario(s:Scenario)+removeScenario(s:Scenario)

runs

Objektentwurfsmodell nach der Transformation

Objektentwurfsmodell vor der Transformation

Page 129: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

R O O T S

Kapitel 7: Objektentwurf

Optimierung des Objektmodells

Page 130: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-144 R O O T S

Aktivitäten während des Objektentwurfs

1. Schnittstellenspezifikation Spezifikation der Schnittstellen aller Typen (Klassen und Interfaces)

2. Auswahl vorhandener Komponenten Bestimmung von Standardkomponenten zusätzliche Objekte der

Lösungsdomäne 3. Restrukturierung des Objektmodells

Umformen des Objektmodell zur Verbesserung von Verständlichkeit und Erweiterbarkeit

4. Optimierung des Objektmodells Umformen des Objektmodells unter Berücksichtigung von

Performanzkriterien, wie Reaktionszeit (z.B. der Benutzerschnittstelle) oder Speicherbedarf.

Page 131: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-145 R O O T S

Entwurfsoptimierung

Ein Objektdesigner muss einen Ausgleich zischen Effizienz, Klarheit und Allgemeinheit schaffen. Optimierungen machen das Modell undurchsichtiger. Optimierungen machen das Modell weniger erweiterbar, da sie bestimmte

Annahmen voraussetzen.

Page 132: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-146 R O O T S

Aktivitäten während der Entwurfsoptimierung1. Umordnen der Ausführungsreihenfolge

Eliminiere „tote Pfade“ so früh wie möglich. (Verwende Wissen über Verteilung, Frequenz der Pfadtraversierung)

Grenze Suche so früh wie möglich ein Überprüfe ob die Ausführungsreihenfolge von Schleifen umgekehrt werden

sollte2. Hinzufügen redundanter Assoziationen

Was sind die häufigsten Operationen? (Abfrage von Sensordaten?) Wie häufig werden diese Operationen aufgerufen? (30 mal pro Monat, alle

30 Millisekunden)3. Speichern abgeleiteter Attribute um Rechenzeit zu sparen

Achtung, Redundanz Konsistenzerhaltung erforderlich (z.B. Observer)4. Transformation von Klassen zu Attributen

Page 133: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-147 R O O T S

Implementierung von Klassen der Anwendungsdomäne Attribut oder Assoziation?

Assoziationen durch Attribute ersetzen? Mögliche Entwurfsentscheidungen

Implementiere Entität als eingebettetes Attribut Implementiere Entität als separate Klasse mit Assoziationen zu anderen

Klassen Assoziationen sind flexibler als Attribute, führen aber häufig zu

unnötigen Indirektionen

Page 134: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-148 R O O T S

Aktivitäten während der Optimierung: Reduzieren von Objekten zu Attributen Verwandle eine Klasse in ein Attribut, wenn get() und set() die einzigen

Methoden sind, die von ihr definiert werden.

Person SocialSecurityID:String

PersonSSN:String

Page 135: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-149 R O O T S

Entwurfsoptimierungen: Speichern von abgeleiteten Attributen (Zwischen-)speichern abgeleiteter Attribute

z.B.: Definition einer neuen Klasse um Daten lokal zu speichern (Datenbankcache)

Problem von abgeleiteten Attributen Abgeleitete Attribute müssen auf den neusten Stand gebracht werden,

wenn sich der Basiswert ändert. Es gibt drei Möglichkeiten, mit diesem Problem umzugehen:

Expliziter Code: Der Programmierer bestimmt die betroffenen abgeleiteten Attribute (push)

Regelmäßige Neuberechnung: Abgeleitete Attribute werden gelegentlich neu berechnet (pull)

Active value: Ein Attribut kann eine Menge von abhängigen Attributen bestimmen, die automatisch auf den neusten Stand gebracht werden wenn sich der „aktive Wert“ (active value) ändert. (event notification, data trigger)

Page 136: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

Aktivitäten während der Optimierung: Teure Operationen erst bei Bedarf

image

1 0..1ImageProxy

filename:Stringwidth()height()paint()

Imagefilename:Stringdata:byte[]width()height()paint()

Imagefilename:Stringwidth()height()paint()

RealImagedata:byte[]width()height()paint()

Page 137: Kapitel 7. „Objektentwurf“ - Software engineering · 2018-02-08 · Kapitel 7. „Objektentwurf ... Analyse- und Systemmodell zu implementieren sowie die begründete Auswahl zwischen

© 2000-2010 Dr. G. Kniesel Vorlesung „Softwaretechnologie“ (SWT) Seite 7-151 R O O T S

Zusammenfassung

Der Objektentwurf schließt die Lücke zwischen Anforderungen und bestehendem System.

Der Objektentwurf bezeichnet den Prozess, in dem dem Ergebnis der Anforderungsanalyse und des Sysementwurfs Details hinzugefügt und Implementierungsentscheidungen getroffen werden.

Der Objektentwurf beinhaltet1. Die Spezifikation von Schnittstellen (Signaturen, DBC, Behav. Protocols)2. Die Auswahl von Komponenten3. Die Restrukturierung des Objektmodells4. Die Optimierung des Objektmodells