Cos'è il legame dinamico?

In Informatica, l'associazione del nome è l'associazione di un identificatore, come una funzione o un nome di 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 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 il legame dinamico.

Ad esempio, un CLA "forma"SS potrebbe avere un metodo chiamato "getreate", perché ogni forma ha un'area. Una sottoclasse "cerchio" di "forma", tuttavia, implementerebbe "getreate" in modo diverso dal modo in cui farebbe una sottoclasse "quadrata". Pertanto, se viene creato un nuovo oggetto di tipo "forma" e se il codice chiama il metodo "getreati" 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 getreati 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 verrà utilizzata. Nell'esempio "forma", 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 GetArea specifico perquadrati. Il vantaggio del legame dinamico è che il codice è più pulito e più gestibile dell'alternativa. Nell'esempio di rilegatura 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 "getreate" potrebbe essere chiamato su un oggetto che non è una forma e quindi non ha un metodo "getreate", che potrebbe comportare un errore di runtime. Il legame statico impedirebbe questo scenario sollevando un errore di compilazione.

ALTRE LINGUE

Questo articolo è stato utile? Grazie per il feedback Grazie per il feedback

Come possiamo aiutare? Come possiamo aiutare?