TP1
On souhaite construire une application permettant la manipulation formelle d'expressions
mathmatiques telles que des expressions plusieurs variables, qu'on pourra tendre par la suite
aux champs scalaires ou vectoriels par exemple.
Exemples :
f(x,y)=x+2*y
g(x,y,z)=x+y+z
h(x)=sin(x)+5
k(x)=sinx+cosx
On choisit de construire une architecture largement base sur l'hritage. Au sommet on trouve
l'interface Function
L'expression de la fonction sous la forme d'une chane de caractres est obtenue en procdant
la redfinition de la mthode toString hrite d'Object dans toutes les classes o c'est utile.
Ces exemples montrent que pour construire de telles expressions il faut construire un arbre dont
les nuds sont des composants qui peuvent tre des fonctions (comme la classe Sin), des
oprateurs (comme Plus), des variables (Var), des constantes (Val).
On choisit d'organiser ces classes selon leur arit : 0 pour Valet Var, 1 pour les classes Sin,
Cos, Sqr etc.. , 2 pour les classes incarnant un oprateur.
Construire une nouvelle fonction quivaut donc construire un arbre exprimant la structure de
la fonction. La fonction h(x)=sin(x)+5 peut ainsi tre exprime par la construction suivante :
La mthode getValue est invoque sur l'instance de P lus. Celle-ci possde deux fils et relance
rcursivement cette requte sur chacun d'entre eux. La mthode getValue de Plus retournera
finalement la somme des valeurs retournes par ses 2 fils. Lorsque getValue est demande
une instance de Val celle-ci retourne la valeur dfinitivement associe sa cration. Lorsque
getValue est demande une instance de Var celle-ci retourne la valeur associe sa cration
(0 par dfaut) ou la valeur reue par setValue.
Exercice 1
Construire sur ce modle les classes Funct0, Funct1, Funct2 en prcisant pour ces trois
classes les liens de dpendance tenant compte de l'arit. Les liens de dpendance sont tablis
exclusivement par le constructeur de chaque classe. Ces trois classes sont-elles abstraites ou
concrtes?
Exercice 2
Construire les oprateurs sous la forme des classes Plus, Minus, Mul. Ne pas oublier la
redfinition de toString pour obtenir une chane correctement parenthse.
Exercice 3
Construire les fonctions sous la forme des classes Sin, Cos, Sqr, Sqrt, Inv. Ne pas oublier la
redfinition de toString pour obtenir une chane correctement parenthse.
Exercice 4
Construire les classes Val etVar. Ne pas oublier la redfinition de toString.
Exercice 5
Tester (TP seulement) sur les trois fonctions f,g,h et k ci-dessus les mthodes getValue,
toString. faire varier les valeurs des variables x,y ou z au moyen de setValue. La fonction k
pourra tre choisie pour une vrification aise (valeur 1). Exemple de rsultat :
Exercice 6
Facultatif: insrer un Plus n-Aire dans l'arborescence en utilisant les commodits de lellipse
(voir manuel java). Un plus n-Aire admet un nombre quelconque d'oprandes. Exemple
d'utilisation (avec 3 oprandes):
Function x2=newSqr(x);
Function y2=newSqr(y);
Function z2=newSqr(z);
Function g=newPlus(x2,y2,z2);
System.out.println(g);
Affichage:
((x)+(y)+(z))