Cinquième semaine

Exercice 1
Exercices sur la notion d'héritage et d'interface : commençons avec l'interface Drawable et la classe Point ! Point.java
Exercice 2
Définition de la classe abstraite Shape ...
Shape.java
Exercice 3
La classe BasicShape.
BasicShape.java
Exercice 4
Définition de la classe Circle .
Circle.java
Exercice 5
Définition de la classe Polygone.
Polygone.java
Exercice 6
Définition de la classe Box (une spécialisation de la classe Polygone).
Box.java

Dans les exercices suivants, nous allons définir des objets graphiques, c'est-à-dire affichable. Pour cela nous définissons l'interface que doivent implémenter les objets qui pourront etre affichés :

import java.awt.*;

interface Drawable
{
    public void draw(Graphics g);

}

Il est nécessaire de faire un "import java.awt.*; " pour pouvoir utiliser la classe Graphics.


Exercice 1 :

Ecrire la classe Point permettant de représenter un point dans l'expace (x, y) et doter d'une couleur color de type Color . N'oubliez pas les accesseurs !

Indication : Pour pouvoir utiliser des objets de la classe Color ou Graphics il est nécessaire d'ajouter l'instruction :
import java.awt.*;





Exercice 2 :

Nous allons maintenant définir la classe BasicShape , qui sera la classe la plus générale représentant une 'forme'. Nous spécialiserons ensuite cette classe pour décrire des objets particuliers tels qu'un cercle ou un rectangle. Cette classe va nous permettre de définir les attributs communs à toutes ces classes ainsi que les accesseurs. Cette classe implémentera aussi l'interface Drawable, mais n'implémentera pas la méthode draw (il suffira de la marquer abstraite) :

import java.awt.* ;

public abstract class Shape implements Drawable
{
        protected Point position ;
        protected Color color;

        public void setPosition(int x, int y) { ... }

        public int[] getPosition() { ... }

        public int getX() { ... }

        public int getY() { ... }

        public void setColor(Color color) { ... }

        public Color getColor() { ... }

        abstract public void draw(Graphics g);
}

 


Exercice 3 :

Ecrivez maintenant la classe BasicShape qui étend la classe Shape, et fournit un constructeur ainsi que l'implémentation de la méthode draw. L'appel à cette méthode devra dessiner une petite croix (un '+'). Pour cela vous devrez utiliser la méthode public void drawLine(int x, int y, int xx, int yy) de la classe Graphics.



Exercice 4 :

Ecrivez maintenant la classe Circle qui étendra BasicShape et permettra de représenter un cercle de rayon donné. Pour cela vous pourrez utiliser la méthode public void drawOval(int x, int y, int width, int height) de la classe Graphics (ici width == height == rayon ).



Exercice 5 :

Un polygone peut etre défini par une position (i.e. un Point ) et une liste de Point définissant les différents sommets (par convention le premier sommet sera (0,0)). Construisez la classe Polygone héritant de la classe BasicShape .

Note :On ne fournira que ce qui est nécessaire, compte tenu de ce qui est apporté par l'héritage !




Exercice 6 :

Un rectangle est un polygone particulier. Spécialisez la classe Polygone pour que l'on puisse créer des objets de type Rectangle de la manière suivante : Rectangle r = new Rectangle(10, 20, 30, 40); qui représentera le rectangle dont le centre est en (10, 20) (le centre d'un rectangle étant l'intersection de ses deux diagonales), a une longueur de 30 et une largeur de 40.




Il ne vous reste plus qu'à tester les différentes  classes que vous avez créé en utilisant le programme suivant :

import java.awt.* ;

public class TestShape
{
        final static Point[] sommets = new Point[]{
                new Point(0,0), new Point(20,0), new Point(40,40), new Point(60,0),
                new Point(80,0), new Point(50, 60), new Point(30,60)
        };

        final static Shape[] shapes =
        {
              // J
              new Box( 50 , 70 , 100 , 20 , Color.red ) ,
              new Box( 90 , 70 , 20 , 110 , Color.blue ) ,
              new Circle( 50 , 150 , 60 , Color.green ) ,
              new Circle( 70 , 170 , 20 , Color.white ) ,
              new Box( 50 , 90 , 40 , 90 , Color.white ) ,
             
              // a
              new Circle( 130 , 150 , 60 , Color.green ) ,
              new Box( 170 , 180 , 20 , 30 , Color.blue ) ,
              new Circle( 150 , 170 , 20 , Color.white ) ,
             
              // v
              new Polygone(200, 150, sommets, Color.black ) ,
             
              // a
              new Circle( 290 , 150 , 60 , Color.green ) ,
              new Box( 330 , 180 , 20 , 30 , Color.blue ) ,
              new Circle( 310 , 170 , 20 , Color.white ) ,
        };
       
        public static void main( String[] args )
        {
                Ecran ecran = new Ecran(new Point(200 ,150) , new Point(400 , 250));
                for (int i=0; i<shapes.length; i++) {
                        ecran.addShape(shapes[i]);
                }
                ecran.on();
        }

}


Pour faire tourner cette classe, il faudra que vous ayez écrit les différentes classes des exercices précédants, et que vous placiez la classe Ecran ainsi que la classe Ecran$1 dans le meme répertoire que vos classes.