TD design patterns 1 Anne Lapujade
Design patterns par la pratique
De la conception au code Java
1. Application d’un design pattern à l'évaluation
d'expressions booléennes
L'objectif de l'exercice est de construire un interpréteur d'expressions booléennes. Le programme
client construit une expression booléenne et peut l'évaluer. Par exemple, on devra pouvoir évaluer
l'expression suivante:
"(x et non y) ou (y et vrai)" avec x = faux et y = vrai
Pour ce faire on donne le code java du programme client:
final int vrai=1;
final int faux=0;
EXPBOOl expression;
Contexte contexte=new Contexte();
Variable x = new Variable("X") // crée la variable X
Variable y = new Variable("Y") // crée la variable Y
// construction de 1' expression booléenne
expression = new ExpOU( new ExpET(x, (new ExpNON(y))), new ExpET(y, new
Constante(vrai)));
contexte.assigne(x, faux); // X vaut Faux
contexte.assigne(y, vrai); // Y vaut Vrai
// L'expression s'évalue
boolean resultat = expression.Evalue(contexte)
Le diagramme de classes est le suivant
+Evalue(entrée unContexte : Contexte) : boolean
ExpBool
ExpET ExpNONExpOU
-Nom : String
Variable
-Valeur : boolean
Constante
Contexte
La classe Contexte garde à jour une liste de couple variable/valeur qui permet l'évaluation de
l'expression booléenne. L'opération "assigne", lie une valeur à une variable et l'opération "value"
renvoie la valeur de la variable à partir de son nom.
La classe ExpBool est la classe des expressions booléennes dont héritent
1. La classe Variable qui est une expression booléenne réduite à une variable.
2. La classe ExpET qui est la classe des expressions booléennes constituée de la conjonction
(et logique) de deux expressions booléennes.
3. La classe ExpOU qui est la classe des expressions booléennes constituées de l'inclusion (ou
logique) de deux expressions booléennes.
4. La classe ExpNON qui est la classe des expressions booléennes constituées de la négation
d'une expression booléenne.
L'opération "evalue" renvoie la valeur de l'expression booléenne, l'opération "copie" effectue une copie
profonde de l'expression et l'opération "remplace" produit une nouvelle expression booléenne par
remplacement d'une variable par une expression.
A titre d'indication, on donne le code Java du corps de l'opération "evalue" pour l'expET:
bool ExpET::evalue(Contexte uncontexte)