Динамическая идентификация типа данных

Динамическая идентификация типа данных

Динамическая идентификация типа данных (англ. Run-time type information, Run-time type identification, RTTI) — механизм в некоторых языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.

Содержание

Реализация

Существует множество реализаций такого механизма, но наиболее распространенными являются:

  • таблица указателей на объекты;
  • хранение информации об объекте в памяти вместе с ним.

Таким образом, операция определения типа сводится либо к поиску в таблице, либо к просмотру нескольких байт до адреса, на который указывает указатель на объект. У каждого способа есть свои преимущества и недостатки[уточнить].

C++

В C++ для динамической идентификации типов[1] применяются операторы dynamic_cast и typeid (определён в файле typeinfo.h), для использования которых информацию о типах во время выполнения обычно необходимо добавить через опции компилятора при компиляции модуля.

Оператор dynamic_cast пытается выполнить приведение к указанному типу с проверкой. Целевой тип операции должен быть типом указателя, ссылки или void*.

  • Если целевой тип — тип указателя, то аргументом должен быть указатель на объект класса.
  • Если целевой тип — ссылка, то аргумент должен также быть соответствующей ссылкой.
  • Если целевым типом является void*, то аргумент также должен быть указателем, а результатом операции будет указатель, с помощью которого можно обратиться к любому элементу «самого производного» класса иерархии, который сам не может быть базовым ни для какого другого класса.

Оператор typeid[2] возвращает ссылку на структуру type_info, которая содержит поля, позволяющие получить информацию о типе.

Delphi

Компилятор Delphi сохраняет в исполняемом файле программы информацию обо всех классах, используемых в ней. При создании любого объекта в памяти перед ним (по отрицательным смещениям) располагается заголовок, в котором есть в том числе ссылка на структуру-описатель класса этого объекта. Встроенные в язык функции работают с этой информацией прозрачно для программиста. Оператор is позволяет проверить, является ли объект или тип наследником определённого типа, а оператор as является аналогом dynamic_cast в C++.

Заголовки объектов — также неявно — используются для автоматического управления памятью.

C#

В C# для определения типа объекта во время исполнения используется метод GetType, а также ключевые слова is и as, которые являются аналогами для typeid и dynamic_cast в C++ соответственно.

Java

В Java тип объекта может быть получен при помощи метода getClass(), объявленного в классе java.lang.Object и потому реализуемого каждым классом. Для проверки принадлежности объекта определенному типу используется оператор instanceof, аналогом dynamic_cast из C++ является оператор приведения типа, который в случае несоответствия типов выбрасывает исключение ClassCastException.

На уровне байт-кода вызов метода класс записывается, как и вызов всякого другого метода, при помощи опкода invokevirtual. Для проверки приводимости объекта к типу используются опкоды instanceof и checkcast.

Perl

В Perl тип объекта может быть определен с помощью функции blessed(), являющуюся частью CPAN-модуля Scalar::Util. Функция принимает указатель на объект (blessed hash или аналог) и возвращает скаляр, содержащий имя класса.

См. также

Примечания

  1. Идентификация типов во время выполнения
  2. Подбельский В. В. 12.6 Динамическая идентификация типов (RTTI) // Язык Си++ / Рец. Дадаев Ю. Г.. — 4-е изд. — М.: Финансы и статистика, 2003. — С. 263—280. — 560 с. — ISBN 5-279-02204-7, УДК 004.438Си(075.8) ББК 32.973.26-018 1я173



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Динамическая идентификация типа данных" в других словарях:

  • Динамическая идентификация типа — данных (англ. Run time Type Information, Run time Type Identification, RTTI)  механизм, реализованный в языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы. Содержание 1 Реализация …   Википедия

  • Тип данных — (встречается также термин вид данных)  фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и… …   Википедия

  • Типизация данных — Тип данных  фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые… …   Википедия

  • Приведение типа — (type conversion) преобразование значения переменной одного типа в значение другого типа. Выделяют явное и неявное приведения типов. При явном приведении указывается тип переменной, к которому необходимо преобразовать исходную переменную. При… …   Википедия

  • Валютный тип — Тип данных Содержание 1 История 2 Определение 3 Необходимость использования типов данных …   Википедия

  • Ruby — Класс языка: мультипарадигмальный: динамический, объектно ориентиров …   Википедия

  • dynamic_cast — В языке программирования C++, оператор dynamic cast является частью механизма динамической идентификации типа данных, который позволяет выполнять приведение типа данных. В отличие от обычного приведения типа в стиле Си, проверка корректности… …   Википедия

  • Интроспекция (программирование) — У этого термина существуют и другие значения, см. Интроспекция. Интроспекция (англ. type introspection) в программировании  возможность в некоторых объектно ориентированных языках определить тип и структуру объекта во время выполнения… …   Википедия

  • printf — printf  обобщённое название семейства функций или методов стандартных или широкоизвестных коммерческих библиотек, или встроенных операторов некоторых языков программирования, используемых для форматного вывода  вывода в различные потоки …   Википедия

  • Парадигма — (Paradigm) Определение парадигмы, история возникновения парадигмы Информация об определении парадигмы, история возникновения парадигмы Содержание Содержание История возникновения Частные случаи (лингвистика) Управленческая парадигма Парадигма… …   Энциклопедия инвестора


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»