Objektorientierte-Softwareentwicklung und Objektorientertes-Design sind Methoden um komplexe Systeme zu strukturieren.(Wohl auch die momentan am populärsten und am wenigsten verstandenen.)
Die Grundlegende Idee ist, das man real existierende Objekte (zb. ein Flugzeug) versucht in Software abzubilden. Man benutzt dabei die folgenden Tatsachen:
- Mensch hat eine Vorstellung von einem Flugzeug im Kopf.
- Ein Mensch kann dem Wort "Flugzeug" wenn er es hört oder liest denn Begriff eines Flugzeuges zuordnen.
- Ein Mensch kann das Bild eines Flugzeugs erkennen.
Es gibt natürlich verschiedene Menschen mit verschiedenen Warnehmungen. Aber in der Regel sind diese Fähigkeiten vorhanden. Näheres dazu unter Platos Höhlengleichnis auf meiner Philosophie Seite.
Diese Fähigkeiten des Menschen nutzt man nun aus um Software zu entwickeln und zu strukturieren. Allgemein ist dies eine Möglichkeit, die Komlexität die immer mit der Entwicklung von Software verbunden ist zu reduzieren. Als konkretes Beispiel der Implementierung eines Objektes als Software sei wieder das Flugzeug herangezogen.
Flugzeug.Geschwindigkeit_Berechnen;
Man erkennt leicht, was dieses Zeile des Programmes tut. (Es wird die Geschwindigkeit des Flugzeuges berechnet.)
Wie kommt man zu solchen Strukturen in der Software?
- Man erzeugt eine Datenstruktur mit dem Namen Flugzeug.
- In der Datenstruktur Flugzeug ist die Methode Geschwindigkeit_Berechnen aufgehängt. Diese Methode stellt klassisch betrachtet ein Unterprogramm dar. Bei einem klassischen Unterprogramm Aufruf muß ich aber die Parameterversorgung sicherstellen. Diese wird aber nun durch das Objekt definiert. Ich erzwinge damit, eine Zuordnung zwischen Datensatz und Unterprogramm.
- In der Datenstruktur Flugzeug sind folglich auch alle Parameter (Attribute) welche die Eigenschaften des Flugzeuges definieren aufzuhängen.
Der Parameter, welcher die Geschwindigkeit des Flugzeuges definiert würde dann wie folgt aussehen:
Flugzeug.Geschwindigkeit;
Es gibt also in der Struktur Flugzeug eine Variable Geschwindigkeit.
Man erkennt an diesem Beispiel sehr schön, wie durch die Verwendung von sprechenden Namen eine leichte Lesbarkeit und Verständlichkeit der Software entsteht. Desweiteren entsteht eine Gliederung, durch die Zuordnung von Attributen (Parameter) und Methoden (Unterprogrammen) zu Objekten.
Diese Gliederungsmöglichkeit ist praktisch immer gegeben. Unabhänging von der Programmiersprache.
Wenn man Methoden wie Information-Hiding bzw. Kapselung einsetzen will, die fundamentale Software-Enginering Methoden darstellen, muß man natürlich höhere Anforderungen an die Programmiersprachen stellen.
Kommentare zur Vererbung:
Als eine der wichtigsten Errungenschaften der objektorientierten Softwareentwicklung wird allgemein die Vererbung angesehen. Hier mal eine Wahrnung:
Durch Vererbung entstehen Abhängigkeiten die der Idee der Datenkapselung entgegenstehen. Datenkapselung ist ein Konzept, um durch klare Abgrenzung ein System in den Griff zu bekommen. Man will sicherstellen, daß Änderungen an einer Komponete des Softwaresystems möglichst nicht auf andere Componente des Systems durchschlagen bzw. die Auswirkungen möglichst gering sind. Hat man eine große Vererbungshierarchie so werden Änderungen in allen darunterliegenden Komponenten sichtbar. Deshalb der folgende Tipp:
Vermeidet Vererbung!
Will man aber Konzepte wie Polymorphie einsetzen ist es natürlich sehr hilfreich auf das Mittel der Vererbung zurück zu greifen (z.b. zum Vermeiden von änderungsunfreundlichen case Statements oder dem Einsatz von abstrakten Datentypen). Hilfreich ist es wenn man in diesen Fällen die Hierarchie flach hält. Wenn möglich nur eine Vererbungsstufe verwenden oder auf erprobte Pattern zurückgreifen.
|