USTL Licence Informatique 2002–2003
Conception Objet
Examen
3 heures - documents ´
ecrits autoris´
es
vendredi 5 septembre 2003
On veut concevoir un ´
evaluateur d’expressions symboliques. Diff´
erents traitements pourront ˆ
etre appliqu´
es sur ces
expressions tels que l’affichage, l’´
evaluation, la simplification, etc. Une expression a la forme suivante :
<Expression> ::= <Atome> | <ExpressionBinaire>
<Atome> ::= <Constante> | <Variable>
<Constante> ::= 1 entier (int en Java)
<Variable> ::= 1 chaˆ
ıne (String en Java)
<ExpressionBinaire> ::= <Plus> | <Moins> | <Mult> | <Div>
<Plus> ::= <Expression> + <Expression>
<Moins> ::= <Expression> - <Expression>
<Mult> ::= <Expression> * <Expression>
<Div> ::= <Expression> / <Expression>
Voici des exemples de telles expressions repr´
esent´
ees comme d’usage sous forme d’arbre :
X 5 +
X 5
*
+-
X5Y3
Q1. Proposez un graphe d’h´
eritage de classes permettant la repr´
esentation de telles expressions.
Affichage L’affichage d’une expression est r´
ealis´
ee en “demandant” `
a chacun des ´
el´
ements qui constitue cette ex-
pression comment il s’affiche par appel `
a la classique m´
ethode String toString. L’affichage des expressions
binaires est encadr´
ee par des parenth`
eses.
Evaluation d’une expression L’´
evaluation des expressions est r´
ealis´
ee en parcourant l’expression. Ainsi chaque
´
element de l’expression sait comment s’´
evaluer et donc toutes les expressions doivent accepter l’envoi de message
suivant :
public Constante evaluer (Memoire mem);
L’´
evaluation num´
erique d’une expression doit retourner une constante repr´
esentant la valeur de cette ´
evaluation. Le
param`
etre Memoire est utilis´
e par les objets Variable. La classe Memoire impl´
emente en faitun dictionnaire
stockant et centralisant la valeur associ´
ee `
a chaque variable.
Q2. Donnez le code de la classe Memoire qui permet de savoir pour un symbole de variable quelle est
l’expression constante qui d´
efinit la valeur associ´
ee `
a ce symbole. Il faut bien sˆ
ur pouvoir modifier une
m´
emoire et acc´
eder aux valeurs des constantes. On supposera pour tout le sujet que les variables sont
repr´
esent´
ees par une chaˆ
ıne sans espace commenc¸ant par une lettre.
Q3. Donnez le diagramme UML de chacune des entit´
es (classes ou interfaces) de votre graphe d’h´
eritage de
la question 1, vous pr´
eciserez les attributs, constructeurs et m´
ethodes (sans r´
ep´
eter les ´
eventuelles m´
ethodes
h´
erit´
ees). Il est inutile de r´
ep´
eter les relations entre les diff´
erentes entit´
es.
Q4. Donnez le code java des classes (et de totue les classes interfaces utilis´
ees par celles-ci) permettant de
g´
erer les expressions <Constante>,<Variable>et <Mult>.
Q5. Un interpr`
ete poss`
ede une m´
emoire et dispose de la seule m´
ethode :
public void evalue(Expression exp)
Elle a pour effet d’afficher le message :
l’expression exp a pour valeur valeur
o`
uexp est l’expression et valeur est la valeur de l’expression selon la m´
emoire de l’interpr`
ete.
Donnez le code java d’une classe Interprete.