OOD
Introduction
Software ist heutzutage gekennzeichnet durch
- die Erfordernis eines langen Lebenszeitraums
- Komplexität, die für einen einzelnen Entwickler nicht zu überschauen und zu realisieren ist.
Die Komplexität hat ihre Ursachen in der Komplexität der Problemdomäne (Funktionalität, Evolution, Performance, Kosten, Verlässlichkeit), den Schwierigkeiten den Entwicklungsprozess zu steuern, fehlende Standards bzgl. Softwarekomponenten und der Komplexität diskreter Systeme. Der entscheidende Faktor zur Beherrschung der Komplexität ist nicht die Implementierung, sondern das Design.
Der Sinn von Modellierung und Design wird sehr gut an dem Beispiel des Hundehütten-, Haus- und Hochhausbau aus klar. Eine Hundehütte läßt sich noch relativ leicht from the scratch bauen, ein Hochhaus nicht. Modelle erleichtern die Kommunikation und ermöglichen Verständnis, das ohne Modell nicht möglich wäre.
Um Ordnung in die vorhandene Komplexität zu bringen, gibt es drei Ansätze: Strukturelles Design bzw. Moderne Strukturelle Analyse SAD, Data-driven Design und Objekt-orientiertes Design.
Booch beschreit den objekt-orientierten Ansatz wie folgt:
Object-Oriented Analysis (OOA) bzw. Object-Oriented Modelling (OOM) ist eine Analysemethode, die als Perspektive Klassen und Objekte nimmt. Unter Object-Oriented Design (OOD) wird eine Methode verstanden, die im Gegensatz zum strukturierten Design auf objekt-orientierter Dekomposition beruht. Sie ist eine Notation um den logischen (Klassen- und Objektstruktur), physikalischen (Modul- und Prozessstruktur), statischen und dynamischen Anteil zu beschreiben. Object-Oriented Programming (OOP) ist eine Implementations-Methode, bei der Programme als eine kooperierende Sammlung von Objekten organisiert sind, die jeweils eine Instanz einer Klasse darstellen, und deren Klassen Elemente einer Vererbungshierachie sind. Eine Sprache heißt objekt-orientiert, wenn:
- sie Objekte unterstützt, die Datenabstraktionen mit einem Interface von benannten Operationen sind und einen versteckten Status haben (sie Objekte benutzt und nicht Funktionen)
- Objekte einen Typ (Klasse) haben
- Typen Attribute von Supertypen erben können.
Sprachen, die Vererbung nicht unterstützen, heißen objekt-basiert oder Sprachen mit abstrakten Datentypen. Allgemein läßt sich sagen, daß nach einer OOA ein OOD erfolgt, welches mit OOP umgesetzt wird.
Objekt-Orientierung bedeutet die Verwendung von Objekten und Klassen bei der Analyse, dem Design und der Implementierung. Die Aufgabe beim objekt-orientierten Design besteht darin, relevante Objekte zu finden, sie in Klassen mit der richtigen Granularität abzubilden, die Schnittstellen der Klassen und ihre Hierachie zu definieren und ihre Beziehungen zu bestimmen. Das Design soll zum spezifischen Problem passen, aber trotzdem allgemein genug sein um zukünftige Anforderungen zu ermöglichen. Anders ausgedrückt wird ein Problem aus der Sicht von Objekten und ihrer Interaktion betrachtet.
Welche Objekt- und Klassenstruktur gewählt wird hängt von dem zu lösenden Problem und der davon abhängigen Sichtweise ab. Ein System kann prinzipiell nach unterschiedlichen Gesichtspunkten analysiert und beschrieben werden.
Im Zusammenhang mit OOA/D muß man zwischen der Modellierungssprache und dem eigentlichen Analyse- und Designprozess unterscheiden. Fowler schlaegt in seiner Einleitung folgende Begrifflichkeit vor: eine objekt-orientierte Methode besteht aus einer Modellierungssprache und einem Modellierungsprozess. Die Modellierungssprache ist eine Notation mit der die Analyse bzw. das Design dargestellt wird. Die Prozess ist die eigentliche Analyse bzw. das Design. Oft sprechen Leute davon, dass sie Methode X verwenden, meinen aber das sie Modellierungssprache X verwenden. Der Prozess wird zudem in Büchern sehr oft sehr kurz gehalten. Dieses Dokument versucht beide Aspekte gleich ausführlich zu behandeln. Beispiel für eine Modellierungssprache ist die UML, die auch hier beschrieben wird. Die drei Amigos (Booch, Rumbaugh und Jacobsen) sind gerade dabei auch den Prozess zu standardisieren, der ursprünglich Objectory heute aber Rational Unified Process genannt werden wird.
===Vorteile Die Vorteile des OOD sind:
- Evolutionsfähigkeit (z.B. über Vererbung), weil komplexe Systeme über stabile Zwischenzustände wachsen
- es gibt eine klare Trennung zwischen der Implementierung (einer Klasse) und den clients (einer Klasse)
- Erweiterbarkeit (z.B. durch Vererbung)
- Änderungsfreundlichkeit
Bei einer objekt-orientierten Struktur ist es leichter ein neues Element hinzufügen. Ein Beispiel hierfür wird von Brad Cox angeführt, und zwar ein Programm, welches Büroobjekte wie Notizen, Umschläge oder Ordner verwaltet. Realisiert man z.B. ein Schreibtisch als Container-Objekt, so läßt sich leicht ein neues Objekt, welches zum Design-Zeitpunkt noch nicht berücksichtigt wurde, integrieren, u.U. ohne neu zu compilieren. Die im Container enthaltenen Objekte wiederum legen ihre Darstellung selber fest.
- Abbildung der Realität d.h. Objekte sollten Konzepte der Realität abbilden. Dadurch ist es möglich, das Modell mit Menschen zu diskutieren, die von Programmierung oder Software-Design nichts zu tun haben.
- OOD (speziell OMT) unterstüzt den gesamten Software-Lebenszyklus
- schnellere Entwicklung
- Vereinfachung von Software-Reuse