sujet pour expression booléenne

publicité
Design patterns par la pratique
De la conception au code Java
1. Application d’un design
d'expressions booléennes
pattern
à
l'évaluation
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
ExpBool
Contexte
+Evalue(entrée unContexte : Contexte) : boolean
Constante
Variable
-Valeur : boolean
-Nom : String
ExpOU
ExpET
ExpNON
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)
TD design patterns
1
Anne Lapujade
{
return (operandel.evalue(uncontexte) && operande2.evalue(unContexte));
}
Questions:
1. Donnez le diagramme d'objet correspondant à l'expression donnée au début ("(x et non y) ou
(y et vrai)").
2. Enrichissez le diagramme de classe avec les relations qui reflètent les liens entre objets.
3. Quel design pattern utilisez-vous ?
4. Ecrivez le code Java correspondant à cette solution.
TD design patterns
2
Anne Lapujade
Téléchargement