Approche Objet - TD6 : Éditeur de figures

On considère les classes Editeur, Planche et Ellipse.
  1. Tester l'application.
  2. Modifier le code de Ellipse pour que, si e est une ellipse inscrite dans le rectangle d’extrémités (xmin, ymin), (xmax, ymax) l’instruction
    System.out.println(e);

    affiche sur la sortie standard
    Ellipse (xmin,ymin) (xmax,ymax)
  3. Modifier la classe Planche pour que, lorsque l’on ajoute un point, si un autre point est déjà présent à la même position (à epsilon près), une exception PointExistantException soit levée. Donner le code de PointExistantException.
  4. En tenant compte du code des questions précédentes, modifier le code de Editeur pour que, si l’on essaye de créer un point à une position où un autre point existe déjà, un message d’avertissement s’affiche sur la sortie standard avec comme contenu “Impossible de créer un point près de (x,y)” où x et y sont les coordonnées du point déjà existant. L’application continuera ensuite de fonctionner normalement.
On souhaite maintenant pouvoir ajouter des formes autres que des ellipses, par exemple des triangles, des rectangles, etc. On souhaite donc utiliser l’interface Forme suivante :
public interface Forme {
    public void dessine(Graphics g);
}
  1. Remplacer la méthode Planche.ajouterEllipse(Ellipse e) par Planche.ajouterForme(Forme f) et modifier les codes des différentes classes en conséquence.
  2. Écrire un décorateur FormeColoree qui permette de rajouter une couleur à une forme. La couleur souhaitée et la forme à colorer seront passées à l’instanciation de FormeColoree. Utiliser ce décorateur pour que les ellipses créées dans l’éditeur soient de couleur rouge (Color.RED).
  3. Écrire deux nouvelles implémentations de Forme : Triangle et Rectangle. Pour dessiner un rectangle, on utilisera la méthode de Graphics drawRect(int x, int y, int width, int height). Pour dessiner un triangle, il faudra utiliser trois fois la méthode de Graphics drawLine(int x0, int y0, int x1, int y1).
  4. Pour passer de la création d’un type de forme à un autre, on souhaite utiliser les touches du clavier, par exemple ’e’ pour les ellipses, ’t’ pour les triangles, ’r’ pour les rectangles ...
    Utiliser l’interface FabriqueForme ci-dessous pour modifier le code de Editeur afin de permettre les changements de types de formes.
    public interface FabriqueForme {
        public char toucheClavier();
        public int nombrePoints();
        public Forme creerForme(List<Point> points);
    }
    toucheClavier() renverra la touche du clavier utilisée pour passer à ce type de formes (par exemple ’e’ pour les ellipses), nombrePoints() le nombre de points nécessaires pour créer la forme (par exemple 2 pour une ellipse) et creerForme(List<Point>) retournera la nouvelle forme créée.
    Ecrire les codes des classes implémentant FabriqueForme.