Réflexion

En programmation informatique, la réflexion est la capacité d'un programme à examiner, et peut-être à modifier, ses structures internes de haut niveau lors de son exécution.



Catégories :

Programmation informatique

Recherche sur Google Images :


Source image : www.institut-polaire.fr
Cette image est un résultat de recherche de Google Image. Elle est peut-être réduite par rapport à l'originale et/ou protégée par des droits d'auteur.

Page(s) en rapport avec ce sujet :

  • Au contraire, notre réflexion est plus fine actuellement, notre habitude des langages Orientés Objets plus grande, ce qui nous sert à voir plus loin.... (source : dotnetguru)
  • La réflexion est la capacité donnée aux programmes : (1) d'observer et de ... le programme et les structures de données du langage, et la réflexion de ... (source : iro.umontreal)
  • ... au sein de leurs propres méthodes, la réflexion est implémentée dans .... Ce mécanisme permet au programme de travailler sur lui-même, ... mais autorise des utilisations particulièrement élaborées du langage comme de .... (source : journaldunet)

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

Introspection et intercession

On peut distinguer deux techniques utilisées par les dispositifs pourvus de réflexion :

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 langages comme Smalltalk ou Java qui fournissent des outils pour connaître la classe d'un objet, ses attributs, ses méthodes, etc. L'introspection n'existe pas dans des langages comme C ou Pascal.

L'intercession autorise un programme d'évoluer automatiquement suivant les besoins et de l'environnement. 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 l'ensemble des types abstraits accessibles par ce programme. Dans le premier cas, la réification du code d'un programme sert à manipuler ce programme pendant l'exécution. Il est envisageable ainsi de maintenir un programme même quand ce dernier 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 des algorithmes génériques de sérialisation.

La réflexion comportementale (ou réflexion de comportement) concerne surtout 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 de l'évaluateur du programme et sur l'évaluateur lui-même. Ainsi, le programme peut obtenir des informations sur son implémentation ou même s'auto-réorganiser pour s'adapter au mieux à un «environnement».

Réflexion et programmation objet

En programmation orientée objet, l'architecture 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 qui sert à décider des comportements du langage. CLOS est le premier langage à avoir implémenté un protocole à méta-objets.

Langage réflexif

Les langages suivants supportent la réflexion :

Dans les langages où 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 rédigé en Java :

// Sans utiliser la réflexion
Foo foo = new Foo ();
foo.hello ();
// En utilisant la réflexion
Class 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 nomment leur méthode hello.

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

Bibliographie

Voir aussi

Recherche sur Amazone (livres) :




Ce texte est issu de l'encyclopédie Wikipedia. Vous pouvez consulter sa version originale dans cette encyclopédie à l'adresse http://fr.wikipedia.org/wiki/R%C3%A9flexion_(informatique).
Voir la liste des contributeurs.
La version présentée ici à été extraite depuis cette source le 17/03/2009.
Ce texte est disponible sous les termes de la licence de documentation libre GNU (GFDL).
La liste des définitions proposées en tête de page est une sélection parmi les résultats obtenus à l'aide de la commande "define:" de Google.
Cette page fait partie du projet Wikibis.
Accueil Recherche Aller au contenuDébut page
ContactContact ImprimerImprimer liens d'évitement et raccourcis clavierAccessibilité
Aller au menu