Kapitel 14 Vererbung
Die Idee hinter der objektorientierten Vererbung in ActionScript
Eine effiziente Programmierung zeichnet sich dadurch aus, dass der Entwickler möglichst niemals denselben Programmcode mehrmals schreiben muss. Die Vererbung hilft, solche Gemeinsamkeiten zu entdecken und in der Programmierung zu nutzen.
03_Objektorientierung\vererbung
Bei der objektorientierten Programmierung (OOP) in Flashs Programmiersprache ActionScript sind Sie als Entwickler immer auf der Suche nach Objekten und deren Zuständen und Fähigkeiten. Solange Sie nur eine Instanz (engl. Instance = Vorkommen) dieses Objektes haben, reicht eine Deklaration in der folgenden Form völlig aus:
einFreund = new Object();
einFreund.laune = "gut";
einFreund.pinkleImStehen = function () {
trace("Ahhh...");
};
14.1 Klassen
 
Sobald Sie mehrere Vorkommen eines Objekttyps benötigen, lohnt sich das Anlegen einer Klasse. Diese Klasse ist die Vorlage oder der Prototyp für alle von ihr abgeleiteten Instanzen:
function Freund(name) {
this.name = name;
}
Freund.prototype.pinkleImStehen = function() {
trace("Ahhh ...");
};
Abgeleitete Objekte
Der new-Operator erzeugt in Kombination mit dem Funktionsnamen des Prototypen von der Klasse abgeleitete Objekte:
meinFreund = new Freund("Marc");
weitererFreund = new Freund("Saban");
14.1.1 Von Klassen und Prototypen
 
Viele Programmierer, die in Sprachen wie C++ oder Java zu Hause sind, nehmen eine Skriptsprache wie JavaScript oder ActionScript nicht für voll. In der Tat ist die Objektorientierung in diesen Skriptsprachen anders implementiert – dies ist aber nicht unbedingt ein Nachteil.
JavaScript und ActionScript verwenden so wie alle auf ECMAScript basierenden Sprachen Prototypen als Vorlage für Objekte (prototypenbasiert). Java und C++ verwenden hingegen Klassen (klassenbasiert).
Der wesentliche Unterschied ist, dass in klassenbasierten Sprachen Klassen bereits am Anfang des Programms definiert und zur Laufzeit unveränderlich sind. Das heißt, die Eigenschaften und Methoden stehen von Anfang an fest. Selbst einzelne Instanzen sind nicht mehr erweiterbar.
Bei prototypenbasierten Sprachen dürfen beinahe überall im Programmcode Klassen (also Prototypen) definiert werden. Da Prototypen wiederum nichts anderes als Objekte sind, ist ihr Verhalten jederzeit veränderbar: Sie können auch zur Laufzeit Eigenschaften und Methoden hinzufügen, modifizieren oder löschen.
Die Folgen dieser Unterschiede sind weitreichend. Bei klassenbasierten Sprachen muss deutlich strukturierter vorgegangen werden als bei prototypenbasierten Sprachen: Ob dies ein Nachteil oder Vorteil ist, sei dahingestellt. Mit genuegend Disziplin bei der Planung und Umsetzung bieten prototypenbasierte Sprachen das flexiblere und einfachere Konzept – selbst Vererbung kann mit kleineren Tricks umgesetzt werden. Ohne diese Disziplin erhaelt man aber schnell chaotischen Programmcode.
Letztendlich ist das wirklich Schlimme an diesem Zustand die Begriffsverwirrung. In prototypenbasierten Sprachen wird im Endeffekt alles als Objekt bezeichnet, egal ob es die Funktion einer Klasse oder die einer Instanz übernimmt. Hier bieten klassenbasierte Sprachen eine saubere Trennung!
|