Enllaç tardà

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, l'enllaç tardà o l'enllaç dinàmic [1] —encara que no és un procés idèntic a l'enllaç dinàmic de biblioteques de codi importats— és un mecanisme de programació informàtica en què es busca el mètode que s'anomena a un objecte o la funció que s'anomena amb arguments pel nom en temps d'execució. En altres paraules, un nom s'associa a una operació o objecte concret en temps d'execució, en lloc de durant la compilació. El nom d'enllaç dinàmic s'utilitza de vegades, però s'utilitza més comunament per referir-se a l'àmbit dinàmic.

Amb l'enllaç precoç, o l'enllaç estàtic, en un llenguatge orientat a objectes, la fase de compilació corregeix tot tipus de variables i expressions. Normalment s'emmagatzema al programa compilat com un desplaçament en una taula de mètodes virtual ("taula v").[2] En canvi, amb l'enllaç tardà, el compilador no llegeix prou informació per verificar l'existència del mètode o enllaçar la seva ranura a la taula v. En lloc d'això, el mètode es cerca pel nom en temps d'execució.

L'avantatge principal d'utilitzar l'enllaç tardà a la programació del Model d'objectes de components (COM) és que no requereix que el compilador faci referència a les biblioteques que contenen l'objecte en temps de compilació. Això fa que el procés de compilació sigui més resistent als conflictes de versions, en els quals la taula v de la classe es pot modificar accidentalment. (Això no és una preocupació en plataformes compilades just-in-time com ara.NET o Java, perquè la taula v es crea en temps d'execució per la màquina virtual contra les biblioteques a mesura que es carreguen a l'aplicació en execució.[3])

Història[modifica]

El terme "enllaç tardà" es remunta almenys a la dècada de 1960, on es pot trobar a Comunicacions de l'ACM. El terme es va utilitzar àmpliament per descriure les convencions de trucada en idiomes com Lisp, encara que normalment amb connotacions negatives sobre el rendiment.

A la dècada de 1980, Smalltalk va popularitzar la programació orientada a objectes (OOP) i amb ella la vinculació tardana. Alan Kay va dir una vegada: "OOP per a mi només significa missatgeria, retenció local i protecció i ocultació del procés d'estat, i una vinculació tardana extrema de totes les coses. Es pot fer a Smalltalk i a LISP. Potser hi ha altres sistemes a que això és possible, però no en sóc conscient".[4]

Implementacions d'enllaç tardanes[modifica]

Enllaç tardà en llenguatges orientats a objectes de tipus dinàmic[modifica]

En la majoria dels llenguatges de tipus dinàmic, la llista de mètodes d'un objecte es pot alterar en temps d'execució. Això requereix una vinculació tardana.

Enllaç tardà en Lisp[modifica]

A Lisp, les trucades de funcions globals amb un límit tardà es busquen de manera eficient en temps d'execució mitjançant la cel·la de funció d'un símbol. Aquestes unions de funció són mutables.

Enllaç tardà en C++[modifica]

En C++, l'enllaç tardà (també anomenat "enllaç dinàmic") es refereix al que passa normalment quan s'utilitza la paraula clau virtual en la declaració d'un mètode. Aleshores, C++ crea una anomenada taula virtual, que és una taula de cerca d'aquestes funcions que sempre es consultarà quan se'ls crida.[5] Normalment, el terme "Enllaç tardana" s'utilitza a favor de "enviament dinàmic".

Referències[modifica]

  1. Schreiner, Axel-Tobias. Object-Oriented Programming With ANSI-C (en anglès). Munich: Hanser, 1994, p. 15. ISBN 3-446-17426-5. 
  2. «Using early binding and late binding in Automation» (en anglès). Microsoft, 06-09-2003. Arxivat de l'original el 2014-06-27. [Consulta: 27 juny 2014].
  3. «The Structure of the Java Virtual Machine: Dynamic Linking» (en anglès). Sun Microsystems. [Consulta: 21 setembre 2013].
  4. «Dr. Alan Kay on the Meaning of "Object-Oriented Programming"» (en anglès). Purl.org. [Consulta: 16 agost 2013].
  5. «12.5 — The virtual table « Learn C» (en anglès). Learncpp.com, 08-02-2008. [Consulta: 16 agost 2013].