Objekt Orientierte Programmierung
Unterpunkte dieser Seite
Einleitung
Objekt Orientierung
Vererbung
Fehler in der Begriffswahl
Einleitung
Polymorphie ist etwas anderes als Vererbung ! Des weiteren gibt es viele Dinge, die man noch über die Objektorientierung lernen kann.
Objekt Orientierung
Objekt Orientierung umfasst Bildung von Objekten. Objekte müssen nicht immer aufs neu formuliert werden, sondern können durch Klassen beschrieben werden, die Schablonen für Objekte darstellen. Die Objektorientierung fordert auch die Existenz von Klassen. Des weiteren muss es Vererbung zwischen Klassen geben, damit man von Objektorientierung sprechen kann.
Das Konzept des ADTs enthält die Bildung von Objekten und Klassen, da ein ADT Attribute und Methoden bündelt und als vorlage vieler Objekte diene kann. Es gibt zwischen ADTs jedoch keine Vererbung, wodurch man nicht von Objektorientierung sprechen darf.
Vererbung
Vererbung ist syntaktisch durch die jeweils verwendete Programmiersprache exakt definiert. Die Semantik, also der Grund aus dem ein Programmierer eine Vererbung vorgenommen hat, ist jedoch nicht klar definiert. Man kann Ableiten um... :
- ... vorhandenen Quellcode bei der Implementierung wieder zu verwenden.
- ... "is a" oder "part of" Beziehungen (schon während des Entwurfs) darzustellen.
Unter den Puristen und den Softwaretechnikern sollte Vererbung nur aus dem zweiten Grund verwendet werden, da der erste Verwendungszweck zwar Redundanz verhindert (und damit Wartung und Fehlersuche vereinfacht) aber zu schwerverständlichen Quellcodes führt, hinter denen kein offensichtlicher Sinn für einen Leser zu erkennen ist.
Mit ADTs ist es möglich eine "part of" Beziehung zu programmieren. Die Vererbung der Objektorientierung ermöglicht die Programmierung einer "is a" Beziehung.
"is a" bedeutet ist ein und sagt aus, das eine Unterklasse überall dort verwendet werden kann, wo ihre Oberklasse gefordert ist. Eine Unterklasse kann immer mindestens soviel wie ihre Oberklasse. Sie hat auch immer mindestens soviele Eigenschaften wie ihre Oberklasse.
"part of" bedeutet das Teil ist ein Bestandteil in einem größeren Gebilde. Ein Auto als großes Gebilde, besteht aus Reifen und einem Motor, wobei die Teile selber wieder Objekt bzw. Klassen sind.
Begriffe in einer Vererbungshierarchie
"is a", abgeleitet von (derived from), Spezialisierung (die Unterklasse ist eine Spezialisierung ihrer Oberklasse), sub class (Unterklasse), base classs (Oberklasse), super class (Oberklasse, für C++ Programmiere nicht üblich).
Fehler in der Begriffswahl
Dieser Abschnitt ist sicherlich Geschmackssache und gibt viel Diskussionsstoff her. Ich möchte auf keinen Fall zu Definieren anfangen oder meine Meinung als die einzig wahre veröffentlichen. Tatsächlich stammen die Meinungen in diesem Abschnitt nicht mal von mir sondern aus den Skripten der Vorlesungen, die ich besucht habe. Der Sinn dieses Abschnitts liegt vielmehr darin, sich die Gedanken anderer Leute durchzulesen um zu erkennen, welche Themen relevant sind und worauf man Achten sollte um gute Objektorientierte Programme schreiben zu können. Der Denkanstoss liegt also im Vergleich der eigenen Meinung mit den Meinungen anderer. Ganz nach dem Motto "Krieg ist der Vater vieler Dinge".
Meinung: Vererbung ist ein schlecht gewählter Begriff für das Konstrukt der OOP
Vererbung im Biologischen Sinne: Ein Merkmal wird genetisch an den Nachfahren weitergegeben, nachdem das Merkmal entweder von der mütterlichen oder der väterlichen Seite her den Wettstreit um die Vererbung gewonnen hat. Das Merkmal wird nicht exakt übernommen, sondern ist durch Mutationen oder sonstige Umwelteinflüsse verändert beim Nachfolger angekommen. (Der Zufall spielt eine Rolle) Der Nachfolger kann sich nicht frei entscheiden, welche Eigenschaften er übernehmen oder Ändern möchte, er wird einfach bedient.
In der OOP wird ein Merkmal direkt (ohne Veränderung) an die Unterklasse weitergegeben. Es gibt keine Wettkampf zwischen mehreren Oberklassen (Den gibt es zwar bei Mehrfachvererbung wirklich, er wird aber durch ein Regelsystem direkt eindeutig entschieden). Der Nachfahre kann die geerberten Eigenschafte überschreiben. Er hat damit wirklich eine Entscheidungsfreiheit und kann die Dinge beeinflussen.
Vererbung im rechtlichen Sinne: Ein Gegenstand oder ein Gedankengut wechselt den Besitzer und wird unverändert an diesen Übertragen. Der Besitzer existierte bevor die Vererbung vorgenommen wurd und ist hinterher nur reicher an einem bestimmten Gut. Der Besitzer des vererbeten Gegenstandes wechselt also vom Erbgeber zum Erben. Der Erbgeber ist nicht mehr im Besitz des Gegenstandes, nachdem die Vererbung vorgenommen wurde.
In der OOP wird ein Merkmal nicht von der Ober- zur Unterklasse vertauscht, sondern eher dupliziert. Die Oberklasse besitzt die vererbten Methoden immer noch. Die Unterklasse besteht nicht bereits vor der Vererbung, sondern wird erst durch die Vererbung erzeugt.
Meine Meinung:
Wenn man unter Vererbung die weitergabe von bereits existierendem an eine Unterklasse versteht, so ist Vererbung ein sinnvoller Begriff. Wenn man vererbung wörtlich nimmt, was ein Neuling wahrscheinlich tut, so ist der Begriff falsch gewählt. Wie sollte jedoch dieses Konstrukt genannt werden, wenn nicht Vererbung ? Es ist nicht einfach einen passenderen Begriff zu finden.
zum Seitenanfang
zur Hauptseite
Letzte Änderung: 10.06.2006