2012-02-27 15 views
7

In diverse fonti ho letto cose diverse sull'argomento. Per esempio Wikipedia dice:Associazione dinamica == late binding in Java o no?

L'associazione tardiva viene spesso confusa con la spedizione dinamica, ma ci sono differenze significative.

linee

Ma dopo un paio di

è popolare per usare il termine tardiva in programmazione Java come sinonimo per la spedizione dinamica. In particolare, questo si riferisce al meccanismo di invio singolo di Java utilizzato con metodi virtuali.

Allora, dov'è la verità e quali sono queste "differenze significative"?

+1

Ti riferisci al caricamento Lazy? – bmoran

+1

@bmoran: No. Sta parlando di una cosa a livello di lingua più fondamentale. Vedi http://en.wikipedia.org/wiki/Late_binding#Late_binding_in_Java e http://en.wikipedia.org/wiki/Dynamic_dispatch. – Asaph

risposta

6

L'associazione tardiva e la spedizione singola dinamica sono, a tutti gli effetti, uguali. Nel singolo invio dinamico, il valore o l'identità di un singolo oggetto determina quale codice viene richiamato in fase di esecuzione, e questo è ciò che accade in Java.

Il termine spedizione dinamica in generale è più spesso utilizzato per implicare dinamica multipla spedizione, che è dove il metodo di esecuzione è scelto in fase di esecuzione in base ai identità o valori di più di un oggetto, che è una funzionalità linguistica in CLOS e Smalltalk, ma non in Java o C++.

+1

+1, ma definirei "late binding" come l'invocazione completamente ritardata di un linguaggio come Python, mentre il modello Java di dynamic single dispatch è in realtà un binding parzialmente precoce, parzialmente tardivo, molto più simile ai metodi virtuali C++ . –

+0

Avevo ipotizzato che il richiamo dinamico aggiunto in Java 7 eseguisse l'invio dinamico. http://java.sun.com/developer/technicalArticles/DynTypeLang/ Qual è la differenza? –

+0

@DanielPryden: in effetti, sarei d'accordo. Quello che chiami "completamente in ritardo", chiamo "duck typing"; questo è fondamentalmente basato sui metodi piuttosto che sulla ricerca basata sui tipi. –