L'Interface Homme-Machine (IHM) (Fig. 9.1 page ??) constitue le lien entre l'utilisateur et le programme. Ainsi, elle se doit d'être conviviale, robuste et cohérente.
L'interface de commande est constituée des composants qui vont permettre à l'utilisateur d'effectuer une action. Il s'agit dans notre cas de la barre de menu et de la barre d'outils.
La barre de menus
Figure 9.2: La barre de menus.
La barre de menus (Fig. 9.2 page ??) contient toutes les actions que l'utilisateur peut effectuer au sein de l'IHM. Les menus sont au nombre de sept (Fichier, Compilation, JajaCode, MiniJaja, Look & Feel, Fenêtre, ?) et sont tous munis de raccourcis clavier pour faciliter leur utilisation.
Le menu Fichier va permettre de :
créer un nouveau fichier
ouvrir un fichier existant
sauvegarder le fichier
fermer l'espace de travail
quitter l'application
Le menu Compilation va permettre de compiler le fichier courant.
Le menu JajaCode va permettre de :
exécuter une instruction JajaCode
redémarrer l'interprétation JajaCode
afficher la table de hachage JajaCode
afficher le tas JajaCode
Le menu MiniJaja va permettre de :
exécuter une instruction MiniJaja
exécuter des instructions MiniJaja jusqu'au prochain point d'arrêt
redémarrer l'interprétation MiniJaja
afficher la table de hachage MiniJaja
afficher le tas MiniJaja
Le menu Look And Feel va permettre de changer l'apparence de l'application. Trois apparences peuvent être disponibles dans Java : Métal (Java), Windows et Motif.
Le menu Fenêtre va permettre de vider la fenêtre de messages.
Finalement, le menu d'aide (?) va permettre :
d'afficher l'à-propos
d'afficher l'aide d'utilisation
La barre d'outils
Figure 9.3: La barre d'outils.
La barre d'outils (Fig. 9.3 page ??) reprend la plupart des options de la barre de menus pour offrir à l'utilisateur un accès rapide aux principales fonctions disponibles. Celles-ci sont présentées dans le même ordre que dans les menus, et un séparateur permet de différencier les menus concernés. Elles sont matérialisées par des icônes et sont munies d'une bulle d'aide reprenant l'intitulé de l'option du menu correspondante. Les options des menus JajaCode et MiniJaja ayant les mêmes significations, elles sont représentées par des icônes similaires, mais une étiquette permet de les différencier.
La barre d'outils est placée par défaut en dessous de la barre de menus, mais il est possible de l'aggriper à l'aide de la souris pour la placer sur un des autres bords de la fenêtre ou de la laisser flottante.
L'interface de dialogue est constituée des composants qui vont permettre à l'utilisateur de visualiser les traitements effectués par le programme ou d'intéragir avec ceux-ci. De manière plus pratique, cette interface est composée de plusieurs bureaux, qui sont eux-mêmes composés de plusieurs fenêtres internes.
Les bureaux
Les bureaux représentent les espaces de travail de l'utilisateur. Chaque ouverture ou création d'un fichier MiniJaja provoquera l'ouverture d'un nouveau bureau. De même, la fermeture d'un fichier MiniJaja entraînera la fermeture du bureau correspondant. L'utilisateur peut passer d'un bureau à un autre grâce à une barre d'onglets disposée au dessus de ceux-ci (Fig. 9.4 page ??).
Figure 9.4: La barre d'onglets des différents bureaux.
Les fenêtres internes
Figure 9.5: La fenêtre interne du buffer MiniJaja.
A l'intérieur de chaque bureau sont présentes plusieurs fenêtres internes, qui permettent d'afficher les résultats des différents traitements effectués par l'application. Elles sont au nombre de neuf :
La fenêtre interne d'affichage du buffer MiniJaja
(Fig. 9.5 page ??) :
Cette fenêtre interne est la seule qui soit interactive :
l'utilisateur pourra y modifier le code source MiniJaja, et
éventuellement ajouter ou retirer des points d'arrêt en cliquant
simplement sur un numéro de ligne affiché à gauche du texte.
La fenêtre interne d'affichage de messages d'informations et
d'avertissements :
Cette fenêtre permet d'afficher tous les messages générés par
l'ensembe des
modules de l'application. Les mauvaises manipulations de l'Interface
Homme-Machine y sont également affichées, sauf si aucun espace de
travail n'est ouvert. En effet, dans ce cas, les erreurs
d'utilisation sont ignorées.
La fenêtre interne d'affichage du JajaCode :
Le JajaCode produit
par la compilation du MiniJaja y sera affiché.
Les fenêtres suivantes sont optionnelles et leur affichage pourra être
provoqué via la barre de menus ou la barre d'outils :
La fenêtre interne d'affichage de l'état mémoire du JajaCode.
La fenêtre interne d'affichage de l'état mémoire du MiniJaja.
La fenêtre interne d'affichage de la table de hachage du JajaCode.
La fenêtre interne d'affichage de la table de hachage du MiniJaja.
La fenêtre interne d'affichage du tas du JajaCode.
La fenêtre interne d'affichage du tas du MiniJaja.
Les fenêtres internes peuvent être manipulées au sein du bureau à la manière des fenêtres classiques : il est possible de fermer, d'agrandir, de redimensionner et d'icônifier une fenêtre interne (Fig. 9.6 page ??).
L'IHM a été conçue selon le paradigme de programmation Modèle - Vue - Contrôleur qui permet de séparer les traitements inhérents au programme de ceux appartenant à l'interface graphique proprement dite, pour rendre l'application la plus indépendante possible et évolutive vis-à-vis des librairies d'affichage. Cette méthode présente également l'avantage de modéliser les différents changements de comportement de l'IHM sous forme d'états, induisant ainsi un code source plus propre, plus clair, et surtout plus maîtrisable.
L'IHM est organisée en différentes classes :
Fenetre, qui dérive de JFrame et est la classe principale de l'IHM. C'est elle qui dialogue avec la classe d'interfaçage, construit l'interface graphique et récupère les actions de l'utilisateur. Elle constitue la vue et les contrôleurs de l'approche Modèle-Vue-Contrôleur .
Bureau qui dérive de JDesktopPane pour fournir des méthodes précises de gestion des différentes fenêtres internes.
FenetreBuffer, FenetreHTML et
FenetreMessages qui dérivent toutes trois de
JInternalFrame et permettent de définir des méthodes spécifiques
à chaque type de fenêtre interne à afficher.
FenetreAide, qui dérive de JFrame et permet d'afficher l'aide de l'application.
MJJFileFilter, qui dérive de FileFilter et qui définit un filtre sur les fichiers MiniJaja (*.mjj) pour les boites de dialogue d'ouverture et de sauvegarde de fichiers.
Contrairement aux autres modules, pour lesquels les jeux de test peuvent être joints sous la forme d'une suite d'instructions, ceux concernant l'Interface Homme Machine sont constitués d'une suite d'actions difficilement reproductibles de manière textuelle. Ainsi, cette partie traite de la méthode considérée pour effectuer les tests, et non des tests en eux-mêmes.
L'utilisateur final étant par nature imprévisible, l'IHM se doit de
résister à toutes les incohérences possibles. C'est pourquoi outre le
fait de tester son bon fonctionnement lors d'opérations normales
, il fallait également pouvoir tester ses réactions en cas
d'actions incongrues. Les jeux de test ont donc porté sur quatre cas différents :
avec des fichiers MiniJaja corrects
avec des fichiers MiniJaja incorrects
avec un fichier vide
sans fichier ouvert
D'autre part, l'IHM permettant l'ouverture de plusieurs espaces de
travail, des tests combinant les trois premiers types de fichiers précités ont
été réalisés, afin de valider l'exécution
parallèle de différentes tâches. De plus, des tests ont été effectués
pour s'assurer de la constante cohérence de l'état de l'application
lorsque l'utilisateur passe d'un espace de travail à un autre, qu'il
en créé de nouveaux ou ferme certains de ceux existants.
Finalement, au sein d'un même espace de travail, certaines actions obéissent à des règles de précédence. Par exemple, il est impossible de lancer l'interprétation JajaCode sans avoir préalablement compilé le fichier MiniJaja. De ce fait, le dernier critère de réalisation des jeux d'essai à été celui-ci : tester la réaction de l'application lorsque l'ordonnancement des actions n'est pas respecté.
L'IHM satisfait tous les besoins fonctionnels requis par le cahierdes charges, à savoir :
Compilation des programmes MiniJaja corrects et bien typés.
Comparaison des résultats de l'interprétation d'un programme MiniJaja et du programme JaJaCode qui en est issu par compilation, ceci par l'utilisation des fenêtres internes au sein d'un même espace de travail, ou éventuellement de plusieurs, en utilisant la barre d'onglets pour passer de l'un à l'autre.
Ouverture et compilation de programmes issus d'éditeurs de texte provenant de différents systèmes d'exploitation.
Affichage du JaJaCode produit par la compilation dans une fenêtre interne.
Le seul besoin non fonctionnel ayant rapport avec l'IHM est également satisfait :
Comparaison des états mémoire de fin d'exécution des programmes.
Finalement, une partie des extensions à réaliser a été implémentée :
Interprétation pas-à-pas des programmes MiniJaja et JaJaCode.
Interprétation avec points d'arrêt d'un programme MiniJaja.
Il manque donc uniquement l'interprétation avec points d'arrêt d'un programme JaJaCode.