OOP in PHP – Teil 8: Vererbung Grundlagen

Bei Vererbung denken wir zuerst an die Genetik – und das ist auch richtig so. Wir menschen vererben unsere Eigenschaften teilweise an unsere Nachkommen weiter. Und genau dieses Prinzip können wir auch in unseren Programmen verwenden. Wie das funktioniert und warum wir das überhaupt machen schauen wir uns in diesem mehrteiligen Artikel ausführlich an. Aufgrund der Ausmaße des Themas habe ich mich entschieden, der Vererbung mehrere Artikel zu widmen.

 Vererbung? Genetik? Häh?

Für das Grundverständnis sollten wir uns zuerst einmal klar machen, was Vererbung in der Programmierung eigentlich ist. Und warum es so heißt.

In der heutigen Zeit dürfte ein Beispiel aus der Welt der Smartphones relativ geläufig sein. Moderne Smartphones können schon sehr viel, werden aber immer wieder durch Zubehör noch erweitert – sei das nun eine Schutzhülle, ein externer Lautsprecher oder eine Infrarotkamera. Alle Zubehörteile haben jedoch gemeinsam, dass sie ohne das Smartphone nicht funktionieren. Sie erweitern also die vorhandene Funktionalität des Smartphones um gewisse Eigenschaften.

Übertragen wir dieses Beispiel nun in die Programmierung sehen wir uns einem ähnlichen Bild gegenüber. Wir entwickeln eine Klasse mit einer bestimmten Funktionalität. Die Funktionalitäten dieser Klasse können wir nun mithilfe der Vererbung an eine Kindklasse weitergeben. Allerdings kann diese Kindklasse auch ihre eigenen Funktionalitäten besitzen.

Klingt trocken, oder? Sehen wir uns ein Beispiel an, dass sich durch diesen Artikel ziehen wird.
Zuerst die Definition von zwei Klassen: Auto und BMW. BMW leitet hierbei von Auto ab.

Schauen wir uns die beiden Klassen zuerst getrennt voneinander an.

Auto hat ein Attribut $tueren (welches logischerweise festlegt, wie viele Türen das Auto besitzt) und eine Methode fahren(). Jedes Objekt vom Typ Auto hat also Türen und kann fahren.

BMW hat ein Attribut $garantie (also die Garantielaufzeit in Jahren) und eine Methode automatisch_parken().  Nun kann unser BMW also parken und hat Garantie, kann jedoch weder Fahren noch haben wir Türen um einzusteigen.

Allerdings ist unser BMW natürlich ein Auto, daher würde es ja durchaus Sinn machen, wenn er alles kann was ein Auto kann. Und wenn wir diese Dinge nicht für jedes Modell neu programmieren müssen.
Und genau dafür sorgen wir mit dem kleinen Schlüsselwörtchen extends bei der Klassendefinition des BMW. Durch extends Auto sorgen wir dafür, dass jedes Objekt vom Typ BMW automatisch alle Methoden und Attribute der Elternklasse Auto erhält. Hier sind natürlich diverse Einschränkungen möglich, zu denen wir später noch ausführlicher kommen. Hier sei einfach nochmal das Stichwort Sichtbarkeiten erwähnt.

Durch diese Vererbung der Funktionalitäten funktioniert folgender Code auch absolut problemlos.

Obwohl in der Klassendefinition unseres BMW keine Methode fahren() definiert ist erhalten wir die korrekte Ausgabe. Der PHP Interpreter erkennt die vererbte Methode und führt diese automatisch aus.

Warum nicht nur eine große Klasse?

Was ist nun der echte Vorteil der Vererbung? Warum programmieren wir die zusätzliche Funktionalität nicht einfach in unsere Auto Klasse?
Das wird uns ganz schnell klar, wenn wir unsere Gedanken für dieses Beispiel weiterspinnen. Klar, unser BMW kann automatisch einparken. Doch kann ein Mercedes das auch? Es ist durchaus möglich, mehrere Klassen von ein und derselben Elternklasse erben zu lassen und so verschiedene Funktionalitäten – aufbauend auf einer gemeinsamen Basis – zu erhalten.

Ein beliebter Einsatzort für die objektorientierte Programmierung inklusive Vererbung ist allerdings auch sowohl die Arbeit in Teams an einem gemeinsamen Projekt als auch in der Open Source Programmierung. Der Vorteil liegt darin, dass wir anderen Leuten komplette Klassen mit Funktionalität zur Verfügung stellen können. Diese können unsere gelieferte Funktionalität dann sowohl für ihre Zwecke verwenden als auch um eigene Funktionalität erweitern. Dafür müssen sie nichts weiter wissen als den Namen der jeweiligen Methoden, die übergebenen Parameter und die zu erwartenden Rückgabewerte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*