Pages: [1] 2   Go Down
Print
Author Topic: dynamic dispatch  (Read 2086 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
golvellius
Apprendista Forumista
**
Offline Offline

Posts: 124


« on: 20-05-2013, 13:21:54 »

Buongiorno a tutti,

sto avendo qualche difficoltà a capire per bene questo concetto e ho un po' di confusione a riguardo, insomma in testa ho un po' confuso il concetto di binding dinamico (quello che conosco in java) con il Dynamic Method Invocation degli appunti (Notes on OO and OCaml) e leggendo e rileggendo gli appunti non sto riuscendo a far chiarezza.


Qualcuno potrebbe gentilmente chiarirmi brevemente in cosa consiste questo concetto di dynamic dispatch o se magari ha qualche link che possa chiarirmi meglio il concetto?
 
Al solito mi scuso qualora questa domanda fosse stata detta e ridetta a lezione ma non ho modo di seguire purtroppo.

Grazie mille 
Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #1 on: 20-05-2013, 13:49:30 »

Una cosa per volta.
Fornisci per prima cosa quello che hai capito del binding dinamico,
cosi' vediamo in cosa si differenzia.

FB
Logged
golvellius
Apprendista Forumista
**
Offline Offline

Posts: 124


« Reply #2 on: 20-05-2013, 14:26:07 »

Io so che in java i metodi sono legati al tipo dell'istanza e non a quello del reference e che ogni classe ha come tipo sia il proprio, sia quello della superclasse.

Nel caso per esempio di:

Bicicletta b = new Motorino();

Creiamo un oggetto di tipo Motorino abbinato a un reference di tipo Bicicletta.

Il binding consiste nell'associare il corpo di un metodo alla rispettiva classe e in java la chiamata

b.muovi();

mi richiamerà il metodo muovi() della classe Motorino() e non il metodo muovi() della classe Bicicletta.

Da quello che ho capito il binding (che dovrebbe significare dall'inglese "collante" o un qualcosa che "lega") dinamico consiste in parole povere in questo meccanismo di associazione del corpo di una funzione, ed è dinamico in quanto avviene a runtime invece che in compilazione.

Spero di non aver detto assurdità    


« Last Edit: 20-05-2013, 14:27:58 by golvellius » Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #3 on: 20-05-2013, 15:31:36 »

Il senso di binding e' "legame", ma piu' nell'accezione di "collegamento".

FB
Logged
golvellius
Apprendista Forumista
**
Offline Offline

Posts: 124


« Reply #4 on: 20-05-2013, 15:50:27 »

Quindi è giusto vederlo come un "collegamento" al metodo corrispondente.

Ma allora con "Dynamic Method Invocation" e "Binding Dinamico" si potrebbe pensare di indicare la stessa cosa?

E con dynamic dispatch?


Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #5 on: 20-05-2013, 17:44:25 »

Quote
Io so che in java i metodi sono legati al tipo dell'istanza e non a quello del reference e che ogni classe ha come tipo sia il proprio, sia quello della superclasse.

Non mi pare il massimo della chiarezza....

E poi, per uno come te che ha studiato il concetto di subtyping in Java (in FJ per la precisione),
dire
Quote
ogni classe ha come tipo sia il proprio, sia quello della superclasse
non e' un po' impreciso?.

Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #6 on: 20-05-2013, 17:52:44 »

Dynamic dispatch e late binding sono spesso utilizzati come sinonimi.

Dal mio punto di vista hanno dei significati non coincidenti, ma e' un argomento
su cui si puo' comunque discutere.
Diciamo che io sono abbastanza d'accordo con quanto si puo' ritrovare anche su Wikipedia e che riporto
nel seguito.

Salutoni
FB


In computer science, dynamic dispatch is the process of selecting which implementation of a polymorphic operation (method or function) to call at runtime. Dynamic dispatch contrasts with static dispatch in which the implementation of a polymorphic operation is selected at compile-time. The purpose of dynamic dispatch is to support cases where the appropriate implementation of a polymorphic operation can't be determined at compile time because it depends on the runtime type of one or more actual parameters to the operation.

Dynamic dispatch is different from dynamic or late binding. In the context of selecting an operation, binding refers to the process of associating a name with an operation. Dispatching refers to choosing an implementation for the operation after you have decided which operation a name refers to. With dynamic dispatch, the name may be bound to a polymorphic operation at compile time, but the implementation not be chosen until runtime (this is how dynamic dispatch works in C++). However, late binding does imply dynamic dispatching since you cannot choose which implementation of a polymorphic operation to select until you have selected the operation that the name refers to.

Dynamic dispatch is often used in object-oriented languages when different classes contain different implementations of the same method due to common inheritance. For example, suppose you have classes A, B, and C, where B and C both inherit the method foo() from A. Now suppose x is variable of class A. At run time, x may actually have a value of type B or C and in general you can't know what it is at compile time.

With static dispatch, a method call x.foo() will always refer to the the implemention of foo() for class A because static binding only looks at the declared type of the object. With dynamic dispatch the language will determine the type of the value of x at run-time and call the version of foo() that is associated with whatever type the value has, whether A, B, or C.
Logged
golvellius
Apprendista Forumista
**
Offline Offline

Posts: 124


« Reply #7 on: 20-05-2013, 19:03:44 »

Quote
E poi, per uno come te che ha studiato il concetto di subtyping in Java (in FJ per la precisione),
dire
Quote
ogni classe ha come tipo sia il proprio, sia quello della superclasse
non e' un po' impreciso?.



Spero di essere più preciso correggendo la frase in: "ogni classe ha come tipo sia il proprio, sia quello di TUTTE le sue superclassi".

Quote

Dynamic dispatch e late binding sono spesso utilizzati come sinonimi.

Dal mio punto di vista hanno dei significati non coincidenti, ma e' un argomento
su cui si puo' comunque discutere.
Diciamo che io sono abbastanza d'accordo con quanto si puo' ritrovare anche su Wikipedia e che riporto
nel seguito.

Salutoni
FB


In computer science, dynamic dispatch is the process of selecting which implementation of a polymorphic operation (method or function) to call at runtime. Dynamic dispatch contrasts with static dispatch in which the implementation of a polymorphic operation is selected at compile-time. The purpose of dynamic dispatch is to support cases where the appropriate implementation of a polymorphic operation can't be determined at compile time because it depends on the runtime type of one or more actual parameters to the operation.

Dynamic dispatch is different from dynamic or late binding. In the context of selecting an operation, binding refers to the process of associating a name with an operation. Dispatching refers to choosing an implementation for the operation after you have decided which operation a name refers to. With dynamic dispatch, the name may be bound to a polymorphic operation at compile time, but the implementation not be chosen until runtime (this is how dynamic dispatch works in C++). However, late binding does imply dynamic dispatching since you cannot choose which implementation of a polymorphic operation to select until you have selected the operation that the name refers to.

Dynamic dispatch is often used in object-oriented languages when different classes contain different implementations of the same method due to common inheritance. For example, suppose you have classes A, B, and C, where B and C both inherit the method foo() from A. Now suppose x is variable of class A. At run time, x may actually have a value of type B or C and in general you can't know what it is at compile time.

With static dispatch, a method call x.foo() will always refer to the the implemention of foo() for class A because static binding only looks at the declared type of the object. With dynamic dispatch the language will determine the type of the value of x at run-time and call the version of foo() that is associated with whatever type the value has, whether A, B, or C.


Grazie mille per le risposte professore, mi applico un po' su quanto discusso oggi e cerco di fare mio il concetto.
Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #8 on: 21-05-2013, 10:14:10 »

Quote
Spero di essere più preciso correggendo la frase in: "ogni classe ha come tipo sia il proprio, sia quello di TUTTE le sue superclassi".

Ma stai parlando di tipo delle classi o di tipo degli oggetti delle classi?
Logged
golvellius
Apprendista Forumista
**
Offline Offline

Posts: 124


« Reply #9 on: 21-05-2013, 11:14:35 »

Di tipo delle classi, per cercare di chiarirmi un po' le idee sul binding dinamico ho dato un'occhiata a questa definizione su un manuale java che ho a casa:

http://it.scribd.com/doc/81568618/71/Binding-dinamico

e da qui ho cercato di venirne fuori sul concetto generale di binding dinamico in java, ma regna ancora probabilmente un po' di confusione che un altro po' di studio chiarirà 

Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #10 on: 21-05-2013, 14:33:12 »

Quote
Di tipo delle classi,


Non e' quello che e' scritto sul testo a cui hai fatto riferimento.
Infatti e' scritto.

Ogni classe denota un tipo. Tuttavia, come conseguenza dell’ereditarietà, ogni classe ha come tipo sia il proprio sia quello di tutte le sue superclassi.

Le parole ...ogni classe ha come tipo ... vanno intese come
ogni classe ha come tipo ad essa associato

Si puo' anche parlare di tipi delle classi, ma non sono i tipi a cui sta facendo riferimento il testo,
e non ne abbiamo discusso.

FB
Logged
golvellius
Apprendista Forumista
**
Offline Offline

Posts: 124


« Reply #11 on: 21-05-2013, 14:39:00 »


Quote

Le parole ...ogni classe ha come tipo ... vanno intese come
ogni classe ha come tipo ad essa associato

Si puo' anche parlare di tipi delle classi, ma non sono i tipi a cui sta facendo riferimento il testo,
e non ne abbiamo discusso.


Grazie per i chiarimenti professore, effettivamente avevo inteso male.
Logged
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #12 on: 21-05-2013, 15:00:11 »

Professore, mi scusi ma quindi Dynamic Dispatch e Dynamic Method Invocation sono due cose distinte?

Io studiando le note sulla programmazzione O.O e Ocaml ho capito il contrario ! testate
Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.075



WWW
« Reply #13 on: 21-05-2013, 15:20:34 »

Professore, mi scusi ma quindi Dynamic Dispatch e Dynamic Method Invocation sono due cose distinte?

Io studiando le note sulla programmazzione O.O e Ocaml ho capito il contrario ! testate


Abbiamo parlato di dynamic dispatch e dynamic binding.

FB
Logged
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #14 on: 21-05-2013, 15:27:21 »

Professore, mi scusi ma quindi Dynamic Dispatch e Dynamic Method Invocation sono due cose distinte?

Io studiando le note sulla programmazzione O.O e Ocaml ho capito il contrario ! testate


Abbiamo parlato di dynamic dispatch e dynamic binding.

FB

Professore , possiamo riprendere questi due concetti domani a lezione ?
Logged
Pages: [1] 2   Go Up
Print
Jump to: