Navigation


Prototypenbasierte Programmierung

12.01.2012 @ 09:38, Wortverdreher,

Prototypenbasierte Programmierung, auch als klassenlose Objektorientierung bekannt, ist eine Form der Objektorientierten Programmierung, die auf das Sprachelement der Klasse verzichtet.
Objekte werden durch Klonen bereits existierender Objekte erzeugt.
Alle bestehenden Objekte können Prototypen neuer Objekte sein.
Beim Klonen werden alle Eigenschaften (Attribute und Methoden) des Prototyp-Objektes kopiert; das neue Objekt kann mit neuen Eigenschaften versehen und die kopierten verändert werden.
Einige Sprachen kopieren die Objekte beim Klonen vollständig und es bleibt keine Verbindung zwischen dem Klon und seinem Prototypen; die meisten prototypenbasierten Sprachen verwenden aber ein spezielles Attribut (in JavaScript z. B. "prototype" genannt), über das eine Verbindung vom Klon zum Prototypen aufrechterhalten wird.

Über diese Verbindung erben alle vom Prototypen geklonten Objekte auch nachträgliche Änderungen am Prototypen.

Objekte können als Assoziatives Array verstanden werden; die Schlüssel dieser Tabelle werden für gewöhnlich Slot genannt, wobei meist nicht zwischen Attributen (Daten) und Methoden (Operationen) des Objekts unterschieden wird: Methoden-Slots verweisen häufig nur auf außerhalb des Objektes liegenden Programmcode.

Vor- und Nachteile

Prototypenbasierte Sprachen erlauben eine größere Flexibilität bei der Modellierung, da sie den Programmierer nicht zwingen, seine Objekte in eine statische, zur Compile-Zeit festgelegte Klassenstruktur zu bringen. Objekte bleiben zur Laufzeit strukturell veränderbar. Diese Flexibilität beinhaltet aber auch das Risiko einer schlechteren Wartbarkeit des Programms.

Viele Optimierungen, die der Compiler in klassenbasierten Sprachen bereits zum Zeitpunkt der Übersetzung vornehmen kann, lassen sich aufgrund der dynamischen Natur von prototypen-basierten Sprachen bei diesen nicht realisieren.

Beispiele

Das folgende Beispiel in der Programmiersprache JavaScript erzeugt zwei Objekte, object1 und object2, und stellt durch die Zeile child.prototype = object1; die Eltern-Kind-Beziehung zwischen den beiden Objekten her.


var object1 = { a : 1, b : 2 };
function child() {
this.c = 3;
this.d = 4;
}
child.prototype = object1;
var object2 = new child();
alert( object2.a ); // zeigt den Wert 1 an
alert( object2.c ); // zeigt den Wert 3 an

Das zweite Beispiel, auch in der Programmiersprache JavaScript, erzeugt dieselben beiden Objekte, verwendet dabei aber das für die prototypenbasierte Programmierung typische Klonen. In ECMAScript 3, dem JavaScript zugrunde liegenden Standard, steht diese Funktion nicht automatisch zur Verfügung. Sie kann aber mit wenigen Zeilen Code selbst definiert werden.


function clone( object ) {
function F(){};
F.prototype = object;
return new F;
}
var object1 = { a : 1, b : 2 };
var object2 = clone( object1 );
object2.c = 3;
object2.d = 4;
alert( object2.a );
alert( object2.c );

Seit ECMAScript 5 existiert für diese Aufgabe die vordefinierte Methode Object.create(), womit eine eigene Helferfunktion unnötig wird.


var object1 = { a : 1, b : 2 };
var object2 = Object.create( object1 );
object2.c = 3;
object2.d = 4;
alert( object2.a );
alert( object2.c );

Liste prototypenbasierter Programmiersprachen

* Prototyp (Entwurfsmuster)

Quellen

* Ross Harmes, Dustin Diaz: Pro JavaScript Design Patterns. Apress, Berkley, 2008 ISBN 978-1-59059-908-2.

Kategorie:Programmierparadigma

Kategorie:Objektorientierte Programmierung

Prototype-based programming
es:Programación basada en prototipos
fa:برنامه‌نویسی بر پایه پیش‌نمونه
fi:Prototyyppipohjainen ohjelmointi
Programmation orientée prototype
ja:プロトタイプベース
ko:프로토타입 기반 프로그래밍
nl:Prototype-gebaseerd programmeren
ru:Прототипное программирование
th:การเขียนโปรแกรมแบบโพรโทไทป์
tr:Prototip tabanlı programlama
uk:Прототипне програмування
zh:原型程式設計

weiter

Text und Bilder dieses Beitrags stammen aus dem Artikel Prototypenbasierte Programmierung der freien Enzyklopädie Wikipedia und stehen unter der GNU Free Documentation License. Die Liste der Autoren ist in der Wikipedia unter dieser Seite verfügbar, der Original-Artikel lässt sich hier bearbeiten.