Differenze tra invio dinamico e rilegatura dinamica

1

Ho cercato su Google una chiara diffrazione con esempi ma non ne ho trovato.

Sto cercando di capire le differenze tra Dynamic Dispatch e Dynamic Binding nei linguaggi orientati agli oggetti.

Per quanto ho capito, Dynamic Dispatch è ciò che accade quando il metodo concreto richiamato viene deciso in fase di esecuzione, in base al tipo concreto.

Ad esempio:

public void doStuff(SuperType object){
    object.act();
}

SuperType ha diverse sottoclassi. La classe concreta dell'oggetto sarà conosciuta solo in fase di esecuzione, pertanto l'implementazione concreta act() invocata verrà decisa in fase di runtime.

Tuttavia, non sono sicuro di cosa significhi "Dynamic Binding" e di come differisca da Dynamic Dispatch.

Per favore spiega Dynamic Binding e come è diverso da Dynamic Dispatch. Esempi di Java sarebbero i benvenuti.

    
posta Aviv Cohn 12.04.2014 - 15:12
fonte

1 risposta

3

Il binding dinamico è un altro nome per Late Binding. È qui che la lingua lega un elemento dati o un metodo a un oggetto dopo il tempo di compilazione.

Wikipedia equivale a dinamica e amp; rilegatura in ritardo:

  • Dynamic binding (computing), also known as late binding

collegamenti a

link

Javascript è stata la mia prima esposizione a questo, perché puoi semplicemente abbandonare le funzioni in oggetti volenti o nolenti e fare cose interessanti con loro.

Ad esempio (non testato, non garantito per funzionare esattamente):

var a = Object();
var do = function() { do something };
a.do = do;
a.do();
// neato!

BTW, a margine, c'è qualche dubbio sul fatto che Java sia orientato agli oggetti, perché una delle idee originali in OO era l'associazione tardiva. Sfortunatamente, questa particolare discussione sembra devolvere nei tentativi di definire "Orientato agli oggetti".

link

lol!

Sotto le copertine, Dynamic Dispatch e Dynamic Binding potrebbero funzionare allo stesso modo. Ma l'idea nel dispatch dinamico sta seguendo un puntatore di funzione per vedere quale metodo invocare effettivamente, o oggetto per invocarlo. "Binding" è l'idea che il metodo è "vincolato" a una particolare istanza (o classe di istanze) & è così che lo identifichi.

Quindi potrebbero lavorare insieme: un metodo associato a un oggetto con associazione dinamica potrebbe utilizzare l'invio dinamico quando lo chiami.

...

Anche il dispatch dinamico ha più di un sapore OO ad esso ... è il meccanismo dietro il polimorfismo, in cui un riferimento a un oggetto potrebbe puntare a una delle molteplici implementazioni. La spedizione dinamica decide in fase di esecuzione quale deve effettivamente essere eseguito. Al contrario, l'associazione tardiva sarebbe caduta in metodi completamente nuovi che non erano presenti in fase di compilazione.

    
risposta data 12.04.2014 - 16:41
fonte

Leggi altre domande sui tag