Skip to main content

Cos'è il legame dinamico?

Nell'informatica, l'associazione del nome è l'associazione di un identificatore, come una funzione o un nome variabile, a una sezione di codice o dati.Nello scenario più comune, legame statico, questa mappatura è nota al momento della compilazione.Nel legame dinamico, l'oggetto mappato da una funzione non è noto al tempo di compilazione e può essere determinato solo durante il tempo di esecuzione del programma.Per questo motivo, il legame dinamico è anche chiamato legame tardivo.Sebbene il legame dinamico offra flessibilità non disponibile con il legame statico, comporta anche più costi di prestazione rispetto al legame statico. Il legame dinamico è strettamente correlato al polimorfismo, che fa parte della programmazione orientata agli oggetti.Il polimorfismo consente di implementare lo stesso nome del metodo in modi diversi.Se il codice non è scritto in modo tale che il metodo preciso non possa essere determinato al momento della compilazione, è necessario utilizzare un legame dinamico.

Ad esempio, una classe di forma potrebbe avere un metodo chiamato getrea, perché ogni forma ha un'area.Una sottoclasse di forma del cerchio, tuttavia, implementerebbe getarea in modo diverso dal modo in cui farebbe una sottoclasse quadrata.Pertanto, se viene creato un nuovo oggetto di forma di tipo e se il codice chiama il metodo getrea su quella forma, il compilatore non avrà modo di sapere se la forma finirà per essere un cerchio o un quadrato, e quindi non lo sapràquale metodo GetArea da chiamare.Questo è un esempio di legame dinamico, perché il metodo GetArea corretto verrà mappato solo in fase di esecuzione, dopo che il programma sa che tipo di forma è l'oggetto.

Il legame dinamico consente la flessibilità di utilizzare metodi astratti senza sapere quale implementazione specifica saràessere usato.Nell'esempio di forma, il codice potrebbe essere scritto per evitare il legame dinamico usando esplicitamente questa logica: se la forma è un cerchio, chiama il metodo di GetArea di cerchi;Altrimenti, se la forma è un quadrato, chiama il metodo GetArea specifico per i quadrati.Il vantaggio del legame dinamico è che il codice è più pulito e più gestibile dell'alternativa.Nell'esempio di associazione statica, esiste una duplicazione del codice e il codice deve essere aggiornato ogni volta che viene aggiunto un nuovo tipo di forma.

Gli aspetti negativi del legame dinamico sono prestazioni e sicurezza.In binding statico, il compilatore sa esattamente quale codice chiamare e può ottimizzare il codice per eseguire in modo più efficiente.La sicurezza del tipo può essere un problema perché, in alcune implementazioni di legame dinamico, 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 comportare un errore di runtime.Il legame statico impedirebbe questo scenario sollevando un errore di compilazione.