homeSoftwaredesign Softwaredesign: Problemlösung mit Entwurfsmustern Prof. Dr. Uwe Schmidt FH Wedel

Problemlösung mit Entwurfsmustern

weiter

weiter

Systementwurf

Aufgabe
Zerlegung eines Systems in Objekte
weiter
Einflüsse
Kapselung
Granularität
Abhängigkeiten
Flexibilität
Effizienz: Speicher, Laufzeit
Wiederverwendbarkeit
merke
Einfachheit
weiter
merke
Gegensätzliche Anforderungen
weiter
merke
Einfachheit durch Abstraktion erreichen
 
Etwas, was im Programm festgeschrieben ist, zu Daten machen
weiter
Granularität
hoch
viele kleine, einfache Klassen
viele kleine, einfache Objekte
niedrig
wenige große, komplexe Klassen
wenige große, komplexe Objekte
weiter
Beispiele
weiter

weiter

Schnittstellen

Signatur
einer Operation:
Name + Parameterart + Art des Resultats
weiter
Schnittstelle
eine Menge von Signaturen für die Operationen
weiter
Typ
in der objektorientierten Welt:
ein Name für eine Schnittstelle
weiter
merke
ein Objekt kann viele Schnittstellen (Typen) besitzen
weiter
merke
sehr unterschiedliche Objekte können gemeinsame Schnittstellen (Typen) besitzen
weiter
Subtyp
ein Typ ist ein Subtyp eines anderen Typs, des Supertyps, wenn seine Schnittstelle die des Supertyps enthält
weiter
in Java
Interfaces, abstrakte Klassen, konkrete Klassen definieren eine Schnittstelle (einen Typ)
weiter
merke
Klassen und Interfaces definiere Typen
merke
ein Objekt hat im allgemeinen mehrere Schnittstellen
merke
einer Referenzvariablen ist genau ein Typ, eine Schnittstelle zugeordnet
dynamisches Binden
berechnet die zu einer Signatur gehörige Methode zur Laufzeit aus der Art des Objekts
weiter
Polymorphie
Vielgestaltigkeit
einer Signatur sind in unterschiedlichen Klassen unterschiedliche Methoden zugeordnet
weiter

weiter

Unterschied: Klasse <--> Typ

konkrete Klasse
definiert internen Zustand
legt fest, wie etwas berechnet wird
weiter
Typ
legt Schnittstelle fest
Aufrufkonvention
legt fest, wie etwas verwendet wird
weiter
merke
jede Klasse definiert aber auch einen Typ
weiter
Klassenvererbung
Implementierung wird vererbt und erweitert oder modifiziert
weiter
Schnittstellenvererbung
nur Erweiterung von Typen
weiter
Mehrfachvererbung
für Schnittstellen sehr nützlich (notwendig)
für Klassen zweifelhaft
weiter
C++ und Eiffel
keine syntaktischen Unterschiede zwischen Klassen und Schnittstellen
weiter
Java
class X { ... }
interface I { ... }
weiter
Klassenvererbung
ermöglicht Wiederverwendung und Modifikation von Algorithmen und Datenstrukturen ohne Kopieren von Quelltexten
weiter
Schnittstellenvererbung
Das Beerben von abstrakten Klassen und Interfaces ermöglicht die Implementierung von Familien von Objekten mit identischen Schnittstellen
weiter
identische Schnittstellen
gleichförmige Verarbeitung
keine Fallunterscheidungen
weiter
richtige Vererbung
alle Unterklassen besitzen gleiche gemeinsame Schnittstelle
weiter
gut
Klienten wissen nichts über die interne Struktur der Objekte
kennen nur die Schnittstelle oder abstrakte Klasse
gut
Implementierungsabhängigkeiten zwischen Subsystemen werden reduziert
weiter
Referenzvariablen immer nur vom Typ einer abstrakten Klasse
Konstruktoraufrufe von konkreten Klassen immer indirekt über erzeugende Funktionen
Erzeugungsmuster
weiter
Beispiele
weiter

Letzte Änderung: 02.11.2016
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel