stringtranslate.com

tabla de despacho

En informática , una tabla de despacho es una tabla de punteros o direcciones de memoria a funciones o métodos . [1] El uso de dicha tabla es una técnica común al implementar el enlace tardío en la programación orientada a objetos .

implementación de Perl

A continuación se muestra una forma de implementar una tabla de distribución en Perl , utilizando un hash para almacenar referencias al código (también conocido como punteros de función ).

# Definir la tabla usando un código-ref anónimo y un código-ref llamado my %dispatch = ( "-h" => sub { return "hello\n" ; }, "-g" => \& say_goodbye ); sub decir_adiós { return "adiós\n" ; } # Obtener el código de referencia de la tabla e invocarlo my $sub = $dispatch { $ARGV [ 0 ]}; imprimir $sub ? $sub -> () : "argumento desconocido\n" ;                           

Ejecutar este programa Perl como perl greet -hproducirá "hola" y ejecutarlo como perl greet -gproducirá "adiós".

Implementación de JavaScript

A continuación se muestra una demostración de cómo implementar la tabla de despacho en JavaScript:

var cosas que podemos hacer = { hacer esta cosa : función () { /* comportamiento */ }, hacer esa cosa : función () { / * comportamiento */ }, hacer esta otra cosa : función () { /* comportamiento */ }, predeterminado : función () { / * comportamiento */ } };                           var hacerAlgo = función ( hacerQué ) { var cosaQueHacer = cosas quePodemosHacer . ¿Tiene propiedad propia ( hacer qué ) ? hacerQué : cosas "predeterminadas" que podemos hacer [ cosa que hacer ](); }             

Tablas de métodos virtuales

En los lenguajes de programación orientados a objetos que admiten métodos virtuales , el compilador creará automáticamente una tabla de distribución para cada objeto de una clase que contenga métodos virtuales. Esta tabla se denomina tabla de métodos virtuales o vtable y cada llamada a un método virtual se envía a través de vtable.

Ver también

Referencias

  1. ^ Goldfuss, Alicia. "Tablas de despacho de funciones en C". alicegoldfuss.com . Consultado el 23 de enero de 2021 .