Calculette
Il s'agit de réaliser une classe Calculette évaluant une
expression numérique.
On utilise des expressions préfixées pour faciliter
l'analyse :
- pas de priorité
- pas d'associativité
- la pile nécessaire au calcul est celle des appels
récursifs
Par exemple, + / 4 2 1 dont le résultat est 3 (= 4/2 + 1)
D'autre part, le caractère '-' étant utilisé comme
signe par StreamTokenizer, l'opérateur binaire correspondant
sera représenté par le mot "moins".
Première version
- L'interface Operateur décrit les
opérations d'un opérateur : récupérer son
symbole, son arité et évaluer une expression bien
formée à partir de cet opérateur.
- La classe Operateurs fournit sous la
forme de constantes quelques opérateurs usuels.
- La classe ErreurSyntaxiqueException
représente les exceptions liés à une erreur de
syntaxe dans une expression.
- La classe Calculette permet
l'evaluation d'expressions, soit à partir de l'entrée
standard, soit à partir d'un fichier. Le résultat est
donné soit sur la sortie standard, soit dans un fichier. Cette
classe utilise en particulier un java.io.StreamTokenizer
pour le découpage des expressions en lexèmes.
Version avec chargement dynamique des opérateurs
- Dans cette version, la classe Calculette a
été "nettoyée" de façon à
séparer les entrées/sorties et l'évaluation
proprement dite.
- La gestion des entrées/sorties a été
transférée dans une classe Calculettes, qui fournit
des méthodes de classe uniquement.
- La classe Calculette est étendue en une classe CalculettePlugins qui au
lieu de charger des opérateurs à partir d'un tableau va
charger les opérateurs contenus dans un répertoire
passé en paramètre. Cette classe utilise en particulier
un java.lang.ClassLoader.
- Les classes Operateur, Operateurs, ErreurSyntaxiqueException
sont inchangées, à ceci près que toutes les
classes ont été transférées dans un
paquetage calculette.
- Les classes d'opérateurs (fichiers .class) sont maintenant dans un
répertoire "plugins". Ces fichiers sont obtenus à partir
des fichiers sources contenus dans le répertoire "pluginsSrc".
- Le main de cette version se trouve dans une classe hors du
paquetage calculette CalculetteDynamique.
Afin de pouvoir obtenir le résultat attendu, il est
nécessaire avec Eclipse de :
- demander à la création du projet des
répertoires pour les fichiers sources et les fichiers binaires
séparés :
- dans le premier dialogue, cocher create separate source and output
folders,
- choisir next
- dans le second dialogue,
cocher allow output folders for
source folders.
- créer un second répertoire source, par exemple pluginsSrc :
- utiliser la commande New
du menu File (barre de
menu ou click droit), puis choisir Source Folder, le projet
étant selectionné.
- créer un répertoire de destination pour les sources
du répertoire pluginsSrc
:
- clicker sur le répertoire pluginsSrc avec le click droit,
et selectionner dans le menu Build
Path l'item Configure
Output Folder ... choisir Specific
output
folder et entrer le nom désiré, par exemple plugins.
Versions graphiques
- Dans sa première version, la calculette graphique est
composée d'une
JFrame
, contenant
- un
JTextField
,
- deux
JPanel
,
- le premier contenant des
JButton
pour les
chiffres, le point et l'espace,
- le second des
JButton
pour les
opérations,
- un
JButton
pour le "="
Le code rajouté à la version précédente est
contenu principalement dans la classe CalculetteFrame
incluse dans le paquetage calculette
. La classe contenant
la méthode main
a été
modifiée et renommée en CalculetteGraphique
.
Le layout utilisé dans la JFrame
est un BorderLayout
.
Ceux
utilisés dans les deux JPanel
regroupant les
boutons sont des GridLayout
.
- Seule la classe
CalculetteFrame
est modifiée dans la deuxième version. Les deux JPanel
ont été supprimés et tous les composants de la JFrame
sont gérés par un même layout de type GridBagLayout
.