Namebindung
Im Programmiersprachen, Namebindung ist die Assoziation von Entitäten (Daten und/oder Code) mit Kennungen.[1] Eine an ein Objekt gebundene Bezeichnung wird gesagt Hinweis das Objekt. Maschinensprachen Sie haben keinen integrierten Begriff von Kennungen, aber Namen-Objektbindungen als Dienst und Notation für den Programmierer werden durch Programmiersprachen implementiert. Die Bindung ist eng miteinander verbunden mit Scoping, wie Geltungsbereich bestimmt, welche Namen an welche Objekte binden - an welchen Standorten im Programmcode (lexikalisch) und in welchem einer der möglichen Ausführungspfade (zeitlich).
Verwendung einer Kennung Ich würde
in einem Kontext, der eine Bindung für darstellt Ich würde
wird als Bindungsaufkommen bezeichnet (oder definiert). Bei allen anderen Vorkommen (z. B. bei Ausdrücken, Zuordnungen und Subprogram -Aufrufen) steht ein Kennung für das, worauf es gebunden ist; Solche Vorkommen werden als angewandte Vorkommen bezeichnet.
Bindungszeit
- Statische Bindung (oder Frühe Bindung) Ist die Namensbindung durchgeführt, bevor das Programm ausgeführt wird.[2]
- Dynamische Bindung (oder späte Bindung oder Virtuelle Bindung) Ist Namebindung durchgeführt, wenn das Programm ausgeführt wird.[2]
Ein Beispiel für eine statische Bindung ist direkt C Funktionsaufruf: Die von der Kennung verwiesene Funktion kann nicht zur Laufzeit geändert werden.
Ein Beispiel für dynamische Bindung ist jedoch Dynamischer Versandwie in a C ++ Virtuelle Methode Anruf. Seit der spezifischen Art von a polymorph Objekt ist vor der Laufzeit (im Allgemeinen) nicht bekannt, die ausgeführte Funktion ist dynamisch gebunden. Nehmen Sie zum Beispiel Folgendes Java Code:
Öffentlichkeit Leere Foo(Java.Util.Aufführen<Saite> aufführen) { aufführen.hinzufügen("Bar"); }
Aufführen
ist ein Schnittstelle, Also aufführen
muss sich auf a beziehen Subtyp davon. Ist es ein Hinweis auf a LinkedList
, ein Anordnungsliste
oder ein anderer Subtyp von Aufführen
? Die tatsächliche Methode, auf die verwiesen wird hinzufügen
ist bis zur Laufzeit nicht bekannt. In C kann eine solche Instanz der dynamischen Bindung ein Aufruf auf eine Funktion sein, auf die durch eine Variable oder eine Expression von a hingewiesen wird Funktionszeiger Typ, dessen Wert unbekannt ist, bis er zur Laufzeit tatsächlich bewertet wird.
Wiederherstellung und Mutation
Das Wiederherstellen sollte nicht mit Mutation verwechselt werden.
- Wieder aufrüsten ist eine Änderung der Referenzierung Kennung.
- Mutation ist eine Änderung der verwiesen Einheit.
Folgendes berücksichtigen Java Code:
LinkedList<Saite> aufführen; aufführen = Neu LinkedList<Saite>(); aufführen.hinzufügen("Foo"); aufführen = Null;
Die Kennung aufführen
Anfangs verweist nichts (es ist nicht initialisiert); Es wird dann erholt, um ein Objekt zu verweisen (eine verknüpfte Liste von Zeichenfolgen). Die verknüpfte Liste, auf die verwiesen wird aufführen
wird dann mutiert und fügen Sie der Liste eine Zeichenfolge hinzu. Zuletzt, aufführen
ist abprallt Null
.
Spätstatisch
Die späte statische Bindung ist eine Variante der Bindung irgendwo zwischen statischer und dynamischer Bindung. Folgendes berücksichtigen Php Beispiel:
Klasse A { Öffentlichkeit statisch $ word = "hallo"; Öffentlichkeit statisch Funktion hallo() { drucken selbst::$ word; } } Klasse B erweitert A { Öffentlichkeit statisch $ word = "Wiedersehen"; } B::hallo();
In diesem Beispiel bindet der PHP -Interpreter das Schlüsselwort selbst
Innerhalb Ein Hallo()
zur Klasse A
und so der Anruf zu B :: Hallo ()
produziert die Zeichenfolge "Hallo". Wenn die Semantik von Selbst :: $ Wort
Wäre auf einer späten statischen Bindung beruht, wäre das Ergebnis "Tschüss" gewesen.
Beginnend mit PHP Version 5.3 wird eine späte statische Bindung unterstützt.[3] Speziell, wenn Selbst :: $ Wort
Im obigen wurden in geändert statisch :: $ word
Wie im folgenden Block gezeigt, wobei das Schlüsselwort statisch
würde nur zur Laufzeit gebunden sein, dann das Ergebnis des Anrufs an B :: Hallo ()
wäre "tschüss":
Klasse A { Öffentlichkeit statisch $ word = "hallo"; Öffentlichkeit statisch Funktion hallo() { drucken statisch::$ word; } } Klasse B erweitert A { Öffentlichkeit statisch $ word = "Wiedersehen"; } B::hallo();
Siehe auch
- Späte Bindung
- Zweigtisch Methode zur Anwendung der Namensbindung über Zweig Tabelle oder Funktionszeiger
- Dynamischer Versand
- Abstract Syntax höherer Ordnung (HOAS)
Verweise
- ^ Microsoft (11. Mai 2007), Verwenden der frühen Bindung und verspäteter Bindung in der Automatisierung, Microsoft, abgerufen 11. Mai, 2009
- ^ a b Systeme und Software -Engineering - Vokabular ISO/IEC/IEEE 24765: 2010 (E), IEEE, 15. Dezember 2010
- ^ "Späte statische Bindungen". Abgerufen 3. Juli, 2013.