TUTORIEL

Introspection JAVA

L'introspection désigne la fonctionalité d'un langage qui permet, au sein d'un programme en cours d'exécution, d'analyser les instances existantes afin de connaître leurs méthodes et propriétés, pour les manipuler ensuite.

GreenJ a besoin d'une telle fonctionnalité, pour :
On le voit, la notion d'introspection est plus générale que celle prévalant au sein des seules applications Java tournant dans la machine virtuelle (appelée Réflexion dans le langage Java). La classe Introspector va donc être générale et devra pouvoir traiter de tous les objets GreenJ (fiches CRC, classes et instances), sous leurs différentes formes : fichier texte (.CRC, .java), bytecode (.class), objet dans la VM.

Réflexion dans Java

Le langage Java permet facilement de connaître le type et les méthodes d'une classe ou d'une instance données. Il suffit de faire appel aux méthodes de la "classe" de l'objet :
Voir les méthodes de la classe java.lang.Class et les classes du paquetage java.lang.reflect.* pour plus de détails.

Réflexion dans GreenJ

Il est évident qu'utiliser la réflexion Java directement dans GreenJ simplifiera beaucoup le codage et le code résultant.  Cette simplification répond à plusieurs objectifs fondamentaux du projet GreenJ ; dans l'ordre de priorité : faible empreinte mémoire et rapidité à l'exécution, facilité de lecture pour les débutants qui pourront ainsi apprendre à l'aide de GreenJ ET à partir de son code source, être un exemple des bonnes pratiques de programmation orientée Objet, faciliter et accélérer le développement de GreenJ dont un des buts est de me familiariser avec Java,...

Après mûre réflexion ;-), il est apparu que la plupart des éléments de l'application qui auront besoin de manipuler les membres des divers objets GreenJ pourront se contenter de chaînes de caractères, puisque la classe "Class" elle-même requiert le nom du membre en String pour accéder à l'objet  effectif correspondant(méthode, champ ou constructeur) via ses méthodes particulières.

Aussi la classe (abstraite) Introspector définira des méthodes semblables à celles de Class, mais suffixées par "Of" vu qu'à la différence de cette dernière, il faudra passer à l'Introspector l'objet GreenJ en paramètre et le retour sera un tableau de Strings.
Après quelqu'autres pensées sur le sujet, il apparaît que l'objet peut lui-même prendre en charge ces méthodes introspectives, et c'est finalement GreenJObject qui va en définir les squelettes sous forme abstraite, en faisant disparaitre le  "Of".

La classe Inspector semble n'avoir plus pour intérêt que de tirer du code source les différents membres des classes et se voit donc renommé en Loader, ayant la responsabilité de charger en mémoire les objets GreenJ à son démarrage.