Liste de String (StringList.java, ObjectList.java, CList.java, Cell.java, InvalidPositionException.java, Position.java, Predicate.java, TestStringList.java)

Lorsqu'une classe doît utiliser le code d'une autre classe, sans pour autant hériter de son type, il convient d'utiliser la délégation. Un exemple typique est la réalisation d'un classe StringList qui ne doît contenir que des objets de type String, et qui utilise pour son implémentation la classe CList qui contient des objets de type Object. StringList ne peut hériter de CList car alors, elle devrait pouvoir utiliser toutes les méthodes de CList (à cause de l'héritage de type), ce qui signifie par exemple que l'on peut rajouter des Object à une StringList même s'ils ne sont pas des String. Un test du type réel de l'objet à insérer peut bien sûr être effectué dans la méthode StringList.insert(Object), grâce à l'opérateur instanceof, mais c'est une solution peu satisfaisante.
D'autre part, les méthodes ne faisant pas intervenir le type des objets contenus sont communes aux StringList et aux CList. Ceci peut être explicite et utilisé en créant une interface qui déclare ces méthodes et est implémentée à la fois par CList et StringList. En fait, cette interface décrit un type "Liste avec curseur". Pour des raisons d'usage, nous appellerons donc cette interface CList et l'ancienne CList sera renommée en ObjectList.