Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Binding statico e dinamico

348 views
Skip to first unread message

Franco Lombardo

unread,
Sep 26, 2003, 2:41:49 AM9/26/03
to
Ciao a tutti,

ha fatto qualche ricerca su google, trovando notizie molto frammentarie.

Qualcuno di voi ha qualche riferimento da darmi per capire meglio il
concetto di binding statico e dinamico dei metodi in Java?

Grazie mille.

Ciao

Franco


Gianluca

unread,
Sep 26, 2003, 4:18:31 AM9/26/03
to

In java il binding statico non esiste, lo trovi nel c++,
esiste solo binding dinamico.
Ciao
Luca

sardauker

unread,
Sep 26, 2003, 4:48:59 AM9/26/03
to
Gianluca wrote:

> On Fri, 26 Sep 2003 08:41:49 +0200, "Franco Lombardo"
> <f_lom...@hotmail.com> wrote:
>


>>Qualcuno di voi ha qualche riferimento da darmi per capire meglio il
>>concetto di binding statico e dinamico dei metodi in Java?

> In java il binding statico non esiste, lo trovi nel c++,
> esiste solo binding dinamico.


Se non sbaglio i metodi static hanno un binding statico, quindi in fase di
compilazione. Questo perche non sono polimorfici. I metodi non static hanno
invece binding dinamico dato che in compilazione non è possibile sapere
quale dei possibili metodi overrided deve essere invocato.

Ciao

Luca

Sergio B.

unread,
Sep 26, 2003, 5:13:22 AM9/26/03
to

"Franco Lombardo" <f_lom...@hotmail.com> ha scritto nel messaggio:

> Il concetto di binding statico e dinamico dei metodi in Java

Il concetto di "binding" si riferisce al collegamento della chiamata di un
metodo/funzione al suo relativo corpo, al suo "pezzo di codice".
Es. in linguaggio C (per capirlo non c'è bisogno che tu lo conosca):

--> la chiamata di funzione:
stampa("Ti anticipo che questo è un binding statico");
--> sarà collegata a:
void stampa(char *s)
{
printf("%s", s);
}

Fin qui, ok.
Tuttavia, ci sono appunto due tipi di collegamento: statico e dinamico.
Nell'esempio mostrato il binding è di tipo STATICO poichè il collegamento
viene effettuato in fase di compilazione/linking: prima dell'esecuzione del
programma, quindi,ogni chiamata deve essere univocamente e sicuramente
collegata al suo effettivo codice; tale collegamento non può essere
indefinito (il compilatore/linker ti darebbe errore) e non può cambiare in
fase di esecuzione!
Il binding DINAMICO, invece, concede molta più flessibilità, poichè il
collegamento avviene in questo caso in fase di esecuzione a seconda del tipo
di oggetto che effettua la chiamata: il compilatore si preoccuperà solo di
assicurare che la chiamata sia collegabile a "qualche" metodo di quella
classe o di una sua derivata, senza interessarsi di "quale" sarà.
Ciò è fondamentale per permettere il polimorfismo.
Es. in Java:

--> abbiamo due classi, l'una derivata dall'altra:

class Base
{
public void stampa()
{
System.out.println("Classe Base");
}
}

class Derivata extends Base
{
public void stampa()
{
System.out.println("Classe Derivata");
}
}

--> se poi da qualche parte ho:

Base c; // riferimento alla classe base

// assegno al riferimento c, a seconda di qualche condizione, un oggetto
Base o Derivata...

c.stampa();

--> ... stamperò un messaggio diverso a seconda dell'oggetto a cui si
riferisce c!

La chiamata al metodo, quindi, non viene staticamente assegnata ad un
determinato codice, ma dinamicamente collegata a seconda del tipo di
oggetto!
In C il collegamento dinamico non esiste.
In C++ lo devi richiedere esplicitamente.
In Java è invece il comportamento di default, tranne che tu non dichiari i
tuoi metodi "final"; in questo caso ne bloccherai il collegamento dinamico
e, cosa più importante, ne vieterai l'override.
Spero di non essermi dilungato troppo e di essere stato comunque chiaro.
Saluti,

Sergio B.


Sergio B.

unread,
Sep 26, 2003, 5:24:41 AM9/26/03
to
P.S.
Dimenticavo: in Java, sono collegati staticamente anche i metodi privati e
quelli statici.
Saluti,

Sergio B.


Franco Lombardo

unread,
Sep 29, 2003, 11:47:59 AM9/29/03
to
Grazie a tutti.

Ciao

Franco


0 new messages