<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Prototypenbasierte_Programmierung</id>
	<title>Prototypenbasierte Programmierung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Prototypenbasierte_Programmierung"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Prototypenbasierte_Programmierung&amp;action=history"/>
	<updated>2026-05-24T03:13:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Prototypenbasierte_Programmierung&amp;diff=1085963&amp;oldid=prev</id>
		<title>imported&gt;Trustable: Kleinigkeiten verbessert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Prototypenbasierte_Programmierung&amp;diff=1085963&amp;oldid=prev"/>
		<updated>2025-05-11T17:54:38Z</updated>

		<summary type="html">&lt;p&gt;Kleinigkeiten verbessert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Prototypenbasierte Programmierung&amp;#039;&amp;#039;&amp;#039;, auch als &amp;#039;&amp;#039;klassenlose Objektorientierung&amp;#039;&amp;#039; bekannt, ist eine Form der [[Objektorientierte Programmierung|objektorientierten Programmierung]], die auf das Sprachelement der [[Klasse (Objektorientierung)|Klasse]] verzichtet.&lt;br /&gt;
Objekte werden nicht durch [[Objekt (Programmierung)#Instanziierung|Instanziierung]] einer Klasse, sondern durch &amp;#039;&amp;#039;Klonen&amp;#039;&amp;#039; bereits existierender Objekte erzeugt.&lt;br /&gt;
Bei diesem Klonen werden alle Eigenschaften (&amp;#039;&amp;#039;[[Attribut (Programmierung)|Attribute]]&amp;#039;&amp;#039; und &amp;#039;&amp;#039;[[Methode (Programmierung)|Methoden]]&amp;#039;&amp;#039;) des [[Prototyp (Entwurfsmuster)|Prototyp]]-Objektes kopiert, sie können aber überschrieben werden, und das neue Objekt kann mit neuen Eigenschaften versehen werden.&lt;br /&gt;
&lt;br /&gt;
Alle bestehenden Objekte können Prototypen neuer Objekte sein.&lt;br /&gt;
&lt;br /&gt;
Einige Sprachen kopieren die Objekte beim Klonen vollständig und es bleibt keine Verbindung zwischen dem Klon und seinem Prototyp; die meisten prototypenbasierten Sprachen verwenden aber ein spezielles Attribut, über das eine Verbindung vom Klon zum Prototyp aufrechterhalten wird. Über diese Verbindung [[Vererbung (Programmierung)|erben]] alle vom Prototyp geklonten Objekte auch nachträgliche Änderungen am Prototyp.&lt;br /&gt;
&lt;br /&gt;
Die Objekte können als [[Assoziatives Datenfeld|assoziatives Array]] verstanden werden; die Schlüssel dieser Tabelle werden für gewöhnlich &amp;#039;&amp;#039;Slot&amp;#039;&amp;#039; genannt, wobei meistens nicht zwischen Attributen (Daten) und Methoden (Operationen) des Objekts unterschieden wird: Methoden-Slots verweisen häufig nur auf außerhalb des Objektes liegenden Programmcode.&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
Prototypenbasierte Sprachen erlauben eine größere Flexibilität bei der Modellierung, da sie den Programmierer nicht zwingen, seine Objekte in eine statische, zur [[Übersetzungszeit|Compilezeit]] festgelegte Klassenstruktur zu bringen. Objekte bleiben zur [[Laufzeit (Informatik)|Laufzeit]] strukturell veränderbar. Diese Flexibilität beinhaltet aber auch das Risiko einer schlechteren Wartbarkeit des Programms.&lt;br /&gt;
&lt;br /&gt;
Viele Optimierungen, die der [[Compiler]] in klassenbasierten Sprachen bereits zum Zeitpunkt der Übersetzung vornehmen kann, lassen sich aufgrund der dynamischen Natur von prototypenbasierten Sprachen bei diesen nicht realisieren.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Das folgende Beispiel in [[ECMAScript]] 5 erzeugt zuerst ein Objekt &amp;lt;code&amp;gt;object1&amp;lt;/code&amp;gt;, das wir danach als Prototyp verwenden werden. Es hat die Attribute &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, denen auch gleich die Werte 1 bzw. 2 zugeordnet werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var object1 = { a : 1, b : 2 };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zum Klonen gibt es in ECMAScript 5 eine vordefinierte Funktion &amp;lt;code&amp;gt;Object.create()&amp;lt;/code&amp;gt;. Der gewünschte Prototyp wird als Argument angegeben. Dieser Klon erhält im Beispiel den Namen &amp;lt;code&amp;gt;object2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var object2 = Object.create( object1 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diesem neuen Objekt können nun weitere Attribute zugeordnet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object2.c = 3;&lt;br /&gt;
object2.d = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das geklonte Objekt hat nun vier Attribute:&lt;br /&gt;
*a = 1 (vom Prototyp geerbt)&lt;br /&gt;
*b = 2 (vom Prototyp geerbt)&lt;br /&gt;
*c = 3 (nach dem Klonen hinzufügt)&lt;br /&gt;
*d = 4 (nach dem Klonen hinzufügt)&lt;br /&gt;
&lt;br /&gt;
== Liste prototypenbasierter Programmiersprachen ==&lt;br /&gt;
* [[Self (Programmiersprache)|Self]]&lt;br /&gt;
* [[ECMAScript]]&lt;br /&gt;
** [[JavaScript]]&lt;br /&gt;
** [[ActionScript]] (seit AS3 zunehmend klassenorientiert)&lt;br /&gt;
* [[Io (Programmiersprache)|Io]]&lt;br /&gt;
* [[Lua]]&lt;br /&gt;
* [[REBOL]]&lt;br /&gt;
* [[NewtonScript]]&lt;br /&gt;
* [[Snap! (Programmiersprache)|Snap! (BYOB)]] – als bisher einzige [[Bildungsorientierte Programmiersprache|bildungsorientierte]] [[Visuelle Programmierung|visuelle]] Programmiersprache dieser Auflistung&lt;br /&gt;
* [[SimTalk]]&lt;br /&gt;
&lt;br /&gt;
Im Prinzip lässt sich in jeder [[Programmiersprache]], die [[Zeiger (Informatik)|Zeiger]] unterstützt, prototypenbasiert programmieren. Für [[Ruby (Programmiersprache)|Ruby]] und [[Perl (Programmiersprache)|Perl]] existieren vorgefertigte Module, die dies unterstützen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierparadigma]]&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;br /&gt;
[[Kategorie:JavaScript]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Trustable</name></author>
	</entry>
</feed>