Objektorientiertes Design

Slides:



Advertisements
Ähnliche Präsentationen
Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
Advertisements

Objektorientierte Programmierung
Rollenbasierter Entwurf am Beispiel eines benutzeradaptierbaren Hyperbooks Institut für Informatik Rechnergestützte Wissensverarbeitung Universität Hannover.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Kritische Betrachtung
Die Definitionsphase -Objektorientierte Analyse - Das statische Modell
Kapitel 4 Datenstrukturen
Christian A. Kopf Institut für Informatik FU Berlin Episode Recognizer Framework - Rahmenwerk zur Episodenerkennung.
Design Patterns- Entwurfsmuster
Objektorientierter Entwurf (OOD) Teil 3: Qualitätsmodell
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Cassey - Common Answer Set Evaluation sYstem Jean Gressmann Benjamin Kaufmann Robert Lenk.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
Explizite und editierbare Metainformationen für Software Muster.
Remote Methode Invocation (RMI)
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Software Design Patterns Creational Patterns Structural Patterns Behavioral Patterns –Behavioral Class Patterns Interpreter Template Method Pattern –Behavioral.
Dependents, Publish-Subscribe, Listener
Entwurfsmuster EDV Entwurfsmuster.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Forschungszentrum Informatik, Karlsruhe Objektorientierte Systeme unter der Lupe Markus Bauer Oliver Ciupke.
Visualisierung objektrelationaler Datenbanken
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Einführung in die Programmierung
Unified Modeling Language Repetition / Einführung zu UML
Typo3 Templates und TypoScript
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Dynamische Datentypen
UML-Kurzüberblick Peter Brusten.
Paradigmenwechsel in der Unternehmensmodellierung Prof. Dr. Wolfgang Voigt Dipl.-Ing. Päd. Alexander Huwaldt UML Extrakt UML Seminar, Chemnitz
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Software Design Patterns
2 Datenabstraktion Geheimnisprinzip:
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Modellierung der Wirklichkeit
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Folie 1 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik- -Matrikel LABORPRAKTIKUM- SOMMERSEMESTER 2005 „Umsetzung von Pattern“ Muster:
Design Pattern1 Motivation Entwurfsmuster Entwurf wiederverwendbarer objektorientierter Software schwer gute Entwürfe entstehen durch Wiederverwen- dung.
Abstrakte Klassen und das Interface-Konzept
Strategy Pattern Teachlet Autor: Sven Wende Replay durch Stephan Schwake Konzepte objektorientierter Programmiersprachen, SS 2006.
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Tutorium Software-Engineering SS14 Florian Manghofer.
THOMAS HANNEFORTH C++ IN DER CL II. GRUNDLEGENDE THEMEN Objektkonstruktion/ Objektdestruktion/ Zuweisung Objekte, Zeiger und Referenzen Wert und Referenzaufruf.
© Tenbusch Oberstufenzentrum Informations- und Medizintechnik Objektorientierte Programmierung mit Java.
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
Implementieren von Klassen
 Präsentation transkript:

Objektorientiertes Design Clemens Haindl

Inhalt Vererbung & Co. Konsistenz Überladen von Operatoren Frameworks & Entwurfsmuster

Abstraktion Gemeinsame Eigenschaften mehrerer Klassen in einer gemeinsamen Superklasse implementieren Klassen nicht überspezialisieren: Eine Klasse soll eine Menge von Objekten beschreiben Verschiedene Klassen müssen sich in ihrem Verhalten unterscheiden, nicht nur in konstanten Werten. Es ist besser, ein Modell zunächst mit weniger spezialisierten Klassen und virtuellen Methoden zu implementieren und dieses bei Bedarf zu erweitern, als umgekehrt.

Vererbung Die Anwendung von identischen Operationen auf Objekte unterschiedlichen Typs ist kein legitimer Grund für die Erzeugung von Unterklassen zur Behandlung jedes einzelnen Typs. Beispiel: Listen Alternativen: Dynamische Bindung (.NET) bzw. Templates (C++)

Kopplung Die Kopplung ist ein Maß für die gegenseitige Abhängigkeit von Klassen. Je mehr Interaktionen zwischen zwei Klassen stattfinden, desto stärker sind sie aneinander gekoppelt. Unterklassen stehen oft erweiterte Möglichkeiten zur Kopplung an die Superklasse zur Verfügung. Eine Reduktion der Kopplung erhöht i.a. die Les- und Wartbarkeit des Codes.

Folgerungen Auch wenn ein Problem mit Vererbung lösbar ist, existieren möglicherweise bessere Lösungen, die ohne den Einsatz von Vererbung auskommen. …oder allgemeiner: Neue mächtige Features in höheren Sprachen verführen den Programmierer beständig zu ihrem Einsatz, weshalb dieser umso mehr dazu angehalten ist auch herkömmliche Lösungswege nicht außer acht zu lassen.

Inhalt Vererbung & Co. Konsistenz Überladen von Operatoren Frameworks & Entwurfsmuster

Konsistenz - Konstruktoren Default-Werte für Felder auch als solche angeben, und nicht in den default-Konstruktor auslagern. Ein Konstruktor soll ein Objekt in einem wohldefinierten Zustand hinterlassen. Negativ-Beispiel: Nicht initialisierte Felder (besonders Public) bedeuten die ständige Gefahr einer NPE.

Konsistenz - Nachvollziebarkeit Logische vs. physische Sicht Logischer Bereich so intuitiv und Robust wie möglich Physischer Bereich soll trotz Transparenz nachvollziehbar bleiben „Überraschungen“ vermeiden - Beispiel: Zwei überladene Methoden sollen Daten unterschiedlichen Typs in Dateien schreiben. Erwartung: Die Dateien werden im selben Modus geöffnet.

Invarianten Sind Konsistenzbedingungen auf Klassenebene Sollen identifiziert und explizit aufrechterhalten werden. In Klassen mit erhöhter Robustheit empfiehlt sich die Prüfung der Invarianten am Anfang und am Ende jeder Methode (assert) Entsprechen in ihrer Funktion Constraints in relationalen DB-Systemen.

Redundanz Tritt auf, wenn Daten mit der selben Bedeutung an verschiedenen Stellen mehrmals gespeichert werden Identische Codesequenzen mit der selben Aufgabe mehrfach implementiert werden Stellt eine Gefahr für die Konsistenz dar (wie bei relationalen DB-Systemen) Abhilfe: Keine Daten speichern, die nie benötigt werden. Mehrfach benötigte Codesequenzen in Methoden auslagern.

Inhalt Vererbung & Co. Konsistenz Überladen von Operatoren Frameworks & Entwurfsmuster

Allgemeine Regeln Die Bedeutung eines überladenen Operators soll der in der Sprache üblichen Bedeutung entsprechen. Ein überladener Operator muss mit allen anderen vorhandenen Operatoren korrekt interagieren: Vorrangregeln, Kommutativ-, Assoziativ- und Distributivgesetz Konsistenz!

Mögliche Problemquellen Diverse Konvertierungen Mehrdeutige Überladungen Default-Argumente Konstruktoren Vererbung Beispiel: FileArray

Inhalt Vererbung & Co. Konsistenz Überladen von Operatoren Frameworks & Entwurfsmuster

Anno 1996 „It remains unclear how frameworks designed by different teams, probably in different languages, can interoperate.“ .NET-Lösung: CTS und CL-Compiler für möglichst viele Sprachen, Remoting CORBA-Lösung: Language bindings. Ermöglicht plattformunabhängige Interprozesskommunikation The fragile base-class problem might overthrow fundamental network design decisions: changes in base classes of a framework can fracture numerous classes inheriting from them.“ .NET-Lösungsversuch: Versionierung von Assemblies, virtual – new/override Schlüsselwörter

Hot-Spot-Driven Design Methode zur Entwicklung von Frameworks. Ausgangspunkt: Ausgereifte objektorientierte Abstraktion. Basiert auf der Identifizierung und anschließender Flexibilisierung von Hot-Spots im objektorientierten Modell Erfordert domain expert knowledge (Abstraktion)

Identifizierung von Hot-Spots Problem: Kommunikation zwischen Programmierer und domain expert. Hilfreich: Hot-Spot Cards Ermöglichen die Darstellung der Anforderungen an das Framework in einer Form, die sowohl domain expert, als auch der/die Programmierer verstehen können

Beispiel: Hot-Spot Card Hot-Spot Name Erforderliche Flexibilität: Änderung ohne Neustart (Ja/Nein) Änderung durch User (Ja/Nein) Semantische Beschreibung Funktion: Beschreibung des Verhaltens in Beispielsituationen Daten: Beispieldaten

Implementierung - Daten Datenobjekte werden als neue abstrakte Klassen implementiert. Problem 1: Datenobjekte werden schon auf Hot-Spot Cards oft falsch abstrahiert Problem 2: Daten Hot-Spot Cards geben keine direkte Auskunft über die Schnittstelle der abstrakten Klasse. Weitere (domain-spezifische) Informationen sind dafür meist erforderlich.

Implementierung - Funktion Funktionen werden als sog. Hook-Methoden implementiert: Die Methode, in der die Funktion benötigt wird, entspricht dem Entwurfsmuster „Schblonenmethode“. In ihr wird die Hook-Methode aufgerufen. Soll die Funktion geändert werden, wird dem Entwurfsmuster entsprechend nur die Hook-Methode überschrieben.

Methodenaustausch zur Laufzeit Ist eine Verhaltensänderung während der Laufzeit erforderlich, so erhält die Schablonen- Klasse ein Feld vom Typ einer abstakten Hook-Klasse mit einer neuen abstrakten Hook-Methode, welche in den Unterklassen implementiert wird. Diese Methode wird von der ursprünglichen Hook-Methode aufgerufen. Da neue Unterklassen der Hook-Klasse aber jederzeit nachgeladen und dem Feld zugewiesen werden können, ist somit auch ein Austausch der neuen Methode währen der Laufzeit möglich.

Literatur Tom Cargill: C++ Programming Style. Addison-Wesley, 1992 Wolfgang Pree: Framework Patterns. SIGS Publications, 1996 Gamma, Helm, Johnson, Vlissides: Entwurfsmuster. Addison-Wesley, 1996