fbpx
Wikipedia

Reflexión (informática)

En informática, reflexión (o reflexión computacional) es la capacidad que tiene un programa para observar y opcionalmente modificar su estructura de alto nivel.

Normalmente, la reflexión es dinámica o en tiempo de ejecución, aunque algunos lenguajes de programación permiten reflexión estática o en tiempo de compilación. Es más común en lenguajes de programación de alto nivel ejecutándose sobre una máquina virtual, como Smalltalk o Java, y menos común en lenguajes como C.

En un sentido más amplio, la reflexión es una actividad computacional que razona sobre su propia computación.

Cuando el código fuente de un programa se compila, normalmente se pierde la información sobre la estructura del programa conforme se genera el código de bajo nivel (normalmente lenguaje ensamblador). Si un sistema permite reflexión, se preserva la estructura como metadatos en el código generado. Dependiendo de la implementación, el código con reflexión tiende a ser más lento que el que no lo tiene.

En los lenguajes que no distinguen entre tiempo de ejecución y tiempo de compilación (como las distintas variantes de Lisp), no hay diferencia entre compilación o interpretación de código y reflexión.

Implementación

Un lenguaje con reflexión proporciona un conjunto de características disponibles en tiempo de ejecución que, de otro modo, serían muy difícilmente realizables en un lenguaje de más bajo nivel. Algunas de estas características son las habilidades para:

  • Descubrir y modificar construcciones de código fuente (tales como bloques de código, clases, métodos, protocolos, etc.) como objetos de "categoría superior" en tiempo de ejecución.
  • Convertir una cadena que corresponde al nombre simbólico de una clase o función en una referencia o invocación a esa clase o función.
  • Evaluar una cadena como si fuera una sentencia de código fuente en tiempo de ejecución.

Ejemplos

Python

# sin reflexión Foo().bar() # usando reflexión. getattr(globals()['Foo'](), 'bar'()) 

C#

// Con reflexión // Usando GetType para obtener información del tipo: int i = 24; System.Type tipo = i.GetType(); System.Console.WriteLine(tipo); El resultado sería: System.Int32 

PHP

Abajo un ejemplo con PHP:

// sin reflexión $foo = new Foo(); $foo->hello(); // con reflexión, usando la API de reflexión $reflector = new ReflectionClass('Foo'); $foo = $reflector->newInstance(); $hello = $reflector->getMethod('hello'); $hello->invoke($foo); // con reflexión, usando la retro llamada $foo = new Foo(); call_user_func(array($foo, 'hello')); // con reflexión, usando la sintaxis de variables $className = 'Foo'; $foo = new $className(); $method = 'hello'; $foo->$method(); 

Véase también

  •   Datos: Q1056451

reflexión, informática, informática, reflexión, reflexión, computacional, capacidad, tiene, programa, para, observar, opcionalmente, modificar, estructura, alto, nivel, normalmente, reflexión, dinámica, tiempo, ejecución, aunque, algunos, lenguajes, programaci. En informatica reflexion o reflexion computacional es la capacidad que tiene un programa para observar y opcionalmente modificar su estructura de alto nivel Normalmente la reflexion es dinamica o en tiempo de ejecucion aunque algunos lenguajes de programacion permiten reflexion estatica o en tiempo de compilacion Es mas comun en lenguajes de programacion de alto nivel ejecutandose sobre una maquina virtual como Smalltalk o Java y menos comun en lenguajes como C En un sentido mas amplio la reflexion es una actividad computacional que razona sobre su propia computacion Cuando el codigo fuente de un programa se compila normalmente se pierde la informacion sobre la estructura del programa conforme se genera el codigo de bajo nivel normalmente lenguaje ensamblador Si un sistema permite reflexion se preserva la estructura como metadatos en el codigo generado Dependiendo de la implementacion el codigo con reflexion tiende a ser mas lento que el que no lo tiene En los lenguajes que no distinguen entre tiempo de ejecucion y tiempo de compilacion como las distintas variantes de Lisp no hay diferencia entre compilacion o interpretacion de codigo y reflexion Indice 1 Implementacion 2 Ejemplos 2 1 Python 2 2 C 2 3 PHP 3 Vease tambienImplementacion EditarUn lenguaje con reflexion proporciona un conjunto de caracteristicas disponibles en tiempo de ejecucion que de otro modo serian muy dificilmente realizables en un lenguaje de mas bajo nivel Algunas de estas caracteristicas son las habilidades para Descubrir y modificar construcciones de codigo fuente tales como bloques de codigo clases metodos protocolos etc como objetos de categoria superior en tiempo de ejecucion Convertir una cadena que corresponde al nombre simbolico de una clase o funcion en una referencia o invocacion a esa clase o funcion Evaluar una cadena como si fuera una sentencia de codigo fuente en tiempo de ejecucion Ejemplos EditarPython Editar sin reflexion Foo bar usando reflexion getattr globals Foo bar C Editar Con reflexion Usando GetType para obtener informacion del tipo int i 24 System Type tipo i GetType System Console WriteLine tipo El resultado seria System Int32 PHP Editar Abajo un ejemplo con PHP sin reflexion foo new Foo foo gt hello con reflexion usando la API de reflexion reflector new ReflectionClass Foo foo reflector gt newInstance hello reflector gt getMethod hello hello gt invoke foo con reflexion usando la retro llamada foo new Foo call user func array foo hello con reflexion usando la sintaxis de variables className Foo foo new className method hello foo gt method Vease tambien EditarLenguajes de programacion con tipos dinamicos Metaprogramacion Datos Q1056451Obtenido de https es wikipedia org w index php title Reflexion informatica amp oldid 125315853, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos