EXERCICE + CORRIGE EN JAVA : Expressions arithmétiques
On considère maintenant des expressions arithmétiques formées à partir de constantes réelles (nombres flottants) et utilisant les quatre opérations arithmétiques usuelles (addition, soustraction, multiplication et division). Un telle expression est par exemple 3 + (4.7 + 2.3) * 5 .
Ces expressions arithmétiques sont représentés par des arbres binaires. Les nœuds internes de l'arbre contiennent les opérateurs alors que Les feuilles de l'arbre contiennent les constantes. Les fils gauche et droit d'un nœud interne représentent les deux sous-expressions gauche et droite. L'expression 3 + (4.7 + 2.3) * 5 par l'arbre de la figure ci-dessous.
FIG 1. L'arbre de l'expression 3 + (4.7 + 2.3) * 5
L'organisation en interfaces et classes
1) ---------
Définir une interface ArithExpr qui déclare les fonctionnalités d'une expression arithmétique. La seule fonctionnalité requise est de pouvoir être évaluée. Déclarer en conséquence une méthode eval du bon type.
Pour représenter l'expression, on va créer des objets pour chacun des nœuds. Ces objets vont bien sûr être des instances de classes différentes suivant qu'il s'agisse de nœuds internes ou de feuilles.
2) -------
Définir une classe Constant pour représenter les constantes des expressions.
3)-------
Définir quatre classes Addition, Soustraction, Multiplication et Division pour les opérations arithmétique. On remarque que ces quatre classes partagent beaucoup de propriétés. Comment faut-il faire pour partager le code ?
4)-------
Redéfinir la méthode toString afin d'afficher les expressions en notation infixe. Écrire des méthodes prefix et suffix permettant d'afficher les expressions en notation préfixe et suffixe.
5)-------
Écrire une methodes prefix et suffix permettnat d'afficher les expressions arithmétique en notation prefix et suffix.