OVH Cloud OVH Cloud

réflexivité ?

5 réponses
Avatar
gregg
Bonjour,

J'ai du mal à comprendre ce que cette notion représente, lorsqu'on dit
que Java est un langage permettant la "réflexivité" (ou "reflection",
mais je crois que ce dernier terme est un anglicisme).

Et puis, quelle est son utilité ?

++

5 réponses

Avatar
Jc Sirot
gregg wrote:
Bonjour,

J'ai du mal à comprendre ce que cette notion représente, lorsqu'on dit
que Java est un langage permettant la "réflexivité" (ou "reflection",
mais je crois que ce dernier terme est un anglicisme).

Et puis, quelle est son utilité ?


Question vocabulaire, je crois que le terme consacré est "introspection".

En Java, il existe des classes pour représenter les classes elle-même,
les méthodes de classes... (cf package java.lang.reflect ainsi que
java.lang.Class) Bref, il est possible d'obtenir dynamiquement des
informations sur la constitution d'une classe (ses constructeurs, ses
méthodes et leurs paramètres...) : c'est ça l'introspection.

L'introspection a de multiples utilisations, l'exemple le plus évident
est l'instanciation des objets dont tu ne connais que le nom. Tu peux
aussi faire des choses beaucoup plus amusantes comme créer dynamiquement
des classes qui implémentent plusieurs interfaces
(java.lang.reflect.Proxy) ou accéder aux champs/méthodes déclarés
private d'une classe (java.lang.reflect.AccessibleObject)
--

Cordialement
-- JC Sirot

Avatar
jerome moliere
Jc Sirot wrote:

gregg wrote:

Bonjour,

J'ai du mal à comprendre ce que cette notion représente, lorsqu'on dit
que Java est un langage permettant la "réflexivité" (ou "reflection",
mais je crois que ce dernier terme est un anglicisme).

Et puis, quelle est son utilité ?



Question vocabulaire, je crois que le terme consacré est "introspection".

En Java, il existe des classes pour représenter les classes elle-même,
les méthodes de classes... (cf package java.lang.reflect ainsi que
java.lang.Class) Bref, il est possible d'obtenir dynamiquement des
informations sur la constitution d'une classe (ses constructeurs, ses
méthodes et leurs paramètres...) : c'est ça l'introspection.

en effet la possibilite de decouvrir dynamiquement des informations sur

un objet par sa meta classe et les entites associees...
ensuite la reflection en general consiste a utiliser ces informations
pour faire qqch d'utile...
typiquement invoquer un constructeur particulier ...
jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941


Avatar
Bruno Tignac
Bonjour,

La reflexivité est un terme mathématique designant que pour un element a
d'un ensemble E, la relation a R a est vraie.

La reflexion est l'action de representer un monde dans un autre ayant au
moins les memes propriétés, l'objectif etant d'aller plus vite, de mieux
connaitre le probleme. Un cas simple de reflexion peut etre le suivant :

Soit un probleme de geometrie. Pour le resoudre, on utiliser une methode
"litterale" (demonstrative). Ce sera long mais faisable.

deuxieme point devue : je traduis l'enonce literal en equation, et je
resouds le tout par de la geometrie analytique, c'est plus rapide, pour le
meme resultat.

La reflexion a donc ete le fait que l'on ai traduit l'enonce literal
(premier monde) dans un systeme analytique (deuxieme monde) plus riche.

L'utilité est donc l'optimisation d'une maniere generale.

L'introspection est la capacite qu'a un systeme de se connaitre lui meme (a
rapprocher de la situation ou on reflechit a ce que l'on fait).
Cela se traduit en Java par l'usage de this

L'utilisation de la reflexion dans Java passe par l'utilisation du package
java.lang.reflect. Son utilité est donc l'optimisation, par forcement en
terme de gain CPU/memoire mais en factorisation algorithmique, il permet de
mettre en place un algorithme generique qui invoque des methodes qu'on lui
indique sur des objets qu'on lui passe sans qu'aucun de ces objets n'aient
d'interface commune.

La capacite a connaitre dynamiquement les informations d'un objet releveplus
du cadre d'un IDE (pour le debugage).

Il y a un point que je ne connais dans ce que dit Jerome : ce sont les
metaclasses en java et les entites associees. Peux-tu m'en dire plus ?

Bruno

jerome moliere wrote:

Jc Sirot wrote:

gregg wrote:

Bonjour,

J'ai du mal à comprendre ce que cette notion représente, lorsqu'on dit
que Java est un langage permettant la "réflexivité" (ou "reflection",
mais je crois que ce dernier terme est un anglicisme).

Et puis, quelle est son utilité ?



Question vocabulaire, je crois que le terme consacré est "introspection".

En Java, il existe des classes pour représenter les classes elle-même,
les méthodes de classes... (cf package java.lang.reflect ainsi que
java.lang.Class) Bref, il est possible d'obtenir dynamiquement des
informations sur la constitution d'une classe (ses constructeurs, ses
méthodes et leurs paramètres...) : c'est ça l'introspection.

en effet la possibilite de decouvrir dynamiquement des informations sur

un objet par sa meta classe et les entites associees...
ensuite la reflection en general consiste a utiliser ces informations
pour faire qqch d'utile...
typiquement invoquer un constructeur particulier ...
jerome




Avatar
jerome moliere
Bruno Tignac wrote:
<skip la tres jolie et complete explication mathematique :) >


Il y a un point que je ne connais dans ce que dit Jerome : ce sont les
metaclasses en java et les entites associees. Peux-tu m'en dire plus ?
c'est le fait (terme un peu pompeux il est vrai) que via une instance de

la classe Class on accede a divers elements (Method,Constructor et
autres) decrivant ce que peut faire l'objet lui même ou comment le
construire...
pas trop decu ? :)

Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
Bruno Tignac
Salut,

Je m'interrogeais car la phrase etait la suivante :
"en effet la possibilite de decouvrir dynamiquement des informations sur
un objet par sa meta classe et les entites associees..."

qui semblait indiquer qu'un objet (instance d'une Class) avait egalement a
sa disposition une meta classe

Or il fallait lire qu'un objet peut par introspection (XX.getClass())
acceder a sa classe qui elle meme permet d'acceder a la description de ses
membres et methodes.

Je ne suis pas d'accord avec toi, le terme de meta classe n'a rien de
pompeux, car il est (pour une fois) utilisee dans son bon sens. Meta-XXX
designe en effet le fait que l'on manipule des proprietes du terme XXX :
exemple : une meta classe permet de manipuler une Class. (or il s'avere
qu'en java le meta classe de Class est Class, d'ou le fait qu'on puisse
parler d'introspection).

Pour finir, je ne suis pas decu, car tres heureux de rencontrer quelqu'un
qui manipule la reflexion.

Bruno

jerome moliere wrote:

Bruno Tignac wrote:
<skip la tres jolie et complete explication mathematique :) >


Il y a un point que je ne connais dans ce que dit Jerome : ce sont les
metaclasses en java et les entites associees. Peux-tu m'en dire plus ?
c'est le fait (terme un peu pompeux il est vrai) que via une instance de

la classe Class on accede a divers elements (Method,Constructor et
autres) decrivant ce que peut faire l'objet lui même ou comment le
construire...
pas trop decu ? :)

Jerome