GreenJ

Un IDE Java libre et léger, à la BlueJ

Remarque : GreenJ peut se prononcer "grïnge", "green djinn", "grunge", ou "grange" (comme dans "La grange", le tube des ZZTop (groupe célèbre pour son bluej^Z^Z blues (non que le projet soit né dans un coup de déprime (c'était plutôt un coup de gueule à la R.M.S. (contre un logiciel que je voulais compiler en natif avec GCJ, à savoir BlueJ (j'avais même envisagé d'en faire la présentation dans mon LUG (c'est dire si ça m'a mis en rogne (d'ailleurs, j'ai fini par me lancer dans le présent projet)*, ou tout autre son, selon l'humeur du moment, en toute liberté.
Par ailleurs, j'ai appris depuis que le projet interne de SUN qui déboucherait en 1995 sur Java avait pour nom de code "Green". Incroyable !

Principes de base

[le présent document est une description des fonctionnalités projetées]
GreenJ vise à offrir un environnement de développement léger et didactique aux personnes débutant la programmation orientée Objet avec le langage Java.

Une première aide aux novices consiste à leur permettre de démarrer leur projet d'apprentissage sans devoir commencer par une étude rébarbative et ennuyeuse de la syntaxe et des mots réservés du langage. Cette approche a été popularisée par l'environnement de développement BlueJ (malheureusement non libre, celui-ci ne peut donc pas être compilé en natif non plus qu'inclus dans les distributions de Logiciel Libre).
GreenJ offre ainsi à ses utilisateurs une réalisation fonctionnelle (prototype) de leur application à partir des seules fiches CRC (Classe / Responsabilités / Collaborations) : l'utilisateur saisit ses fiches, et GreenJ génére le code des classes, méthodes publiques et appels correspondants.
A partir de ces classes, il est alors possible de faire tourner l'application en instanciant des objets et de voir leurs relations dynamiques.

En même temps que le squelette des classes, GreenJ génère aussi l'armature des tests unitaires correspondants, permettant de contrôler très en amont du projet les problèmes de régression. Le débutant dispose donc d'un cadre structuré pour acquérir les bonnes pratiques de l'orienté Objet.

GreenJ doit aussi faciliter le prototypage des applications avec leurs futurs utilisateurs, en permettant la réalisation d'une interface graphique distincte de l'application principale, à partir du squelette existant des classes. Ce besoin justifie la génération automatique des méthodes à partir des fiches CRC évoquée ci-dessus. Un outil basique d'édition d'interface permettrait là encore de conduire le novice vers les bons usages, en restreignant le positionnement rigide à la VB au profit d'un placement dynamique à la GTK+.

GreenJ utilise GCJ (GNU Compiler for Java) et GIJ (GNU Interpreter forJava) comme base pour la compilation et l'exécution des projets.


Fiches CRC

Les fiches cartonnées CRC sont un outil d'analyse très pratique au début d'un projet OO (signifiant non pas double zéro mais Orienté Objet). Elles permettent de manipuler littéralement (ou plutôt manuellement :-) les objets/classes en cours de définition, et ce par tous les membres du club de réflexion (préférable à la traduction littérale "char d'assaut imaginaire" ;-).
Conçues à l'origine dans un but d'enseignement (comme BlueJ), elles ont fini par être adoptées en production, grâce à leur effet bénéfique sur les discussions entre informaticiens et experts du domaine applicatif (pas de jargon, des objets concrets, pouvant être manipulatés,...). Quelques liens sur les CRC : principe, tutoriel.

GreenJ permet à son utilisateur de saisir ses fiches, en éditant le nom de la classe, l'intitulé de chaque responsabilité, et les autres fiches / classes collaboratrices. Il les affiche visuellement ainsi que leurs liens (tels qu'indiqués par les collaborations). Il stocke l'information relative à ces fiches dans un répertoire CRC du projet, compte tenu du caractère irréversible de la transformation en code (je ne vois pas d'intérêt à générer des fiches CRC à partir des classes).
La possibilité d'étendre les fiches nécessite d'enregistrer les classes et responsabilités déjà passées au générateur de code pour ne pas générer le code correspondant deux fois. Des suppressions faites dans les fiches après génération du code ne seront pas répercutées dans celui-ci, qui devra être édité manuellement. Les fiches CRC sont pour GreenJ un support initial du projet, et ne restent accessibles ensuite que dans un but de consultation et d'extension éventuelle du projet.

Les fiches CRC du projet GreenJ : Fiches CRC v1.0.sxw (format Texte OpenOffice.org)

Concepteur visuel

Il comprend trois modules d'affichage : fiches CRC, classes d'objets, objets instanciés. Le premier est distinct, puisque chargeant des informations séparées du reste du projet, tandis que les deux autres sont liés entre eux : d'un point de vue utilisateur, l'instanciation se commande depuis les classes (appel aux constructeurs).
Il est intéressant que les mêmes objets (fiche/classe/instance) soient situés dans le même secteur d'écran sur les trois visuels, de manière à correspondre aux liens figurant entre eux. Il me semble intéressant de figurer les liens aussi entre instances (ce que ne fait pas BlueJ), en représentant de façon adaptée la nature des liens (empilement dans le cas de collections,...).
Le concepteur permet d'éditer (ajout, modification, suppression) et manipuler les différents éléments (déplacement, structuration, menu contextuel). Pour les fiches et classes, il sauvegarde et restaure les emplacements à l'écran des différents éléments.

Générateur de code

Il prend les fiches CRC et en déduit le code et les tests correspondants.
Pour celà, il propose à l'utilisateur, pour chaque fiche, le nom de la classe et ses méthodes publiques découlant des responsabilités. Il présente à chaque classe le nom (avec première lettre majuscule) déduit de celui de la fiche, en supprimant les espaces éventuels, tandis qu'il a besoin que l'utilisateur nomme la méthode correspondant à chaque  responsabilité et indique la classe éventuellement passée en paramètre ou retournée par cette méthode (choisie parmi celles collaborant). L'intitulé de la responsabilité devient le début de commentaire officiel de la méthode dans le code.
L'utilisateur peut laisser ces choix vides, la précision n'étant pas encore requise. Seule contrainte (en fait intérêt bien compris) : le choix des classes dans les paramètres et retours permet de générer des tests plus proches de l'attente formulée par les "clients" dans les fiches CRC, et mettra donc une alerte en cas de régression lors du codage par la suite.

Editeur

Classique, il assure la coloration syntaxique correspondant au langage Java. Il permet de présenter les méthodes d'un objet après la saisie du point puis la signature de celles-ci (paramètres), pour faciliter la rédaction aux débutants.


Module UML

Le concepteur visuel serait utilement complété d'un module UML sommaire, permettant l'affichage du projet sous forme de diagrammes et leur édition. Le générateur de code pourrait alors prendre les schémas UML et en tirer le code correspondant.


Tutoriel

La réalisation de GreenJ, ayant un but pédagogique, a donné lieu à une présentation de JAVA et des fonctionnalités mises en oeuvre au sein de GreenJ, au fur et à mesure de son développement.


Trucs et astuces

Il s'agit de notes mises ici pour me souvenir des astuces qui me sont utiles, découvertes au fil du temps, souvent après de laborieuses recherches dans les pages de "man" ou "info".             a2ps --file-align=virtual *.java
            Utiliser, en mode console, le programme "pinfo" (Przemek's Info Viewer). Il fonctionne comme le navigateur Lynx.
_____________________________________________________________________________
(*) J'ai les noms ! J'ai les noms des fondus de langages fonctionnels :-)
A quand un IDE didactique sur ces langages ?
Un début de réponse : Cameleon ?
Document fait avec Nvu