![]() |
![]() |
![]() | |
![]() |
Vererben, ableiten und mutierenDer letzte und zugleich auch spannendste, aber auch komplexeste Pfeiler der objektorientierten Programmierung stellt die Vererbung und das Ableiten von Klassen dar. Nehmen wir einmal an, unser deutsches Produkt mit dem Adressobjekt schlägt so toll ein, das Ihr Chef eine französische Version plant. Toll. Dummerweise verwenden die Franzosen zur vollständigen Adressbeschreibung aber auch noch die Provinz. Klar, sie könnten das bestehende Adressobjekt nun einfach um ein entsprechendes Element „Provinz“ ergänzen. Aber dies würde wiederum in Deutschland zur Verwirrung führen, da die Angabe einer Provinz in Deutschland unüblich ist. Die Lösung heißt: „Ableiten, Vererben und mutieren :-)“. Und genau dies ist eine Spezialität der objektorientierten Programmierung und wird auch von PHP angeboten. Wir definieren eine zweite Klasse: Class AdresseFrance extends Adresse { var $Provinz; } Das war es ! Ehrlich ! Naja fast ;) Beachten Sie bitte die Syntax hinter dem Klassennamen „AdresseFrance“. Mit dieser Syntax sagen Sie PHP, daß die gerade deklarierte Klasse alle Eigenschaften der Klasse Adresse vonhaus aus bekommen soll. Dadurch müssen Sie die Elemente Name, Strasse, PLZ usw. nicht erneut definieren ! Das gleiche gilt für alle enthaltenen Funktionen ! Objekte vom Typ AdresseFrance werden sich genauso verhalten wie Objekte der Ursprungsklasse, mit dem einzigen Unterschied, daß es ein weiteres Element „Provinz“ gibt. Man spricht hierbei auch von einer abgeleiteten Klasse, sowie bei der Klasse „Adresse“ von dem Vorfahren oder der Basisklasse. Daß die abgeleitete Klasse alle Eigenschaften und Funktionen des Vorfahren hat, bezeichnet man in der objektorientierten Welt als Vererbung. Man sagt auch, die Klasse „AdresseFrance“ hat alle Eigenschaften und Funktionen des Vorfahren „Adresse“ geerbt. „AdresseFrance“ bezeichnet man auch als Nachfahre von „Adresse“. Natürlich kann auch von AdresseFrance eine weitere Klasse abgeleitet werden und so fort. Bei einem komplexen Gebilde von abgeleiteten Klassen spricht man auch von dem Stammbaum der Klassen. Class AdresseFrance extends Adresse { var $Provinz; function WriteLocation ($NewPLZ,$NewOrt,$NewProvinz) { $this->PLZ = $NewPLZ; $this->Ort = $NewOrt; $this->Provinz = $NewProvinz; } } Erinnern Sie sich? Die Funktion „WriteLocation“ hatten wir bereits in unserer Basisklasse „Adresse“ definiert. Was passiert nun, wenn in einer abgeleiteten Klasse eine Funktion unter gleichen Namen erneut deklariert wird ? Dies führt nicht etwa zu einem Fehler, sondern PHP überschreibt in diesem Fall dann die Ursprungsfunktion mit der neuen. Sofern unter dem gleichen Namen in einer abgeleiteten Klasse erneut eine Funktion deklariert wird, stellt PHP diese in den instanzierten Objekten zur Verfügung, ansonsten werden die ererbten Funktionen übernommen. Nun fällt Ihnen sicherlich auf, das wir erneut eine gewisse Coderedundanz haben: Sowohl in der Klasse Adresse in der Funktion „WriteLocation“ als auch in der abgeleiteten Klasse „AdresseFrance“ in der Funktion „WriteLocation“ werden die Variablen PLZ und Ort behandelt. Dies muß nicht sein und kann verkürzt und besser implementiert werden: Class AdresseFrance extends Adresse { var $Provinz; function WriteLocation ($NewPLZ,$NewOrt,$NewProvinz) { parent::WriteLocation ($NewPLZ,$NewOrt); $this->Provinz = $NewProvinz; } } Durch den speziellen Namen „parent“ gefolgt von den zwei Doppelpunkten kann auf eine Funktion des Vorfahren zurückgegriffen werden. In diesem Fall greifen wir auf die eigentlich überschriebene Funktion „WriteLocation“ des Vorfahren zurück und lassen diese die eigentliche Arbeit machen. Dies spart etwas Code, eine Zeile ;-), und Redundanz im Code was viel wichtiger ist ! [zurück] - [bookmarken] - [Druckversion] - [Weiterempfehlen] - [Kontakt] - [Impressum]
Copyright © 2000-2012 by Portunity GmbH - Alle Rechte vorbehalten. |
![]() ![]() Providing unter:
http://portunity.net
![]()
|
|||||||||