:: Enseignements :: ESIPE :: E4INFO :: 2014-2015 :: Programmation Orientée Objet - Design Patterns ::
[LOGO]

Visiteur sous steroid


Comment améliorer l'API du visiteur ?

Exercice 1 - Retours sur vos rendus ...

Exercice 2 - Le visiteur avec paramètre hérité

En fait lors d'un calcul sur un arbre, on va non seulement avoir des valeurs de retour mais aussi passer des paramètres, donc l'interface d'un visteur devrait plutôt être celle-ci
		  public interface ExprVisitor<P, R> {
        public R visitValue(Value value, P param);
        public R visitBinOp(BinOp binOp, P param);
      }
		 
avec P representant le type d'un objet contenant tous les arguments si il y en a plusieurs ou le type de l'argument si il n'y en a qu'un seul.

  1. Modifier la classe EvalVisitor pour utiliser la nouvelle interface.
  2. Ré-écrire la classe ToStringVisitor en considerant que P est un StringBuilder.

Exercice 3 - Le visiteur avec des lambdas

Revenons sur ce qu'est un visteur, un visteur est un objet qui associe à une classe (Value ou BinOp) à un code à exécuter. Il peut donc est implanter avec une table de hachage qui associe à une classe (un objet de type java.lang.Class) une lambda contenant le code à exécuter.
On se propose d'écrire la classe ExprVisitor de tel sorte à ce que le code suivant fonctionne
     ExprVisitor<Void, Integer> evalVisitor = new ExprVisitor<>();
     evalVisitor
       .when(Value.class, (value, unused) -> {
         ...
       })
       .when(BinOp.class, (binOp, unused) -> {
         ...
       });
     evalVisitor.visit(expr, null); 
     

  1. Quel sont le ou les avantage de l'API proposée par rapport à une API de visiteur classique ?
  2. Quel doit être la signature de la méthode when ?
    Quel est le type du second paramètre de la méthode when ?
  3. Quel est la signature de la méthode visit ?
  4. Quelle structure de donnée doit être utiliser pour implanter les méthodes when et visit ?
    Ecrire en pseudo code, les codes de when et visit.
    Comment déclarer la structure de donnée pour éviter de faire des casts ?
    Ecrire le code Java de la classe ExprVisitor.

Exercice 4 - Récapitulatif