Exercice 1.1 Des termes version objet

Pour représenter les arbres, définir une classe abstraite Terme qui définit un noeud de l'arbre. Un terme pourra être un nombre et possède alors une valeur de type double. Les autres types de termes (addition, soustraction, multiplication, division) représentent des noeuds internes de l'arbre et possèdent deux termes fils. Chaque type de terme sera représenté par une classe TNombre, TAdd, TSoustr, TMult, ou TDiv.

La classe abstraite Terme définira deux méthodes abstraites abstract public String toString (); et abstract public double calcul ();. Pour tester votre code, vous pourrez ainsi utiliser le terme test suivant :

	Terme inter = new TSoustr (new TNombre (2.0), new TNombre (3.0)) ;
	Terme test = new TAdd (new TNombre (1.0), 
                               new TMult (inter, new TNombre (4.0))) ;

Ainsi, un appel à System.out.println (test) (qui revient à System.out.println (test.toString ())) doit afficher quelque chose comme (1.0 + ((2.0 - 3.0) * 4.0)) (on ne cherchera pas à minimiser le nombre de parenthèses). (Pour transformer une variable d de type double en String, on pourra utiliser ("" + d).)

Un appel à System.out.println (test.calcul ()) doit afficher -3.0.

Une solution.


Sujet proposé par Laurent Viennot Last modified: Wed Mar 16 19:01:00 CET 2005