Dispatch table

De la Viquipèdia, l'enciclopèdia lliure

En informàtica, una taula d'enviament és una taula de punters o adreces de memòria a funcions o mètodes.[1] L'ús d'aquesta taula és una tècnica comuna quan s'implementa l'enllaç tardà en la programació orientada a objectes.[2]

Implementació de Perl[modifica]

A continuació es mostra una manera d'implementar una taula de distribució en Perl, utilitzant un hash per emmagatzemar referències al codi (també conegut com a punters de funció).[3]

# Define the table using one anonymous code-ref and one named code-ref
my %dispatch = (
  "-h" => sub { return "hello\n"; },
  "-g" => \&say_goodbye
);

sub say_goodbye {
  return "goodbye\n";
}

# Fetch the code ref from the table, and invoke it
my $sub = $dispatch{$ARGV[0]};
print $sub ? $sub->() : "unknown argument\n";

Si executeu aquest programa Perl com perl greet -h es produirà "hola", i l'executar com a perl greet -g produirà "adéu".

Implementació de JavaScript[modifica]

A continuació es mostra una demostració de la implementació de la taula d'enviament en JavaScript:

var thingsWeCanDo = {
  doThisThing   : function() { /* behavior */ },
  doThatThing   : function() { /* behavior */ },
  doThisOtherThing : function() { /* behavior */ },
  default     : function() { /* behavior */ }
};

var doSomething = function(doWhat) {
  var thingToDo = thingsWeCanDo.hasOwnProperty(doWhat) ? doWhat : "default"
  thingsWeCanDo[thingToDo]();
}

Taules de mètodes virtuals[modifica]

En llenguatges de programació orientats a objectes que admeten mètodes virtuals, el compilador crearà automàticament una taula de distribució per a cada objecte d'una classe que contingui mètodes virtuals. Aquesta taula s'anomena taula de mètodes virtuals o vtable, i cada trucada a un mètode virtual s'envia a través de la vtable.[4]

Referències[modifica]

  1. Goldfuss, Alice. «Function Dispatch Tables in C» (en anglès). alicegoldfuss.com. [Consulta: 23 gener 2021].
  2. «Dynamic Dispatch and Dispatch Tables» (en anglès), 14-05-2021. [Consulta: 30 novembre 2023].
  3. «Function Dispatch Tables in C» (en anglès), 07-03-2019. [Consulta: 30 novembre 2023].
  4. «Dispatch Table Example» (en anglès). [Consulta: 30 novembre 2023].