Con il meccanismo dell'ereditarietà, i metodi si trovano spesso, nelle classi di livello superiare a meno che una classe non sia stata specializzata con metodi locali.
Può nascere un problema complesso se il metodo locale ha lo stesso nome di un metodo che è localizzato un una delle superclassi. Allo scopo di gestire una tale situazione, che può altrimenti generare del "caos" durante l'elaborazione, si introduce il meccanismo del binding che permette di collegare il nome del metodo invocato alla sua implementazione dovunque e comunque essa si trovi. Vi sono due tipi di binding: binding statico e binding dinamico.

 

Binding statico

Il compilatore crea una mappa di associazioni metodo-implementazione, prima della compilazione del codice, una volta per tutte.

 

Binding dinamico

In questo caso la mappa di associazioni metodo-implementazione viene creata in tempo reale durante l'elaborazione del sistema, all'invocazione del metodo.

Vantaggio: supporta il principio dell'evoluzione senza ricompilare il codice.

Svantaggio: si spende del tempo per la ricerca del metodo.

Il "binding" dinamico (o late binding) consiste nel determinare a tempo d'esecuzione, anzichè a tempo di compilazione, la parte di codice da associare alla invocazione di una operazione su un dato oggetto.

Sia ad es. A un vettore di N oggetti della classe Figura_Geometrica, ovvero composto di oggetti delle sottoclassi Triangolo, Rettangolo, etc. Si consideri una funzione Disegna_Figure(), che contiene il seguente ciclo di istruzioni:

for i = 1 to N do
A[i].disegna()

L'esecuzione del ciclo richiede che sia possibile determinare dinamicamente, cioè a tempo d'esecuzione, l'implementazione della operazione disegna() da eseguire, in dipendenza dal tipo (dinamico) dell'oggetto A[i]. In tal modo il ciclo precedente non ha bisogno di essere modificato in conseguenza dell'aggiunta di una nuova sottoclasse di Figure_Geometriche, anche se tale sottoclasse non era stata neppure prevista all'atto della stesura della funzione Disegna_Figure(). (Si confronti con il caso dell'uso di una istruzione case nella programmazione tradizionale).

Il polimorfismo ed il binding dinamico si ritrovano nel linguaggio C++ nel concetto di funzioni virtuali.