# Binding

In informatica il binding è il processo tramite cui viene effettuato il collegamento fra una entità di un software ed il suo corrispettivo valore.
Nei termini della programmazione a oggetti, la decisione circa l'attributo o il metodo da richiamare in un dato momento dell'esecuzione del programma viene effettuata grazie al binding.
Tale decisione può essere stata stabilita in anticipo in maniera fissa, e in tal caso si parla di binding statico (o early binding); oppure può essere presa a tempo di esecuzione, in maniera dinamica, e in tal caso si parla di binding dinamico (o late binding).

## Tipi di binding

Rispetto alla definizione generale di binding, uno dei più importanti discriminanti è il momento in cui il binding stesso viene stabilito, cioè il binding time. Da questo punto di vista e, in particolare, nei termini dei linguaggi compilati, si può distinguere fra binding effettuato prima, durante o dopo la compilazione.

### Binding implicito nella definizione del linguaggio

Nella definizione del linguaggio di programmazione vengono definiti i tipi delle variabili, nonché le operazioni matematiche a cui le variabili potranno essere sottoposte.

### Binding stabilito durante l'implementazione del linguaggio

Siccome una singola specifica di linguaggio può avere molteplici implementazioni, ogni diversa implementazione può prevedere una diversa controparte matematica dei tipi. Il binding stabilito durante l'implementazione specifica l'insieme dei valori rappresentabili da un dato tipo sulla base dello spazio di memoria riservato alle variabili di quel dato tipo.

### Binding statico

Binding statico, o early binding è il binding stabilito a tempo di compilazione.
Nel binding statico i tipi delle variabili sono determinati univocamente, e quindi vengono determinate univocamente le operazioni che possono essere effettuate sulle variabili; il compilatore genera il codice per chiamare un dato metodo ogni volta che quel metodo viene applicato ad un dato oggetto; questa associazione non può essere più modificata durante l'esecuzione.
In alcuni linguaggi, come in C, vi è la possibilità di creare nuovi tipi definiti dall'utente; in questo caso, il programmatore scrive nel codice una apposita dichiarazione di tipo che, una volta letta dal compilatore, permette a quest'ultimo di associare le variabili del nuovo tipo ai valori corrispondenti, sempre in maniera univoca.
In Pascal il programmatore non solo ha la possibilità di definire nuovi tipi, ma anche di ridefinire i tipi esistenti nel linguaggio (p.es. il tipo intero); in questo caso, il binding del tipo effettuato durante l'implementazione del linguaggio viene modificato dal binding effettuato all'atto della compilazione del programma (dopodiché non può essere più modificato, a meno di riscrivere il codice sorgente).
In linguaggi come il C++ il programmatore non solo ha la possibilità di definire nuovi tipi, ma anche di ridefinire gli operatori stessi del linguaggio.

### Binding dinamico

Binding dinamico, o late binding, è il binding stabilito a tempo di esecuzione.
In questo caso il compilatore non genera una volta per tutte, all'atto della compilazione, il codice per l'assegnazione dei valori delle variabili in funzione delle chiamate dei metodi, o il codice per calcolare quale metodo chiamare in funzione delle informazioni provenienti dall'oggetto - come nel binding statico - ma invece genera un codice che verrà utilizzato per calcolare quale metodo richiamare di volta in volta.
Nel binding dinamico, quindi, l'identità delle variabili è determinata a seconda del flusso di esecuzione, e non può essere stabilita a priori (variabili polimorfiche).
Il binding dinamico è molto importante ai fini del paradigma della programmazione orientata agli oggetti perché permette di implementare oggetti polimorfici.