Exercice 1 : SimpleNamedPoint.java
Exercice 2 : SimpleNamedPoint.java et Test.java
Exercice 3 : SimpleNamedPoint.java et Test.java
Remarques sur l'exercice 3 :
Dans un premier temps, on essaye de modifier la définition
de SimpleNamedPoint ainsi :
public class SimpleNamedPoint implements NamedPoint, Drawable
et sur le même modèle, on peut considérer d'autres classe, par exemple, RoundNamedPoint.java et RectangleNamedPoint.java, ce qui permet une séquence d'instructions comme :
NamedPoint p1 = new SimpleNamedPoint("top", 100, 20);
Collection<NamedPoint> c1 = new LinkedList<NamedPoint>();
c1.add(p1);
c1.add(new RoundNamedPoint("left", 30, 100));
c1.add(new RectangleNamedPoint("right", 150, 100));
printNames(c1);
Drawable p2 = new SimpleNamedPoint("top", 100, 20);
Collection<Drawable> c2 = new LinkedList<Drawable>();
c2.add(p2);
c2.add(new RoundNamedPoint("left", 30, 100));
c2.add(new RectangleNamedPoint("right", 150, 100));
new Drawing(c2);
mais il est impossible de construire une seule collection qui puisse être passée en paramètre à la fois à printNames et au constructeur de Drawing. On y parvient en définissant :
interface DrawableNamedPoint extends NamedPoint, Drawable {}
class SimpleNamedPoint implements DrawableNamedPoint {...}
class RoundNamedPoint implements DrawableNamedPoint {...}
class RectangleNamedPoint implements DrawableNamedPoint {...}
ce qui permet :
DrawableNamedPoint p = new SimpleNamedPoint("top", 100, 20);
Collection<DrawableNamedPoint> c = new LinkedList<DrawableNamedPoint>();
c.add(p);
c.add(new RoundNamedPoint("left", 30, 100));
c.add(new RectangleNamedPoint("right", 150, 100));
La collection c ne peut toujours pas être passée en paramètre à printNames et au constructeur de Drawing. Il faut soit, si on peut le faire, modifier le type attendu en paramètre, par exemple :
static void printNames(Collection<? extends NamedPoint> c)
ce qui permet un appel printNames(c); ou, autrement, construire une nouvelle collection avec le type attendu, par exemple :
Collection<Drawable> cc = new LinkedList<Drawable>();
for (Drawable d : c)
cc.add(d);
new Drawing(cc);
ou le raccourci :
new Drawing(new LinkedList<Drawable>(c));
Exercice 4 : Test.java
Exercice 5 : TreeInterface.java
Exercice 6 : Tree.java et TreeNode.java
Exercice 7 : TreeDrawing.java
Exercice 8 : TreePlus.java