Zum Inhalt springen
L

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
  1. 1. Bedeutung der Signatur
  2. 2. Rückgabetyp und Überladung
  3. 3. Signaturen in der Objektorientierung
  4. 4. Überschreiben und dynamisches Verhalten
  5. 5. Klassenschnittstelle und interne Darstellung

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)

Weiterlesen

Programmierung Beim Programmieren sind wesentliche Aspekte zur Softwarequalität zu berücksichtigen und durch die Gestaltung des Quellcodes umzusetzen. Siehe dazu als Beispiele … Funktion (Programmierung) Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, … Parameter (Informatik) Parameter – (deutsch) auch Übergabewerte genannt – sind in der Informatik Variablen, durch die ein Computerprogramm (oft ein Unterprogramm) auf die … Objektorientierte Programmierung Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin … Überladen Überladen (von englisch overloading) bedeutet in der Softwareentwicklung das bewusste Etablieren von Polymorphien, sodass ein und dasselbe Sprachelement … Abstrakter Datentyp Ein Abstrakter Datentyp (ADT) ist ein Verbund von Daten zusammen mit der Definition aller zulässigen Operationen, die auf sie zugreifen. Methode (Programmierung) Methoden (englisch method oder member function) sind in der objektorientierten Programmierung Unterprogramme in der Form von Funktionen oder Prozeduren, … Polymorphie (Programmierung) Polymorphie oder Polymorphismus (griechisch für Vielgestaltigkeit) ist ein Konzept in der objektorientierten Programmierung, das ermöglicht, … Objektorientierung Unter Objektorientierung (kurz OO) versteht man in der Softwaretechnik eine Sichtweise auf komplexe Systeme, bei der ein System durch das Zusammenspiel … Java (Programmiersprache) Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems, welches 2010 von Oracle übernommen wurde. Objekt (Programmierung) Ein Objekt in der Programmierung bezeichnet eine inhaltlich zusammengehörige Datenmenge: In der objektorientierten Programmierung wird eine Objektinstanz … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten.