Réflexion (informatique)
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

En programmation informatique, la réflexion est la capacité d'un programme à examiner, et éventuellement à modifier, ses structures internes de haut niveau (par exemple ses objets) lors de son exécution.

Introspection et intercession

On distingue deux techniques utilisées par les systèmes dotés de réflexion :

  • l'introspection, qui est la capacité d'un programme à examiner son propre état.
  • l'intercession, qui est la capacité d'un programme à modifier son propre état d'exécution ou d'altérer sa propre interprétation ou signification.

L'introspection est utilisée pour effectuer des mesures de performance, inspecter des modules ou déboguer un programme. Elle est implémentée dans des langage comme Smalltalk ou Java qui fournissent des outils pour connaître la classe d'un objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut...), ses attributs, ses méthodes, etc. L'introspection n'existe pas dans des langages comme C ou Pascal.

L'intercession permet à un programme d'évoluer automatiquement en fonction des besoins et de l'environnement (L'environnement est tout ce qui nous entoure. C'est l'ensemble des éléments naturels et artificiels au sein duquel se déroule la vie humaine. Avec les enjeux...). Cette propriété apparaît dans des langages comme SmallTalk ou Python, mais elle n'existe pas dans des langages comme C.

Réflexion structurelle et réflexion comportementale

Parallèlement aux concepts d'introspection et d'intercession, il existe deux types de réflexion : la réflexion structurelle et la réflexion comportementale.

La réflexion structurelle consiste à réifier le code d'un programme et tous les types abstraits accessibles par ce programme. Dans le premier cas, la réification (De manière générale, la réification consiste à transformer ou à transposer une abstraction en un objet concret, à appréhender un concept, comme une chose concrète. Le terme est aussi employé...) du code d'un programme permet de manipuler ce programme pendant l'exécution. Il est possible ainsi de maintenir un programme même lorsque celui-ci effectue des tâches. Dans le deuxième cas, la réification des types abstraits permet au programme d'examiner et de modifier la structure de types complexes. On peut ainsi, par exemple, mettre au point (Graphie) des algorithmes génériques de sérialisation (En informatique, la sérialisation (de l'anglais américain serialization, le terme marshalling est souvent employé de façon synonyme) est un processus visant à encoder l'état...).

La réflexion comportementale (ou réflexion de comportement) concerne plus particulièrement l'exécution du programme et l'environnement du programme. Par ce type de réflexion, un programme a moyen de savoir comment il est interprété et a la possibilité de modifier sa façon d'être exécuté, en intervenant sur les structures de données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.) de l'évaluateur du programme et sur l'évaluateur lui-même. Ainsi, le programme peut obtenir des informations sur son implémentation (Le mot implantation peut avoir plusieurs significations :) ou même s'auto-réorganiser afin de s'adapter au mieux à un " environnement ".

Réflexion et programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel (voire de matériel, cf. VHDL).) objet

En programmation orientée objet (La programmation par objet (du terme anglo-saxon Object-Oriented Programming ou OOP), est un paradigme de programmation, il consiste en la définition et l'assemblage de briques logicielles appelées objets ; un objet...), l'architecture (L’architecture peut se définir comme l’art de bâtir des édifices.) réflexive est implémentée par le concept des métaobjets. Ceux-ci représentent des éléments des programmes orientés objets comme les classes, les messages et les fonctions génériques. La manipulation de ces métaobjets se fait par un protocole à méta-objets (Un protocole à méta-objets est une technique en informatique qui consiste à faire de l'interprète d'un programme un objet de première classe, au même titre que ceux qui composent le programme. Il est ainsi possible...) qui permet de décider des comportements du langage. CLOS est le premier langage à avoir implémenté un protocole à méta-objets.

Langage réflexif

Les langages suivant supportent la réflexion :

  • SmallTalk
  • CLOS
  • Python
  • Ruby (Ruby est un langage de programmation libre. Il est interprété, orienté objet, et multi-paradigme.)
  • Java
  • Objective-C
  • PHP (PHP (sigle de PHP: Hypertext Preprocessor), est un langage de scripts libre principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP, mais pouvant également fonctionner comme n'importe...), depuis la version 5
  • les langages qui fonctionnent avec l'architecture .NET (comme le C#)

Dans les langages ou il n'y a pas de distinction entre la compilation et l'exécution (Lisp par exemple), il n'y a pas de différence entre l'interprétation du code et la réflexion.

Exemple

L'exemple suivant est écrit en Java :

 
 // Sans utiliser la réflexion 
 Foo foo = new Foo (); 
 foo.hello (Hello (code AITA : HW ; code OACI : FHE) est une compagnie aérienne charter suisse basée à Bâle pour son siège administratif. Elle...) (); 
 
 
 // En utilisant la réflexion 
 Class (CLASS (CLS) est un célèbre groupe de l'underground informatique. CLASS a cessé son activité le 8 janvier 2004 et en a profité pour réaliser une "endtro"....) cl = Class.forName ("Foo"); 
 Method method = cl.getMethod ("hello", null); 
 method.invoke (cl.newInstance (), null); 
 

Les deux morceaux de code créent une instance de la classe Foo et appellent leur méthode hello.

Dans le premier programme, le nom des classes et des méthodes est codé en dur, il n'est pas possible d'utiliser le nom d'une autre classe. Dans le second programme, en revanche, le nom des classes et des méthodes peut varier à l'exécution.

Bibliographie

  • D. G. Bobrow, R. G. Gabriel, and J. L. White. Object oriented programming: the CLOS perpective. MIT Press, 1993.
  • G. Kickzales, J. des Rivières, and D. G. Bobrow. The art of the metaobject protocol. MIT Press, 1991.
Page générée en 0.149 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique