Che cos'è il binding dinamico?
In informatica, l'associazione dei nomi è l'associazione di un identificatore, come una funzione o un nome di variabile, a una sezione di codice o dati. Nello scenario più comune, l'associazione statica, questa mappatura è nota al momento della compilazione. Nell'associazione dinamica, l'oggetto mappato da una funzione non è noto al momento della compilazione e può essere determinato solo durante l'esecuzione del programma. Per questo motivo, l'associazione dinamica è anche chiamata associazione ritardata. Sebbene l'associazione dinamica offra flessibilità non disponibile con l'associazione statica, comporta anche costi di prestazioni maggiori rispetto all'associazione statica.
Il legame dinamico è strettamente correlato al polimorfismo, che fa parte della programmazione orientata agli oggetti. Il polimorfismo consente di implementare lo stesso nome di metodo in diversi modi. Se il codice non è scritto in modo tale che il metodo preciso non possa essere determinato in fase di compilazione, è necessario utilizzare l'associazione dinamica.
Ad esempio, una classe "Shape" potrebbe avere un metodo chiamato "GetArea", poiché ogni forma ha un'area. Una sottoclasse "Circle" di "Shape", tuttavia, implementerebbe "GetArea" in modo diverso da come sarebbe una sottoclasse "Square". Pertanto, se viene creato un nuovo oggetto di tipo "Forma" e se il codice chiama il metodo "GetArea" su quella forma, il compilatore non avrà modo di sapere se la forma finirà per essere un cerchio o un quadrato, e quindi non saprà quale metodo GetArea chiamare. Questo è un esempio di associazione dinamica, poiché il metodo GetArea corretto verrà mappato solo in fase di esecuzione, dopo che il programma conosce il tipo di forma dell'oggetto.
L'associazione dinamica consente la flessibilità di utilizzare metodi astratti senza sapere quale implementazione specifica verrà utilizzata. Nell'esempio "Shape", il codice potrebbe essere scritto per evitare l'associazione dinamica usando esplicitamente questa logica: Se la forma è un cerchio, chiama il metodo GetArea del cerchio; altrimenti, se la forma è un quadrato, chiama il metodo specifico GetArea per i quadrati. Il vantaggio dell'associazione dinamica è che il codice è più pulito e più gestibile rispetto all'alternativa. Nell'esempio di associazione statica è presente la duplicazione del codice e il codice deve essere aggiornato ogni volta che viene aggiunto un nuovo tipo di forma.
Gli aspetti negativi dell'associazione dinamica sono prestazioni e sicurezza. Nell'associazione statica, il compilatore sa esattamente quale codice chiamare e può ottimizzare il codice per eseguirlo in modo più efficiente. La sicurezza dei tipi può essere un problema perché, in alcune implementazioni dell'associazione dinamica, un metodo può essere chiamato su un oggetto che non supporta il metodo. Ad esempio, il metodo "GetArea" potrebbe essere chiamato su un oggetto che non è una forma e quindi non ha un metodo "GetArea", che potrebbe causare un errore di runtime. L'associazione statica impedirebbe questo scenario generando un errore di compilazione.