:: Enseignements :: Master :: M1 :: 2014-2015 :: Design Pattern ::
[LOGO]

Visiteur sous steroid


Comment améliorer l'API du visiteur ?

Exercice 1 - Retours sur vos rendus ...

Exercice 2 - 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 -> {
         ...
       })
       .when(BinOp.class, binOp -> {
         ...
       });
     evalVisitor.call(expr); 
     

  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 call ?
  4. Quelle structure de donnée doit être utiliser pour implanter les méthodes when et call ?
    Ecrire en pseudo code, les codes de when et call.
    Comment déclarer la structure de donnée pour éviter de faire des casts ?
    Ecrire le code Java de la classe ExprVisitor.
  5. Quelle sont les avantages et inconvénients d'écrire le code du visiteur de cette façon là par rapport au visteur classique du GOF ?

Exercice 3 - Récapitulatif