wundt tecnicas sinonimo psicologia persona introspectiva introspección extrospección experimental ejemplos reflection language-agnostic introspection

reflection - tecnicas - ¿Cuál es la diferencia entre la introspección y la reflexión?



persona introspectiva (3)

Escriba introspección:

Capacidad de un lenguaje de programación para examinar el tipo o las propiedades de un objeto en tiempo de ejecución.

Ejemplo (Java):

String myObj1 = new String(); MyCustomObject myObj2 = new MyCustomObject(); if(myObj2 instanceof MyCustomObject) { System.out.println("This is an example of type interospection"); }


Reflexión:

Capacidad de un lenguaje de programación para lograr cosas inferiores en tiempo de ejecución.

  • Escriba introspect (como se ve arriba)
  • Examina y modifica un objeto.
  • y mucho más

¿Puede alguien explicar desde una perspectiva agnóstica del lenguaje / entorno la diferencia entre estas dos nociones?

¿Existe también un conjunto de condiciones que los lenguajes de programación deben satisfacer para ser reflexivos y / o introspectivos?

Y si hay, ¿cuáles son estas condiciones?


en.wikipedia.org/wiki/Type_introspection tiene un resumen bastante decente:

En informática, la introspección de tipo es la capacidad de un programa para examinar el tipo o las propiedades de un objeto en tiempo de ejecución. Algunos lenguajes de programación poseen esta capacidad.

La introspección no debe confundirse con la reflexión, que va un paso más allá y es la capacidad de un programa para manipular los valores, metadatos, propiedades y / o funciones de un objeto en tiempo de ejecución. Algunos lenguajes de programación, por ejemplo, Java, también poseen esa capacidad.

Tome un programa compilado, tipado estáticamente:

SomeType function foo(int i) { return new SomeType(i); }

Todos los tipos son conocidos y aplicados en tiempo de compilación, el programa ni siquiera debe compilar si no satisface sus propias restricciones explícitas de tipo. Los lenguajes de programación dinámica generalmente no muestran este tipo de rigidez, los tipos de variables no son necesariamente conocidos en tiempo de compilación. Pueden verse más como esto:

function foo(i) { return new SomeType(i); }

La función no puede garantizar lo que soy exactamente, solo lo está pasando. Eso puede o no causar problemas en alguna parte, el sistema de tipos no puede ayudar aquí. Este tipo de comprobación de errores normalmente se relega al código de usuario, para lo cual dicho código necesita capacidades de introspección:

function foo(i) { if (!is_int(i)) { throw new InvalidArgumentException; } return new SomeType(i); }

Donde exactamente trazar la línea entre la introspección y la reflexión es algo debatible. Se puede decir que la introspección es cualquier cosa que permite que el código pruebe qué es algo ("¿Qué soy?"), Mientras que la reflexión es la capacidad de manipular la estructura del programa. Por ejemplo, un ejemplo de PHP:

$ref = new ReflectionClass(''Foo''); $foo = $ref->newInstanceWithoutConstructor();

El código anterior evita el funcionamiento del constructor de la clase Foo al crear una nueva instancia de este. Eso es manipulación de código en tiempo de ejecución. En la práctica, sin embargo, la API de reflexión en PHP también contiene capacidades de introspección. Algunas de estas capacidades son un duplicado de lo que se puede hacer con capacidades de introspección "inferiores". P.ej:

$ref = new ReflectionClass($obj); if ($ref->getName() == ''Foo'') ... if ($obj instanceof Foo) ...

Ambos fragmentos básicamente hacen lo mismo, pero uno usa la reflexión y el otro lo que se llamaría introspección. Como ve, apenas hay una línea divisoria clara. Sin embargo, la reflexión suele ser más poderosa que la introspección. Por ejemplo, en PHP, debe usar la API de reflexión para obtener información sobre los tipos de argumentos que acepta una función. Eso es solo una introspección "pasiva", pero pertenece a la API de reflexión. Sin embargo, esto es principalmente una cuestión de implementación práctica.

En resumen, según la definición general, para ser introspectivo, un programa debe ser capaz de examinar partes de sí mismo en el tiempo de ejecución y ejecutar código diferente en función de esta información. Un programa reflexivo más allá de eso puede cambiar sus propias reglas de ejecución de código en tiempo de ejecución, por ejemplo, optar por no invocar un constructor, que de lo contrario es una operación obligatoria según lo definido por el idioma.


La reflexión es un mecanismo compuesto por dos técnicas:

  1. Introspección

    La capacidad de un programa para examinarse a sí mismo

  2. Intercesión

    La capacidad de un programa para modificarse a sí mismo (su comportamiento o su estado)

Árbitro. https://fr.wikipedia.org/wiki/R%C3%A9flexion_(informatique)#Introspection_et_intercession

Mi referencia es una página en francés porque la página en inglés no se refiere directamente al término intercesión.