Identificación de tipos de datos dinámicos

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 24 de enero de 2019; las comprobaciones requieren 2 ediciones .

La identificación dinámica del tipo de datos ( eng.  run - time type information , run-time type i dentification, RTTI ) es un mecanismo en algunos lenguajes de programación que permite determinar el tipo de datos de una variable o objeto en tiempo de ejecución.

Implementación

Hay muchas implementaciones de este mecanismo, pero las más comunes son:

Así, la operación de determinar el tipo se reduce a una búsqueda en la tabla, oa una búsqueda de varios bytes hasta la dirección a la que apunta el puntero al objeto. Cada método tiene sus ventajas y desventajas[ especificar ] .

C++

En C++ , los operadores y (definidos en el archivo typeinfo.h ) se usan para la identificación dinámica de tipos [1] , para lo cual la información de tipo en tiempo de ejecución generalmente debe agregarse a través de las opciones del compilador al compilar el módulo. dynamic_casttypeid

El operador dynamic_castintenta convertir al tipo especificado con una marca. El tipo de destino de la operación debe ser un puntero, una referencia o un tipo void*.

El operador typeid[2] devuelve una referencia a una estructura type_infoque contiene campos que le permiten obtener información sobre el tipo.

Delfos

El compilador Delphi almacena en el archivo ejecutable del programa información sobre todas las clases utilizadas en él. Al crear cualquier objeto en la memoria, antes (en compensaciones negativas ) hay un encabezado, que también contiene un enlace al descriptor de estructura de la clase de este objeto. Las funciones integradas en el lenguaje trabajan con esta información de forma transparente para el programador. El operador isle permite verificar si un objeto o tipo es descendiente de un determinado tipo, y el operador asse usa para convertir objetos o interfaces de un tipo a otro, siendo la contraparte dynamic_casten C++ .

Los encabezados de objetos, también implícitamente, se utilizan para la gestión automática de la memoria .

C#

C # usa el método para determinar el tipo de un objeto en tiempo de ejecución GetType, así como las palabras clave isy as, que son las contrapartes de typeidy dynamic_casten C++ , respectivamente.

Java

En Java, el tipo de un objeto se puede obtener utilizando un método getClass()declarado en una clase java.lang.Objecty, por lo tanto, implementado por cada clase. Para verificar si un objeto pertenece a un cierto tipo, se usa el operador instanceof, un análogo dynamic_castde C ++ es el operador de conversión de tipos, que arroja una excepción en caso de que no coincidan los tipos ClassCastException.

En el nivel del código de bytes, se escribe una llamada a un método de clase, como una llamada a cualquier otro método, utilizando el código de operación invocarvirtual . Los códigos de operación instanceof y checkcast se utilizan para comprobar la conversión de un objeto a un tipo .

perl

En Perl , el tipo de un objeto se puede determinar mediante la función bendita(), que forma parte del módulo Scalar::Util CPAN. La función toma un puntero a un objeto (hash bendito o equivalente) y devuelve un escalar que contiene el nombre de la clase.

PHP

La biblioteca estándar de PHP define una función gettype()que devuelve una cadena con el nombre de un tipo incorporado, o una cadena objectsi el tipo del argumento pasado a la función es una clase definida por el usuario.

Véase también

Notas

  1. Identificación de tipos en tiempo de ejecución (enlace descendente) . Consultado el 18 de mayo de 2010. Archivado desde el original el 14 de marzo de 2011. 
  2. Podbelsky V. V. 12.6 Identificación dinámica de tipos (RTTI) // Lenguaje C++ / Rec. Dadaev Yu. G. - 4ª ed. - M. : Finanzas y estadísticas, 2003. - S. 263-280. — 560 págs. - ISBN 5-279-02204-7 , UDC 004.438Si (075.8) LBC 32.973.26-018 1ya173.