<?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=Signatur_%28Programmierung%29</id>
	<title>Signatur (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=Signatur_%28Programmierung%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Signatur_(Programmierung)&amp;action=history"/>
	<updated>2026-06-01T02:59:34Z</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=Signatur_(Programmierung)&amp;diff=566556&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Signatur_(Programmierung)&amp;diff=566556&amp;oldid=prev"/>
		<updated>2026-04-18T12:02:36Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;Signatur&amp;#039;&amp;#039;&amp;#039; (oder &amp;#039;&amp;#039;&amp;#039;Methodensignatur&amp;#039;&amp;#039;&amp;#039;) definiert in der [[Programmierung]] die formale Schnittstelle einer [[Funktion (Programmierung)|Funktion]] oder [[Prozedur (Programmierung)|Prozedur]]. Sie besteht aus dem Namen der Funktion sowie der Anzahl, Art und Reihenfolge der [[Zuweisungskompatibilität|zuweisungskompatiblen]] [[Parameter (Informatik)|Parameterdatentypen]], wobei zwischen Eingangs-, Ausgangs- und Durchgangsparametern unterschieden werden kann. Der Typ des Rückgabewerts gehört bei [[Starke Typisierung|stark typisierten]] Programmiersprachen ebenfalls zur Signatur&amp;lt;ref&amp;gt;Björn Kellermann: [https://www.fh-wedel.de/~si/seminare/ss03/Ausarbeitung/9.hxml/haskell/signatur_definition.html 1.3 Signatur, Definition]m Haskell, abgerufen am 3.&amp;amp;nbsp;Februar 2014&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Thomas Briner-Lienhard: [http://briner.computerscience.ch/Info1/Oberon_key.pdf Keywords fuer Programmstruktur.] (PDF) Oberon, abgerufen am 3.&amp;amp;nbsp;Februar 2014&amp;lt;/ref&amp;gt;, genauso wie die Modifikatoren, die die Regeln für die [[Sichtbarkeit (Programmierung)|Sichtbarkeit]] und die [[Überschreiben (OOP)|Überschreibbarkeit]] einer Methode festlegen.&amp;lt;ref&amp;gt;[https://developer.mozilla.org/en-US/docs/Glossary/Signature/Function Signature (functions)], Mozilla.org, abgerufen am 25. März 2018&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://introcs.cs.princeton.edu/java/21function/ Static Methods], Computer Science, Princeton University, abgerufen am 25. März 2018&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Signaturvererbung versteht man in der [[Objektorientierte Programmierung|objektorientierten Programmierung]] die Übertragung einer in der Oberklasse definierten (und eventuell implementierten) Methode auf die Unterklasse. Statische Methoden mit sich unterscheidender Signatur können nicht überschrieben werden, sondern können bei weniger streng strukturierten Programmiersprachen gegebenenfalls [[überladen]] werden.&lt;br /&gt;
&lt;br /&gt;
Auch die Menge der Operatoren eines [[Abstrakter Datentyp|abstrakten Datentyps]] wird &amp;#039;&amp;#039;Signatur&amp;#039;&amp;#039; genannt.&amp;lt;ref&amp;gt;R. Dumke: &amp;#039;&amp;#039;{{Webarchiv|url=http://ivs.cs.uni-magdeburg.de/~dumke/EAD/Skript29.html#adt |wayback=20060430040039 |text=Einführung, Algorithmen und Datenstrukturen. |archiv-bot=2019-05-14 01:26:34 InternetArchiveBot }}&amp;#039;&amp;#039; Otto-von-Guericke-Universität Magdeburg&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rückgabetyp ==&lt;br /&gt;
In Pascal- und C-Abkömmlingen und ähnlichen Sprachen, welche bei [[Überladen|Überladungen]] den Rückgabetyp nicht berücksichtigen, kann nicht unterschieden werden, welche Methode im konkreten Anwendungsfall benutzt werden soll.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
     // Deklaration&lt;br /&gt;
    float  teile( int dividend, int divisor);    // die Signatur ist hier: teile( int, int )&lt;br /&gt;
    double teile (int a, int b);  // nicht erlaubt, Signatur ist dieselbe wie oben: teile( int, int )&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Methoden bzw. Funktionen oben hätten die gleiche Signatur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     // Deklaration&lt;br /&gt;
     boolean isNegativ( float zahl );   // die Signatur ist isNegativ(float)&lt;br /&gt;
     boolean isNegativ( double zahl );  // in Ordnung, Signatur ist anders: isNegativ(double)&lt;br /&gt;
     ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt könnte nicht mehr entschieden werden, welche Funktion teile (int, int) im konkreten Anwendungsfall benutzt werden soll:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    // Die obigen Funktionen sollen hier benutzt werden:&lt;br /&gt;
    boolean b = isNegativ( teile(x,y) );   // float teile(..) oder double teile(..) ?&lt;br /&gt;
     ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz dazu kann die Möglichkeit gegeben werden, in Ausdrücken explizit einen Typ anzugeben. Dadurch kann das Aufrufziel eindeutig angegeben werden. [[Haskell (Programmiersprache)|Haskell]] macht hiervon Gebrauch. Beispielsweise ergeben die Ausdrücke&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
    read &amp;quot;42&amp;quot; :: Integer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
    read &amp;quot;42&amp;quot; :: Double&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
verschiedene Werte unterschiedlichen Typs.&lt;br /&gt;
&lt;br /&gt;
== Objektorientierung ==&lt;br /&gt;
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] ist eine Signatur die formale Schnittstelle einer [[Methode (Programmierung)|Methode]].&amp;lt;ref&amp;gt;Rebecca Wirfs-Brock, Brian Wilkerson, Lauren Wiener: &amp;#039;&amp;#039;Objektorientiertes Software-Design.&amp;#039;&amp;#039; Carl Hanser Verlag, München 1993, ISBN 3-446-16319-0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Signaturen spielen eine Rolle bei der [[Polymorphie (Programmierung)|Polymorphie]], einem der grundlegenden Konzepte der [[Objektorientierung]]. In vielen Programmiersprachen kann eine Methode einer abgeleiteten Klasse die Methode einer Basisklasse genau dann [[Überschreiben (Programmierung)|überschreiben]], wenn die Signaturen der beiden Methoden identisch sind.&lt;br /&gt;
&lt;br /&gt;
=== Überschriebene Methoden ===&lt;br /&gt;
&lt;br /&gt;
Im folgenden [[Java (Programmiersprache)|Java]]-Beispiel scheinen die Methodensignaturen aus Oberklasse und abgeleiteter Klasse gleich zu sein: &amp;lt;code&amp;gt;String&amp;amp;nbsp;redeMit(&amp;amp;nbsp;String&amp;amp;nbsp;)&amp;lt;/code&amp;gt;. Für den Compiler haben die Methoden jedoch unterschiedliche Signaturen, da er noch die zugehörigen Namensräume und Klassentypen berücksichtigt.&lt;br /&gt;
Die Methode der abgeleiteten Klasse hat hier die Methode der Basisklasse &amp;#039;&amp;#039;überschrieben&amp;#039;&amp;#039; (englisch&amp;amp;nbsp;&amp;#039;&amp;#039;override&amp;#039;&amp;#039;).&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Superklasse&lt;br /&gt;
class Person {&lt;br /&gt;
    String redeMit( String name ) {&lt;br /&gt;
        return &amp;quot;Hallo &amp;quot; + name;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Abgeleitete Klasse. Superklassenrelation impliziert Supertyprelation.&lt;br /&gt;
class NettePerson extends Person {&lt;br /&gt;
    // Methode redeMit(String) wird überschrieben&lt;br /&gt;
    String redeMit( String name ) {&lt;br /&gt;
        return &amp;quot;Schön Dich zu sehen, &amp;quot; + name;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
    public static void main( String[] args ) {&lt;br /&gt;
        Person p;&lt;br /&gt;
&lt;br /&gt;
        // Hier kann erst zur Laufzeit entschieden werden, welche Methode genommen werden soll.&lt;br /&gt;
        if ( 0.5 &amp;lt; Math.random() ) {&lt;br /&gt;
            p = new Person();        // originale Person p&lt;br /&gt;
        } else {&lt;br /&gt;
            p = new NettePerson();   // Person p wird mit &amp;quot;nettem&amp;quot; Verhalten instanziert.&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        for ( String name: args ) {&lt;br /&gt;
            System.out.println( p.redeMit( name ) + &amp;quot;.&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Zur Laufzeit führt jedes Objekt einen Zeiger auf eine [[Tabelle virtueller Methoden]] mit, die für jede Klasse existiert. Dieser Zeiger wird bei der [[Objekt (Programmierung)#Instanziierung|Objekt-Instanziierung]] initialisiert und ermöglicht so [[Polymorphie (Programmierung)|Polymorphie]], also überschreibbares Verhalten.&lt;br /&gt;
&lt;br /&gt;
Unterklasse-Instanzen können gegebenenfalls noch mittels sogenannter Superzeiger auf die überschriebenen Methoden ihrer Superklassen zugreifen.&lt;br /&gt;
&lt;br /&gt;
=== Klassensignatur ===&lt;br /&gt;
&lt;br /&gt;
Die Menge aller öffentlichen Signaturen definiert die Schnittstelle einer Klasse.&lt;br /&gt;
&lt;br /&gt;
== Interne Repräsentation in Programmiersprachen ==&lt;br /&gt;
Viele [[C++]]-[[Compiler]] bilden aus dem Namen einer Funktion oder [[Methode (Programmierung)|Methode]] und der kodierten Signatur einen sogenannten &amp;#039;&amp;#039;dekorierten Funktionsnamen&amp;#039;&amp;#039; ({{enS|mangled name}}). Dieser zusammengesetzte Name bildet das [[Linker (Computerprogramm)|Linkersymbol]]. Damit kann verhindert werden, dass Funktionen mit gleichem Namen, aber unterschiedlicher Signatur durch den Linker fälschlicherweise miteinander verknüpft werden.&lt;br /&gt;
Die Namen von Methoden enthalten zusätzlich noch den Klassennamen. Allerdings sind die &amp;#039;&amp;#039;dekorierten Funktionsnamen&amp;#039;&amp;#039; nur für den passenden Compiler bzw. Linker zu interpretieren, wie folgendes Beispiel zeigt:&lt;br /&gt;
?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z&lt;br /&gt;
?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z&lt;br /&gt;
&lt;br /&gt;
In der Programmiersprache [[Java (Programmiersprache)|Java]] existiert ebenfalls eine interne Repräsentation von Methodennamen, der sogenannte &amp;#039;&amp;#039;method descriptor&amp;#039;&amp;#039;. Im Gegensatz zu C++ ist dieser Teil der Sprachspezifikation und somit für alle Compiler und [[Java Virtual Machine|virtuellen Maschinen]] identisch. Das folgende Beispiel zeigt die interne Form der Signatur der Methode „&amp;lt;code&amp;gt;Object meineMethode(int i, double d, Thread t)&amp;lt;/code&amp;gt;“.&amp;lt;ref&amp;gt;Tim Lindholm, Frank Yellin: {{Webarchiv|url=http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#7035 |wayback=20130708144648 |text=&amp;#039;&amp;#039;The Java&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt; Virtual Machine Specification: Second Edition.&amp;#039;&amp;#039; Abschnitt 4.3.3 &amp;#039;&amp;#039;Method Descriptors.&amp;#039;&amp;#039; |archiv-bot=2019-05-14 01:26:34 InternetArchiveBot }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
 (IDLjava/lang/Thread;)Ljava/lang/Object;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Funktionsprototyp]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>