:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Programmation Orientée Objet ::
[LOGO]

Visiteur


Visiteur et visiteur générique

Exercice 1 - Visiteur

Voici un exemple d'un petit évaluateur et simplificateur d'expression arithmétique td5eval.zip. On cherche à ajouter un mécanisme de visiteur au code existant.

On souhaite écrire un visiteur SimplifyVisitor effectuant la même opération que la méthode simplify de l'interface Expr.
    public class SimplifyVisitor {
      public Expr visit(Variable variable) {
        ...
      }
      public Expr visit(Constant constant) {
        ...
      }
      public Expr visit(Plus plus) {
        ...
      }
      public Expr visit(Minus minus) {
        ...
      }
      public Expr visit(Star star) {
        ...
      }
      public Expr visit(Slash slash) {
        ...
      }
    }
  }
   
Le visiteur sera appelé sur chaque noeud de l'arbre afin de simplifier l'expression courante et de renvoyer l'expression simplifiée.
Dans le main on demandera alors la simplification de l'expression de cette façon :
    Expr expr2=expr.accept(new SimplifyVisitor());
   

On souhaite maintenant utiliser le même mécanisme de visiteur pour écrire un visiteur ToStringVisitor effectuant l'équivalent de la méthode toString().
Pour cela, nous allons créer une interface Visitor que les classes SimplifyVisitor et ToStringVisitor implanteront.
Pensez au generics !