Tabela de despacho - Dispatch table

Na ciência da computação , uma tabela de despacho é uma tabela de ponteiros ou endereços de memória para funções ou métodos . O uso de tal tabela é uma técnica comum ao implementar a vinculação tardia na programação orientada a objetos .

Implementação Perl

O seguinte mostra uma maneira de implementar uma tabela de despacho em Perl , usando um hash para armazenar referências ao código (também conhecido como ponteiros de função ).

# 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";

Executar este programa Perl como perl greet -h irá produzir "hello", e executá-lo como perl greet -g irá produzir "goodbye".

Implementação de JavaScript

A seguir está uma demonstração da implementação da tabela de despacho em 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]();
}

Tabelas de método virtual

Em linguagens de programação orientadas a objetos que oferecem suporte a métodos virtuais , o compilador criará automaticamente uma tabela de despacho para cada objeto de uma classe que contém métodos virtuais. Essa tabela é chamada de tabela de método virtual ou vtable , e cada chamada para um método virtual é despachada por meio da vtable.

Veja também

Referências