Quelle est la différence entre l'introspection et la réflexion?
Quelqu'un peut-il expliquer à partir d'un langage/environnement agnostique point de vue la différence entre ces deux notions?
Aussi est-il un ensemble de conditions que les langages de programmation doivent satisfaire afin d'être en réflexion et/ou de l'introspection?
Et si ce n'est, quelles sont ces conditions?
- Juste en cliquant grâce à la balise wiki balises que vous avez mis sur cette question conduit à en.wikipedia.org/wiki/Type_introspection, qui est un très bon point de départ. Non?
- Il est, mais il ne dit rien sur les conditions générales.
- Fait intéressant, cette question fournit une très bonne réponse: stackoverflow.com/questions/351577/...
Vous devez vous connecter pour publier un commentaire.
L'article de Wikipedia a un bon résumé:
Prendre un statiquement typé, programme compilé:
Tous les types sont connus et appliqués au moment de la compilation, le programme ne devrait même pas compiler si il n'est pas satisfait de son propre type explicite des contraintes. Dynamique des langages de programmation n'avez pas l'habitude d'exposer ce genre de rigidité, les types de variables ne sont pas forcément connus au moment de la compilation. Ils peuvent ressembler à ceci:
La fonction ne peut pas garantir que
i
est exactement, c'est juste de la passer à travers. Qui peut ou ne peut pas causer des problèmes quelque part, le type de système ne peut pas vous aider ici. Ce type de vérification d'erreur est généralement relégué à userland code, pour qui un tel code des besoins de capacités d'introspection:Exactement où tracer la ligne entre l'introspection et la réflexion est quelque peu discutable. On peut dire que l'introspection, c'est ce qui permet au code de test ce qu'est une chose ("Que suis-je?"), alors que la réflexion est la capacité de manipuler la structure du programme lui-même. Par exemple, en PHP, exemple:
Le code ci-dessus, qui contourne l'exécution du constructeur de la classe
Foo
lors de la création d'une nouvelle instance. C'est le code de manipulation lors de l'exécution. En pratique, cependant, la réflexion de l'API en PHP contient également des capacités d'introspection. Certaines de ces capacités sont un double de ce qui peut être fait avec "inférieur" capacités d'introspection. E. g.:Les deux extraits font essentiellement la même chose, mais on utilise la réflexion et de l'autre ce qu'on pourrait appeler l'introspection. Comme vous le voyez, il n'y a pas une ligne de démarcation claire. Cependant, la réflexion est généralement plus puissant que l'introspection. Par exemple, en PHP, vous devez utiliser l'API reflection pour obtenir des informations sur les types des arguments d'une fonction accepte. C'est juste le "passif" de l'introspection, mais appartient à la réflexion de l'API. C'est surtout une question de mise en œuvre pratique cependant.
En bref, par la définition générale, à faire de l'introspection d'un programme doit être en mesure d'examiner des parties de lui-même au moment de l'exécution et exécuter les différentes code sur la base de cette information. Une réflexion programme au-delà de qui peut modifier son propre code de règles d'exécution lors de l'exécution, par exemple en optant de ne pas invoquer un constructeur, qui est par ailleurs une opération obligatoire tel que défini par la langue.
Réflexion est un mécanisme composé de deux techniques :
Introspection
La capacité d'un programme à l'examiner lui-même
Intercession
La capacité d'un programme à modifier lui-même (son comportement ou son état)
Réf. https://fr.wikipedia.org/wiki/R%C3%A9flexion_(informatique)#Introspection_et_intercession
Ma référence est une page en français parce que la page en anglais n'est pas fait directement référence à la durée de l'intercession.
Type d'introspection:
Capacité d'un langage de programmation afin d'examiner le type ou les propriétés d'un objet lors de l'exécution.
Exemple (Java):
Réflexion:
Capacité d'un langage de programmation pour réaliser les choses ci-dessous au moment de l'exécution.