Wikipedia · einfach zusammengefasst · Stand
Signatur (Programmierung)
Signaturen spielen eine Rolle bei der Polymorphie, einem der grundlegenden Konzepte der Objektorientierung. In vielen Programmiersprachen kann eine Methode …
Inhalt5 Abschnitte
Bedeutung der Signatur
Eine Signatur, auch Methodensignatur, beschreibt die formale Schnittstelle einer Funktion oder Prozedur. Sie legt fest, wie sie aufgerufen werden kann: Dazu gehören ihr Name sowie Anzahl, Art und Reihenfolge der zuweisungskompatiblen Parameterdatentypen. Parameter können Eingangs-, Ausgangs- oder Durchgangsparameter sein.
In stark typisierten Programmiersprachen zählen außerdem der Rückgabetyp und Modifikatoren zur Signatur. Modifikatoren bestimmen etwa die Sichtbarkeit einer Methode und ob sie überschrieben werden darf. Auch die Menge der Operatoren eines abstrakten Datentyps kann als dessen Signatur bezeichnet werden.
Rückgabetyp und Überladung
In Pascal-, C-Abkömmlingen und ähnlichen Sprachen wird bei Überladungen der Rückgabetyp nicht berücksichtigt. Deshalb dürfen zwei Funktionen nicht allein deshalb denselben Namen und dieselben Parametertypen haben, weil sie verschiedene Rückgabetypen liefern.
So haben float teile(int dividend, int divisor) und double teile(int a, int b) beide die Signatur teile(int, int); die zweite Deklaration ist daher nicht erlaubt. Bei boolean isNegativ(float zahl) und boolean isNegativ(double zahl) unterscheiden sich die Signaturen dagegen: isNegativ(float) beziehungsweise isNegativ(double).
Wären zwei Varianten von teile(int, int) nur durch ihren Rückgabetyp verschieden, wäre bei isNegativ(teile(x,y)) nicht entscheidbar, welche verwendet werden soll. Haskell kann ein Aufrufziel durch eine explizite Typangabe eindeutig machen: read "42" :: Integer und read "42" :: Double ergeben Werte unterschiedlichen Typs.
Signaturen in der Objektorientierung
In der objektorientierten Programmierung ist die Signatur die formale Schnittstelle einer Methode. Sie ist wichtig für Polymorphie: In vielen Programmiersprachen kann eine Methode einer abgeleiteten Klasse eine Methode der Basisklasse nur überschreiben, wenn beide identische Signaturen besitzen.
Signaturvererbung bezeichnet die Übertragung einer in der Oberklasse definierten und gegebenenfalls implementierten Methode auf eine Unterklasse. Statische Methoden mit unterschiedlicher Signatur können nicht überschrieben werden; in weniger streng strukturierten Programmiersprachen können sie gegebenenfalls überladen werden.
Überschreiben und dynamisches Verhalten
Im Java-Beispiel überschreibt NettePerson extends Person die Methode String redeMit(String name) aus Person. Für Menschen wirken die Methoden gleich signiert als String redeMit(String); der Compiler berücksichtigt jedoch zusätzlich die zugehörigen Namensräume und Klassentypen.
Eine Variable vom Typ Person kann zur Laufzeit auf ein Objekt new Person() oder new NettePerson() verweisen. Beim Aufruf p.redeMit(name) wird deshalb erst zur Laufzeit entschieden, welche Implementierung verwendet wird. Jedes Objekt besitzt dafür einen bei der Instanziierung gesetzten Zeiger auf eine Tabelle virtueller Methoden seiner Klasse. Dies ermöglicht überschreibbares Verhalten und damit Polymorphie. Unterklasseninstanzen können gegebenenfalls über Superzeiger auf überschriebene Methoden ihrer Superklassen zugreifen.
Klassenschnittstelle und interne Darstellung
Die Menge aller öffentlichen Signaturen bildet die Schnittstelle einer Klasse.
Viele C++-Compiler erzeugen aus Funktions- oder Methodennamen und der kodierten Signatur einen dekorierten Funktionsnamen, den „mangled name“. Dieser zusammengesetzte Name dient als Linkersymbol und verhindert, dass der Linker Funktionen mit gleichem Namen, aber unterschiedlicher Signatur falsch verbindet. Methodennamen enthalten zusätzlich den Klassennamen. Solche Namen sind jedoch nur mit dem passenden Compiler und Linker interpretierbar, etwa ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z.
Java verwendet ebenfalls eine interne Darstellung, den method descriptor. Anders als bei C++ ist er Teil der Sprachspezifikation und daher für alle Compiler und virtuellen Maschinen gleich. Die Methode Object meineMethode(int i, double d, Thread t) wird intern als (IDLjava/lang/Thread;)Ljava/lang/Object; dargestellt.
Lernvideos zu Signatur (Programmierung)
15:45
Hashfunktionen - Digitale Signatur
Denkbar · 55.306 Aufrufe
4:05
Was ist eine digitale Signatur? Die sichere alternative zur Unterschrift auf Papier | Kurz erklärt
Digitalzentrum Berlin · 32.571 Aufrufe
3:31
Digitale Signatur schnell und einfach erklärt
KryptoDino · 4.068 Aufrufe
7:07
Wie kann ich eine digitale Signatur prüfen? | d.velop
d.velop · 3.056 Aufrufe