Un Browser de hiérarchies de classes Java en Java

publicité
Un Browser de hiérarchies de classes
Java en Java
I) Ressources nécessaires (langages, matériels, compétences) :
- Java
- API Swing
- Java2d
- Introspection
II )Soit un développement Java découpé en un ensemble de
paquetages, l’outil considéré doit :
1) Permettre de choisir un répertoire où sont localisés les fichiers compilés
java les .class
2) Interroger les différentes classes par les possibilités d’introspection du
langage et construire une hiérarchie représentant le graphe d’héritage entre
classes et interfaces (un lien implements est un lien extends)
3) Afficher la hiérarchie reconstituée dans un browser.
Pour un affichage joli, Il y a deux choses à prendre en compte :
o Le rang du sommet (sa distance par rapport à la racine)
o Minimiser le nombre d’arcs qui se coupent.
o Un algorithme vous sera fourni pour ceci.
4) Ce browser doit permettre d’afficher les différents constituants d’une
classe lorsque l’utilisateur clique sur l’une d’entre elles.
5) Ce browser doit permettre de déplacer ou d’inverser les classes d’un
même rang afin d’optimiser manuellement le rendu graphique de la hiérarchie
Recherche :
Nous allons, dans ce chapitre, nous intéresser à la mise en oeuvre d'interfaces
graphiques en Java. Comme nous allons le voir, il vous est possible de créer toutes
sortes d'interfaces, et d'y inclure tous types de composants : des boutons, des case à
cocher, des zones de saisie de texte, ... Mais vous pourrez aussi y inclure des
composants plus complexes : des menus, des arbres déroulant, des boîtes de
dialogue pour choisir des fichiers, des couleurs, ... Nous allons, tout au long des
chapitres suivants, présenter les principales possibilités qui vous sont offertes.
L'API Swing :
SWING fut donc mis en place pour assurer 100% de portabilité (même un pixel
doit avoir la même couleur). Le pari est gagné, mais à un coup non forcément
négligeable : pour assurer cette portabilité, un bouton (au tout autre composant
graphique) est dessiner non plus par l'OS, mais par Java (ce qui en terme de temps
d'exécution à un prix).
En fait, SWING est présenté comme étant écrit uniquement en Java. Bien
entendu, il y a une petite triche : en effet, Java doit au moins être capable d'interagir
avec l'OS pour pouvoir tracer un point (il faut donc autre chose que du 100% Java).
Or c'est ce que font les classes de base de l'AWT (telles que Component, Container,
...). En conséquence, tous les composants de SWING dérive d'une classe de
l'AWT.
Notez une chose importante : les mécanismes de gestion d'évènements et de
positionnent des composants de l'AWT restent utilisable avec SWING. Donc,
certaines classes déjà utilisées avec l'AWT sont donc toujours d'actualité. En terme
d'importation de package, cela implique qu'un programme SWING doit malgré tout
importer certains packages de l'AWT.
Dernières petites choses pouvant intervenir dans le choix d'une des deux API Swing est bien plus riche que l'AWT (même si un composant n'existe pas en natif sur
l'OS, rien n'empêche de complètement le redessiner) - Si vous cherchez à mettre en
place des applets, sachez que Swing n'est pas encore supporté par tous les
navigateurs (on peut contourner le problème, nous y reviendrons).
Créer des Arbres à l’aide de la classe swing :
http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JTree.html
L’API de Java2 : http://www.infres.enst.fr/docs/jdk1.4.0/api/
L'introspection (réflexion) permet à un programme Java de
découvrir dynamiquement des informations sur une classe :
Ainsi, les champs, constructeurs, méthodes et autres caractéristiques d'une
classe peuvent être livrés sans connaissance préalable du code source d'une classe.
Ce mécanisme introspectif est généralement utilisé par des outils de développement
IDE (Integrated Development Environnement).
Par exemple, les interpréteurs et inspecteurs d'objets de ces applications s'appuient
largement sur cette technique.
Les classes nécessaires à l'introspection sont contenues dans les paquetages
java.lang et java.lang.reflect.
Le paquetage java.lang.reflect possèdent plusieurs classes et interfaces permettant
de mettre en oeuvre le mécanisme d'introspection.
Les trois classes Field, Method et Constructor possèdent un modificateur final. La
machine Virtuelle Java peut seulement créer des instances de ces classes.
Ces objets sont utilisés pour manipuler les objets sous-jacents :
o obtenir les informations d'introspection à propos des constructeurs et
membres sous-jacents
o obtenir et fixer les valeurs des champs
o invoquer les méthodes sur les objets ou les classes,
o créer de nouvelles instances des classes.
La classe Array est également finale mais non-instanciable. Elle fournit des
méthodes statiques qui permettent de créer de nouveaux tableaux et d'obtenir ou de
fixer les éléments des tableaux.
I) Cahier des charges :
1.1) Reformulation du sujet
Le logiciel doit permettre de :
- Ouvrir un dossier contenant des fichiers .class
- Récupérer son contenu grâce à l’utilisation de la classe outil Introspection
- Analyser le contenu
- Construire un arbre hiérarchique de classes sélectionnées
- Afficher l’arbre
- Permettre de modifier l’affichage de manière à changer la position des
classes affichées et de diminuer le nombre de coupures entre les branches
de l’arbre et par conséquent d’optimiser la affichage et la compréhension
du diagramme hiérarchique.
- Cliquer sur une classe et obtenir l’affichage de sa spécification
1.2) Problèmes à résoudre
Il y a plusieurs problèmes majeurs en matière de réalisation à resoudre :
1) L’ouverture des classes et la récupération des informations les
caractérisant va nécessiter l’apprentissage de l’utilisation de la classe
Introspection de la bibliothèque Java.
2) La contruction de l’arbre et son affichage
3) L’optimisation de l’affichage de l’arbre et par conséquent la recherche d’un
algorithme permettant de minimiser le nombre de coupure entre les
branches des feuilles du diagramme hiérarchique.
1.3) Contexte de la demande
1.4) Definition du domaine (attentes)
Le logiciel devra permettre de :
-
Sélectionner un répertoire contenant des fichiers java compilés .class au travers de
l’utilisation d’un explorer
-
Récupérer les caractéristiques (spécification) des fichiers .class sélectionnés afin
de déterminer les liens d’héritages :
1. Classes racines
2. Classes Mères
3. Classes Filles
4. Liens ETRE
5. Liens AVOIR
-
Afficher les noms des classes et leurs liens graphiquement afin de représenter le
graphe d’héritage :
1. une classe est représentée par un cadre contenant son nom
2. un lien est représenté par une flèche (lien ETRE) ou par une flèche en pointillé
(lien AVOIR) entre deux classes
3. la couleur des classes varie en fonction de son type (classe abstraite,
interface…). La couleur pour chaque type n’est pas encore définie et sera
choisie par le client ou par nos soins.
-
Organiser les classes en fonction de leur niveau hiérarchique :
1. classe de même niveau à la même hauteur graphique (organisation automatique
par étage)
2. classes de même niveau réorganisables manuellement par deux clicks pour
sélectionner et un bouton inverser.
-
Accéder à la spécification d’une classe du diagramme hiérarchique en clickant sur
le cadre contenant le nom de celle-ci et en l’affichant dans une autre fenêtre.
Le logiciel ne devra pas permettre de :
-
Ouvrir des fichiers n’étant pas des fichiers java compilés (.class)
Afficher constamment l’explorer du disque dans la fenêtre du logiciel
Accéder à la spécification en modification
1.5) Eléments de qualité
//screen shot appli
1.6) Services offerts à l’utilisateur
1.7) Contraintes matérielles et technologiques
a) Compatibilité avec d’autres logiciels
b) Contraintes de développement
Téléchargement