Vazba jména - Name binding
v programovací jazyky, vázání jmen je sdružení subjektů (dat a / nebo kódu) s identifikátory.[1] Říká se, že identifikátor vázaný na objekt odkaz ten objekt. Jazyky strojů nemají žádné integrované pojetí identifikátorů, ale vazby název-objekt jako služba a notace pro programátora jsou implementovány programovacími jazyky. Vazba je úzce spojena s scoping, protože rozsah určuje, která jména se vážou na které objekty - na jakých místech v kódu programu (lexikálně ) a ve kterém je jedna z možných cest provedení (dočasně ).
Použití identifikátoru id
v kontextu, který vytváří vazbu pro id
se nazývá vazebný (nebo definující) výskyt. Ve všech ostatních výskytech (např. Ve výrazech, přiřazeních a voláních podprogramu) znamená identifikátor to, na co je vázán; takové výskyty se nazývají aplikované výskyty.
Závazná doba
- Statická vazba (nebo časná vazba) je vazba názvu provedená před spuštěním programu [2].
- Dynamická vazba (nebo pozdní vazba nebo virtuální vazba) je vazba názvu prováděná za běhu programu [2].
Příkladem statické vazby je přímá C volání funkce: funkce odkazovaná identifikátorem se za běhu nemůže změnit.
Ale příklad dynamické vazby je dynamické odesílání, jako v a C ++ volání virtuální metody. Protože konkrétní typ a polymorfní objekt není znám před runtime (obecně), vykonaná funkce je dynamicky vázána. Vezměte si například následující Jáva kód:
veřejnost prázdnota foo(Jáva.util.Seznam<Tětiva> seznam) { seznam.přidat("bar");}
Seznam
je rozhraní, tak seznam
musí odkazovat na a podtyp toho. Je to odkaz na a Spojový seznam
, an ArrayList
nebo nějaké jiné podtyp z Seznam
? Skutečná metoda, na kterou odkazuje přidat
není známo až do běhu. V jazyce C může být takovou instancí dynamické vazby volání funkce, na kterou ukazuje proměnná nebo výraz typu ukazatele funkce, jehož hodnota není známa, dokud se ve skutečnosti za běhu nevyhodnocuje.
Navázání a mutace
Rebinding by neměl být zaměňován s mutací.
- Rebinding je změna odkazování identifikátor.
- Mutace je změna odkazováno subjekt.
Zvažte následující Jáva kód:
Spojový seznam<Tětiva> seznam;seznam = Nový Spojový seznam<Tětiva>();seznam.přidat("foo");seznam = nula;
Identifikátor seznam
zpočátku nic neodkazuje (je neinicializováno ); poté se odskočí na odkaz na objekt (propojený seznam řetězců). Propojený seznam, na který odkazuje seznam
je poté mutován a do seznamu přidán řetězec. Nakonec seznam
odskočí na nula
.
Pozdní statické
Pozdní statická vazba je varianta vazby někde mezi statickou a dynamickou vazbou. Zvažte následující PHP příklad:
třída A{ veřejnost statický $ slovo = "Ahoj"; veřejnost statický funkce Ahoj() { tisk já::$ slovo; }}třída B rozšiřuje A{ veřejnost statický $ slovo = "sbohem";}B::Ahoj();
V tomto příkladu překladač PHP váže klíčové slovo já
uvnitř A :: ahoj ()
do třídy A
, a tak volání na B :: ahoj ()
vytvoří řetězec „ahoj“. Pokud je sémantika self :: $ slovo
byl založen na pozdní statické vazbě, pak by výsledek byl „ahoj“.
Počínaje verzí PHP 5.3 je podporována pozdní statická vazba.[3] Konkrétně pokud self :: $ slovo
ve výše uvedeném byly změněny na static :: $ word
jak je znázorněno v následujícím bloku, kde je klíčové slovo statický
by byl vázán pouze za běhu, pak výsledek volání B :: ahoj ()
bude „ahoj“:
třída A{ veřejnost statický $ slovo = "Ahoj"; veřejnost statický funkce Ahoj() { tisk statický::$ slovo; }}třída B rozšiřuje A{ veřejnost statický $ slovo = "sbohem";}B::Ahoj();
Viz také
- Pozdní vazba
- Tabulka větví způsob použití vázání jmen pomocí větvové tabulky nebo ukazatelů funkcí
- Dynamické odesílání
- Abstraktní syntaxe vyššího řádu (HOAS)
Reference
- ^ Microsoft (11. května 2007), Použití časné vazby a pozdní vazby v automatizaci, Microsoft, vyvoláno 11. května 2009
- ^ A b Systémy a softwarové inženýrství - Slovník ISO / IEC / IEEE 24765: 2010 (E), IEEE, 15. prosince 2010
- ^ „Pozdní statické vazby“. Citováno 3. července 2013.