Il Binding dinamico in Java – Lezione 5 di Java Avanzato

Determinare i metodi invocati con il Binding dinamico

Il Binding dinamico fa riferimento al meccanismo che determina quale metodo dovrà essere invocato ad ogni invocazione ad un qualsiasi metodo. In questa lezione vedremo come risolvere il problema dell’overloading a tempo di compilazione e dell’overriding a tempo d’esecuzione.

Il compilatore non è in grado di determinare se al momento dell’invocazione ad un metodo quale sia l’oggetto a cui è associato (polimorfismo), non conosce il tipo dell’oggetto effettivo contenuto nella variabile a runtime. Di conseguenza, il compilatore non è in grado di determinare quale metodo utilizzare poiché non conosce il contenuto della variabile.

Il Binding dinamico si divide in:

  1. Early Binding, che si occupa della risoluzione dell’overloading attraverso:

    • Individuazione delle firme candidate;
    • Seleziona della firma più specifica.

    Questa fase viene eseguita dal compilatore.

  2. Late Binding, ovvero della risoluzione dell’overriding con la JVM.

Utilizziamo un esempio, abbiamo a disposizione una variabile x con la quale si invoca un metodo f. Questo metodo accetta in ingresso due numeri:
  x.f(1,2);

Nella stessa classe in cui viene effettuata quest’invocazione, sono presenti due metodi f:

  public void f(double x, long y){}
  public void f(int x, double y){}

Quale metodo sarà invocato? Analizziamo il codice: entrambi i metodo si trovano nella stessa classe, quindi possono essere invocati senza problemi di visibilità; il tipo dei parametri è compatibile, esiste un percorso nel grafo dei tipi (1 e 2 sono compatibili rispettivamente con double e long del primo metodo, e con int e double del secondo). Sembrerebbe che non ci siano problemi… in realtà l’invocazione a metodo x.f(1,2) produrrà un errore di compilazione per ambiguità.

L’Early Binding e il Late Binding per le firme candidate

Early Binding. Si occupa a tempo di compilazione di individuare la firma che verrà utilizzata a tempo di compilazione. Nella lezione 6 ne approfondiremo il discorso.

Late Binding. All’inizio del Late Binding la JVM riceve la firma più specifica, ovvero riceve solo il nome di un metodo e il tipo dei suoi parametri. La lezione 7 è dedicata a questa specifica fase del Binding dinamico.

Il supporto del Binding Dinamico non è garantito in tutti i linguaggi di programmazione, ad esempio nel C++ deve essere abilitato inserendo la parola chiave virtual nell’intestazione del metodo interessato.

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , , , , , , , , , , , , , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*