Héritage, redéfinition, sous-typage

Exercice 1 - Circle

Modifier la classe Circle, définie par un point correspondant au centre et un rayon pour ajouter les choses suivante. circles.zip

  1. Écrire la méthode translate(int dx,int dy) qui translate le cercle. Qu'affiche le code suivant :
    	   	 Point p=new Point(1,2);
    	   	 Circle c=new Circle(p,1);
    
    	   	 Circle c2=new Circle(p,2);
    	   	 c2.translate(1,1);
    
    	   	 System.out.println(c+' '+c2);
    	   	
    Expliquer.
  2. Écrire la méthode equals() qui renvoie vrai si deux cercles ont le même centre et le même rayon.
  3. Écrire la méthode contains() qui renvoie vrai si un point est contenu dans un cercle.
  4. Écrire la méthode contains(Point p,Circle... circles) qui renvoie vrai si un point est contenu dans un des cercles.

Exercice 2 - One Ring for ...

Le but de cet exercice est de construire un anneau comme étant un cercle dont on a évidé une zone circulaire définie par son rayon interne.

Préliminaire : avant d'écrire la classe Ring, Ajouter à la classe Circle du TD précédent la méthode surface() qui renvoie la surface d'un cercle (en fait du disque).
Modifier la méthode toString() pour qu'elle affiche la surface.

Rappeler dans un premier temps, dans quel cas il est judicieux de faire de l'héritage.
Écrire la classe Ring qui hérite de la classe Circle.

  1. Écrire un constructeur de la classe Ring prenant en paramètre, un centre, un rayon et un rayon interne. Faîte attention à ce que le rayon interne soit inférieur au rayon de l'anneau.
  2. Écrire la méthode equals() qui test l'égalité de deux anneaux.
  3. Écrire la méthode toString() qui affiche le centre, le rayon et le rayon interne.

Quelle est le problème avec la méthode surface ?

      Ring ring=new Ring(new Point(1,2),2,1);
      System.out.println(ring.surface());
     
Résoudre le problème posé par la méthode ?

Ensuite,

  1. Implanter une méthode contains(Point). Quels problèmes cela pose ?
    PS: il existe deux solutions dont une plus élégante que l'autre.
  2. Ecrire la méthode contains(Point p,Ring... rings) qui renvoie vrai si un point est contenu dans un des anneaux.