Reflexió (informàtica)
De Viquipèdia
En informàtica, la reflexió (també anomenada pel seu mot anglès, reflection) és la capacitat d'un programa d'examinar, i eventualment modificar, les seves estructures internes d'alt nivell (per exemple els seus objectes) durant la seva execució.
Taula de continguts |
[edita] Introspecció i intercessió
Hom distingueix dues tècniques usades pels sistemes dotats de reflexió :
- La introspecció, és la capacitat d'un programa d'examinar el seu propi estat.
- La intercessió, és la capacitat d'un programa de modificar el seu propi estat d'execució o d'alterar la seva pròpia interpretació o significat.
La introspecció és utilitzada per efectuar mesures de rendiment, monitoritzar els mòduls o depurar un programa. Està implémentada en llenguatges com Smalltalk o Java que proveeixen eines per conèixer la classe d'un objecte, els seus atributs, els seus mètodes, etc. La introspecció no existeix en llenguatges com el C o el Pascal.
La intercessió permet a un programa evolucionar automàticament en funció del seu entorn. Aquesta propietat apareix als llenguatges com SmallTalk o Python, però no la trobarem en llenguatges com Java.
[edita] Reflexió estructural i reflexió comportamental
Paral·lelament al concepte d'introspecció i d'intercessió, hi ha dos tipus de reflexió : la reflexió estructural i la reflection comportamental.
La reflexió estructural consisteix en reificar el codi d'un programa i tots els tipus abstractes accessibles per aquest programa. Al primer cas, la reificació del codi d'un programa permet de manipular aquest programa durant l'execució. És possible així de mantenir un programa al mateix temps que aquest executa les seves tasques. Al segon cas, la reificació dels tipus abstractes permet al programa d'examinar i de modificar l'estructura de tipus complexos. Es pot així, per exemple, posar a punt algorismes genèrics de serialització.
La reflexió comportamental (o reflexió de comportament) concerneix més particularment l'execució del programa i el seu entorn. Per aquest tipus de reflexió, un programa té mitjans per sabercom s'interpreta i té la possibilitat de modificar la seva manera de ser executat, intervenint sobre les estructures de dades de l'avaluador del programa i sobre l'avaluador en sí mateix. Així, el programa pot obtenir informacions sobre la seva implementació o inclús s'auto-reorganitza amb el propòsit d'adapatar-se millor al seu « entorn ».
[edita] Reflexió i programmació orientada a objectes
En programació orientada a objectes, l'arquitectura reflexiva està implementada pel concepte dels metaobjectes. Aquests representent elements dles programes orientats a objectes com les classes, els missatges i les funcions genèriques. La manipulació d'aquests metaobjectes es fa per un protocol de meta-objectes que permet de decidir els comportements del llenguatge. CLOS ha estat el primer llenguatge a tenir implementat un protocol de meta-objectes.
[edita] Llenguatge reflexiu
Els llenguatges següents suporten la reflexió :
- SmallTalk
- CLOS
- Python
- Ruby
- Java
- Objective-C
- PHP, des de la versió 5
- els llenguatges que funcionen amb l'arquitextura .NET (com el C#)
Entre els llenguatges on no hi ha distinció entre la compilació i l'execució (Lisp per exemple), no hi ha diferència entre la interpretació del code i la reflexió.
[edita] Exemple
L'exemple següent està escrit en Java :
// Sense usar la reflexió Foo foo = new Foo (); foo.hello ();
// Usant la reflexió Class cl = Class.forName ("Foo"); Method method = cl.getMethod ("hola", null); method.invoke (cl.newInstance (), null);
Els dos trossos de codi creen una instància de la classe Foo i criden el seu mètode hola.
Al primer programa, el nom de les classes i els mètodes està codificat en cru, no es pot usar el nom d'una altra classe. Al segon programa, al contrari, el nom de les classes i mètodes pot variar durant l'execució.
[edita] Bibliografia
- D. G. Bobrow, R. G. Gabriel, i J. L. White. Object oriented programming: the CLOS perpective. MIT Press, 1993. (anglès)
- G. Kickzales, J. des Rivières, i D. G. Bobrow. The art of the metaobject protocol. MIT Press, 1991. (anglès)
[edita] Vegeu també
- Quine
- Intercessió (informàtica)
- Introspecció (informàtica)
- Reificació
- Metaobjecte
- Protocol dels meta-objectes