В информатике , таблица доставки таблица указателей или адреса памяти для функций или методов . [1] Использование такой таблицы - распространенный метод при реализации позднего связывания в объектно-ориентированном программировании .
Реализация Perl
Ниже показан один из способов реализации таблицы диспетчеризации в Perl с использованием хэша для хранения ссылок на код (также известных как указатели на функции ).
# Определите таблицу, используя одну анонимную ссылку на код и одну с именем code-ref my % dispatch = ( "-h" => sub { return "hello \ n" ; }, "-g" => \ & say_goodbye ); sub say_goodbye { вернуть "до свидания \ п" ; } # Получить код ref из таблицы и вызвать его my $ sub = $ dispatch { $ ARGV [ 0 ]}; распечатать $ sub ? $ sub -> () : "неизвестный аргумент \ n" ;
Запуск этой Perl-программы от имени perl greet -h
приведет к «привет», а запуск от имени perl greet -g
- к «до свидания».
Реализация JavaScript
Ниже приведена демонстрация реализации таблицы диспетчеризации в JavaScript:
var thingsWeCanDo = { doThisThing : function () { / * поведение * / }, doThatThing : function () { / * поведение * / }, doThisOtherThing : function () { / * поведение * / }, по умолчанию : function () { / * поведение * / } };var doSomething = function ( doWhat ) { var thingToDo = thingsWeCanDo . hasOwnProperty ( doWhat ) ? doWhat : " по умолчанию" thingsWeCanDo [ thingToDo ] (); }
Таблицы виртуальных методов
В объектно-ориентированных языках программирования , поддерживающих виртуальные методы , компилятор автоматически создает таблицу диспетчеризации для каждого объекта класса, содержащего виртуальные методы. Эта таблица называется таблицей виртуальных методов или vtable , и каждый вызов виртуального метода отправляется через vtable.
Смотрите также
Рекомендации
- ^ Goldfuss, Алиса. «Таблицы диспетчеризации функций на языке C» . alicegoldfuss.com . Проверено 23 января 2021 года .
- Диомидис Спинеллис (2003). Чтение кода : перспектива открытого исходного кода . Бостон, Массачусетс: Аддисон-Уэсли. ISBN 0-201-79940-5