<?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=Duck-Typing</id>
	<title>Duck-Typing - 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=Duck-Typing"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Duck-Typing&amp;action=history"/>
	<updated>2026-05-28T08:42:16Z</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=Duck-Typing&amp;diff=1145923&amp;oldid=prev</id>
		<title>2A02:8071:184:4E80:0:0:0:34BD: dass OO etwas damit zu tun hat, würde ich gerne durch eine sehr fundierte Quelle belegt sehen</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Duck-Typing&amp;diff=1145923&amp;oldid=prev"/>
		<updated>2025-06-26T08:48:21Z</updated>

		<summary type="html">&lt;p&gt;dass OO etwas damit zu tun hat, würde ich gerne durch eine sehr fundierte Quelle belegt sehen&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;Duck-Typing&amp;#039;&amp;#039;&amp;#039; ist ein Konzept der [[Objektorientierte Programmierung|objektorientierten Programmierung]], bei dem der Typ eines Objektes nicht durch seine [[Klasse (Objektorientierung)|Klasse]] beschrieben wird, sondern durch das Vorhandensein bestimmter [[Methode (Programmierung)|Methoden]] oder [[Attribut (Programmierung)|Attribute]].&amp;lt;ref&amp;gt;{{Internetquelle|url=https://docs.python.org/3/glossary.html#term-duck-typing|titel=Glossary — Python 3.11.1 documentation|werk=docs.python.org|abruf=2023-02-03}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es handelt sich gewissermaßen um die Anwendung des [[Ententest]]s in der Informatik, in Anlehnung an [[James Whitcomb Riley]]s Gedicht:&lt;br /&gt;
&lt;br /&gt;
{{Zitat&lt;br /&gt;
 |Text=When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.&lt;br /&gt;
 |Sprache=en&lt;br /&gt;
 |Übersetzung=Wenn ich einen Vogel sehe, der wie eine Ente läuft, wie eine Ente schwimmt und wie eine Ente schnattert, dann nenne ich diesen Vogel eine Ente.}}&lt;br /&gt;
&lt;br /&gt;
Duck-Typing ist charakteristisch für [[Skriptsprache]]n wie [[Python (Programmiersprache)|Python]], [[Groovy]], [[PHP]] und [[Ruby (Programmiersprache)|Ruby]].&lt;br /&gt;
&lt;br /&gt;
Beim Duck-Typing wird zur [[Laufzeit (Informatik)|Laufzeit]] des Programms geprüft, ob ein Objekt die entsprechenden Merkmale unterstützt. Dies führt wie bei allen [[Dynamische Typisierung|dynamischen Typsystemen]] zu einer erhöhten Flexibilität, reduziert aber ebenso die Möglichkeit, statisch zur [[Übersetzungszeit]] Fehler im Programm zu finden. In Sprachen wie [[Java (Programmiersprache)|Java]] und [[D (Programmiersprache)|D]], sowie [[C-Sharp|C#]] bis Version 3.0, ist es erforderlich, bei der Definition einer Klasse anzugeben, welche [[Schnittstelle (Objektorientierung)|Interfaces]] implementiert werden sollen. Diese Sprachen erlauben es somit nicht, nach der Fertigstellung einer Klasse festzulegen, dass die Klasse zusätzlich noch ein anderes Interface implementiert (selbst wenn alle Methoden vorhanden wären, und die Objekte somit die gesamte Funktionalität bereitstellen würden).&lt;br /&gt;
&lt;br /&gt;
In [[C++]] bieten [[Template (C++)#Funktions-Templates|Funktionstemplates]] eine Art Duck-Typing zur [[Kompilierzeit]]. Ältere [[GNU Compiler Collection|GCC]]-Versionen boten daneben auch sogenannte &amp;#039;&amp;#039;Signatures&amp;#039;&amp;#039; an. Diese lassen sich wie Interfaces deklarieren und nutzen, sie sind jedoch unabhängig von der Klassenhierarchie, sodass beispielsweise für eine Ente nicht erneut deklariert werden muss, dass sie schnattern kann, also die Signature implementiert. Dies entspricht den &amp;#039;&amp;#039;Interface&amp;#039;&amp;#039; genannten Strukturen in [[Go (Programmiersprache)|Go]].&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Codebeispiel in der [[Programmiersprache]] [[Python (Programmiersprache)|Python]] zeigt Ducktyping innerhalb einer [[Foreach-Schleife]]. Es wird erst zur [[Laufzeit (Informatik)|Laufzeit]] geprüft, ob die [[Klasse (Objektorientierung)|Klasse]] des [[Objekt (Programmierung)|Objekts]] &amp;lt;code&amp;gt;bird&amp;lt;/code&amp;gt; die [[Methode (Programmierung)|Methoden]] &amp;lt;code&amp;gt;fly()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;swim()&amp;lt;/code&amp;gt; deklariert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Klassendeklaration mit den Methoden fly() und swim()&lt;br /&gt;
class Duck:&lt;br /&gt;
    def fly(self):&lt;br /&gt;
        print(&amp;quot;The duck is flying&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def swim(self):&lt;br /&gt;
        print(&amp;quot;The duck is swimming&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Klassendeklaration nur mit der Methode fly()&lt;br /&gt;
class Albatross:&lt;br /&gt;
    def fly(self):&lt;br /&gt;
        print(&amp;quot;The albatross is flying&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Initialisierung einer Liste mit je einer Instanz der beiden Klassen&lt;br /&gt;
birds = [Duck(), Albatross()]&lt;br /&gt;
&lt;br /&gt;
# Foreach-Schleife mit Ducktyping&lt;br /&gt;
for bird in birds:&lt;br /&gt;
    bird.fly()&lt;br /&gt;
    bird.swim()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Das Programm erzeugt folgende Ausgabe:&lt;br /&gt;
  The duck is flying&lt;br /&gt;
  The duck is swimming&lt;br /&gt;
  The albatross is flying&lt;br /&gt;
  &amp;#039;Albatross&amp;#039; object has no attribute &amp;#039;swim&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Die [[Klasse (Objektorientierung)|Klasse]] &amp;lt;code&amp;gt;Duck&amp;lt;/code&amp;gt; deklariert die [[Methode (Programmierung)|Methoden]] &amp;lt;code&amp;gt;fly()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;swim()&amp;lt;/code&amp;gt;. Diese werden zur Laufzeit aufgerufen. Die Klasse &amp;lt;code&amp;gt;Albatross&amp;lt;/code&amp;gt; deklariert nur die Methode &amp;lt;code&amp;gt;fly()&amp;lt;/code&amp;gt;, die Methode &amp;lt;code&amp;gt;swim()&amp;lt;/code&amp;gt; kann nicht aufgerufen werden. Daher wird eine Fehlermeldung ausgegeben.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;/div&gt;</summary>
		<author><name>2A02:8071:184:4E80:0:0:0:34BD</name></author>
	</entry>
</feed>