Dispatch table
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]- ↑ Goldfuss, Alice. «Function Dispatch Tables in C» (en anglès). alicegoldfuss.com. [Consulta: 23 gener 2021].
- ↑ «Dynamic Dispatch and Dispatch Tables» (en anglès), 14-05-2021. [Consulta: 30 novembre 2023].
- ↑ «Function Dispatch Tables in C» (en anglès), 07-03-2019. [Consulta: 30 novembre 2023].
- ↑ «Dispatch Table Example» (en anglès). [Consulta: 30 novembre 2023].[Enllaç no actiu]