Newsgroup: it.comp.lang.visual-basic
Titolo: binding anticipato e binding posticipato?

Qualcun o sapiegarmi cos'e' il binding?
Che differenza c'e' tra anticipato e posticipato? 
quando si usa?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 quando si usa?
Il binding è la fase di compilazione delle query
contenute in un programma.
Siccome la fase di compilazione (bind) delle query richiede
un certo tempo, è bene effettuarla assieme alla compilazione
del programma. Questo, però, è possibile solo se le query
sono di tipo "statico" (cioé, non cambiano in fase di esecuzione).
Se, invece, abbiamo bisogno di eseguire delle query di tipo
"dinamico" (al limite, possiamo scrivere un programma che
accetta in una input box la query da eseguire sul database,
o comunque, una parte di essa), allora è necessario che il
bind sia differito (cioé, eseguito nel momento in cui si effettua
l'interrogazione del database).
Questo rallenta l'esecuzione della query, ma dà la possibilita
di specificare elementi della query che non erano previsti
(o prevedibili) in fase di compilazione.
--
Er Roscio.

 contenute in un programma.
[SNIP]
No! =) Il binding non ha nulla a che vedere con le query.
Per binding si indica la dichiarazione di un oggetto/istanza di una
classe.
Ci sono 2 tipi di binding in VB:
Anticipato (Early binding)
Posticipato (Late binding)
Nel binding anticipato viene dichiarato un riferimento ad un oggetto di
una classe specifica (generalmente aggiunta fra i riferimenti di
progetto) e si istanzia un oggetto di quella classe con l'istruzione
New.
Tale dichiarazione permette di accedere alle proprieta'/metodi/eventi
dell'oggetto direttamente dall'interfaccia. Tramite questa
dichiarazione, inoltre, e' possibile per il compilatore effettuare dei
check sul tipo a tempo di compilazione e le performance a tempo di
esecuzione sono migliori.
Es:
   Dim obj As Class1
   Set obj = New Class1
   Call obj.metodo
---
Il binding posticipato e' piu' lento ma anche il piu' facile da
supportare ed e' l'unico meccanismo supportato da VB3. In questo caso
viene dichiarata una variabile di tipo oggetto, e solo in seguito al
metodo Set o alla funzione CreateObject (a tempo di esecuzione) si
conosce il tipo dell'oggetto.
L'oggetto deve avere l'interfaccia IDispatch OLE affinche' funzioni. Non
e' necessario un typelib (ove sono memorizzate le informazioni su
proprieta' e metodi) in quanto prima viene chiamato
IDispatch::GetIDsOfNames a tempo di esecuzione per collegare il nome al
suo DISPID e poi viene eseguito IDispatch::Invoke (sempre a tempo di
esecuzione) sull'oggetto di destinazione per eseguire la proprieta' o il
metodo.
In questo caso non c'e' un controllo sul tipo a tempo di compilazione e
vengono generati errori del tipo "Proprieta' o metodo non supportato
dall'oggetto" solo a tempo di esecuzione:
Es. 1:
   Dim obj As Object
   Set obj = New Class1
   Call obj.metodo
Es. 2:
   Dim obj As Object
   Set obj = CreateObject("Class1")
   Call obj.metodo
---
Il binding anticipato e' piu' veloce in quanto non c'e' una chiamata
indiretta ad un membro attraverso l'implementazione di
IDispatch::Invoke. In pratica, con il binding anticipato (detto anche
VTable binding) le chiamate di funzione sono dirette.
---
In VB c'e' un terzo tipo di binding detto ID binding. In questo caso il
DISPID di ogni proprieta' o metodo e' fisso ed e' parte di un typelib
(descrizione di tutte le proprieta' ed i metodi dell'oggetto). In questo
caso un controllo di automazione OLE puo' leggere il DISPID dalla
libreria dei tipi (typelib) a tempo di compilazione evitando di chiamare
IDispatch::GetIDsOfNames.
Siccome necessita solo di una chiamata (Invoke) all'IDispatch che e'
generalmente due volte piu' veloce del late binding.
In pratica e' una forma di early binding, in quanto GetIDsOfNames e'
chiamato logicamente a tempo di compilazione, in quanto e' necessaria
una typelib. L'oggetto destinazione deve comunque supportare
l'interfaccia IDispatch OLE, in modo che Invoke possa essere chiamata a
tempo di esecuzione. Come nel binding anticipato, e' possibile per il
compilatore effettuare dei check sul tipo a tempo di compilazione e le
performance a tempo di esecuzione sono migliori.
hth
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

 
...


 (o prevedibili) in fase di compilazione.
Approfitto: Si ha un'idea di quanto tempo si perda per la "compilazione" di
una query?
Ho la strana sensazione che sia una frazione infinitesima del suo tempo di
esecuzione.
Sbaglio?

 wrote in message
news:RJlP8.1639$
JD5....@nreader2.kpnqwest.net
