1. Puisque assoc est dynamique l'environnement vide ne peut pas être représenté par null.

  2. On a recourt à une technique objet bien classique et que j'aime bien : l'encapsulage, les objets de la classe EnvList possèdent un champ qui est une liste.
    class EnvList implements Env {
      
    private List me ;

      
    EnvList () { me = null ; } // Constructeur des  environnements vides, amical.

      
    private EnvList (List l) { // Constructeur privé.
        me = l ;
      }

    /* Les méthodes des interfaces sont nécessairement publiques,
       c'est la vie ! */

      
    public Env add (String x, int v) {
        
    return new EnvList(new List (x, v, me)) ;
      }

      
    public int get(String x) {
        
    return List.assoc(me, x) ;
      }
    }
    On remarquera que add renvoie un Env (et non pas un EnvList) et la conversion de type est ici sans douleur. En effet, il s'agit ici d'une perte d'information qui ne peut pas échouer.

  3. Le problème de coût est algorithmique, l'accès à une liaison coûte au pire le nombre de liaisons. On peut résoudre ce problème en utilisant une structure de donnée plus performante comme par exemple les arbres binaires équilibrés (accès en log). Il est important de fournir alors une classe des environnements qui implémente encore l'interface Env.