You are on page 1of 3

Universit Mohammed V de Rabat Anne Universitaire 2016/2017

Facult des Sciences Rabat Interface Homme Machine


Dpartement Informatique SMI-S6

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

public interface Function {


public double getValue();
}
L'architecture applicative est largement base sur l'hritage et le polymorphisme et trs proche
de l'tude de cas prsente en cours. L'expression d'une fonction mathmatique se trouve ainsi
ramene la construction d'une structure arborescente dont les nuds sont des lments drivs
de l'interface Function.

L'expression ci-dessus f(x) pourrait tre construite ainsi :

Var x=new Var("x"),y=new Var("y");


Function f=new Plus(x,new Mul(new Val(2),y));
System.out.println(f);
Le rsultat d'excution est le suivant : (x+(2.0*y))

De mme la fonction g(x,y,z) pourrait tre construite ainsi :

Var x=new Var("x"),y=new Var("y"),z=new Var("z");


Function x2=new Sqr(x);
Function y2=new Sqr(y);
Function z2=new Sqr(z);
Function g=new Plus(x2, new Plus(y2,z2));
System.out.println(g);
Rsultat : ((x)+((y)+(z)))

De mme la fonction h(x)pourrait tre construite ainsi :

Var x=new Var("x");


Function h=new Plus(new Sin(x),new Val(5));
System.out.println(g);
Rsultat : (sin x+5.0)

Prof. Lahoucine BALLIHI


1
Universit Mohammed V de Rabat Anne Universitaire 2016/2017
Facult des Sciences Rabat Interface Homme Machine
Dpartement Informatique SMI-S6

De mme la fonction k(x)pourrait tre construite ainsi :

Var x=new Var("x"),y=new Var("y");

Function k=new Plus(new Sqr(new Sin(x)),new Sqr(new Cos(x)));


System.out.println(k);
Rsultat : ((sin x)+(cos x))

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 :

Var x=new Var("x");


Function h=new Plus(new Sin(x),new Val(5));

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.

Prof. Lahoucine BALLIHI


2
Universit Mohammed V de Rabat Anne Universitaire 2016/2017
Facult des Sciences Rabat Interface Homme Machine
Dpartement Informatique SMI-S6

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 :

Pour x=-3.00000 ((sin x)+(cos x))=1.00000


Pour x=-2.13000 ((sin x)+(cos x))=1.00000
Pour x=-1.26000 ((sin x)+(cos x))=1.00000
Pour x=-0.390000 ((sin x)+(cos x))=1.00000
Pour x=0.480000 ((sin x)+(cos x))=1.00000

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))

Prof. Lahoucine BALLIHI


3

You might also like