Université Louis Pasteur
LICENCE 2ème année
Mardi 20 février 2007
 
Travaux Pratiques de
Programmation Orientée Objet
(sujet n°3)


Classe Forme



    Dans ce TP nous allons continuer à travailler sur la petite interface graphique écrite au TP précédent. Il est donc vivement conseillé d'avoir fini le TP précédent. Nous allons ajouter et utiliser les notions d'héritage et de polymorphisme pour manipuler un tableau de formes.


1     Héritage : introduction

    Au TP précédent nous avons créé trois classes : Cercle, Carre et Triangle. Ces trois classes décrivent des formes géométriques qui peuvent être dessinées a l'écran. Au fur et à mesure que nous développons ces classes, nous nous rendons compte qu'elles ont des fonctionnalités en commun : elles pourront avoir des attributs en commun (comme le fait d'avoir une couleur) et elles pourront avoir des comportements en commun (comme le fait de pouvoir être dessinées a l'écran).
    La programmation orientée objet propose la notion d'héritage pour mettre en commun ces fonctionnalités. Nous allons créer une classe Forme qui regroupera ces fonctionnalités communes. Les classes Cercle, Carre et Triangle hériteront alors de la classe Forme. En d'autres termes, un Cercle est une Forme, de même qu'un Carre est une Forme. La notion d'héritage s'exprime en Java par le mot clé extends dans la déclaration de la classe :

class Cercle extends Forme
{
    // ...
}

Tous les attributs non privés et les méthodes non privées de la classe Forme seront accessibles à partir des classes dérivées (Cercle, Carre et Triangle). C'est un peu comme si les champs de la classe mère (ici Forme) étaient recopiés dans les classes filles.


2    Classe Forme

    Ecrivez une classe Forme et faites-en hériter les classes Carre, Cercle et Triangle. La classe Forme contiendra un attribut nommé couleur de type Color. Vérifiez que votre programme fonctionne comme avant après cette modification.


3    Polymorphisme

    Au lieu d'utiliser trois tableaux différents pour stoker les cercles, les carrés et les triangles, nous allons utiliser un seul tableau de formes :
Comme vous pouvez le constater, même s'il s'agit d'un tableau de références vers des objets de type Forme, Java appelle automatiquement la méthode dessiner de la bonne classe dérivée. Cela s'appelle le polymorphisme.


4    Classe Vector

    Nous avons jusque là utilisé un tableau classique pour stoker les formes. Les tableaux classiques ne sont pas très pratiques car ils ne peuvent pas se redimensionner. Nous allons utiliser à sa place la classe Vector (du package java.util) fourni par l'API Java.



5    Saisie de touches

    En vous inspirant de l'exemple suivant, faites en sorte que l'on puisse changer la taille ou la couleur des prochains objets crées en tapant sur une touche :

import javax.swing.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class KeyTest extends JApplet implements KeyListener
{
    public void init()
    {
        System.out.println("adding KeyListener");
        addKeyListener(this);
    }

    public void paint(Graphics g)
    {
        System.out.println("paint");
        requestFocus();
    }

    // KeyListener methods
    public void keyPressed(KeyEvent e) { System.out.println("event : " + e); }
    public void keyReleased(KeyEvent e) { System.out.println("event : " + e); }
    public void keyTyped(KeyEvent e) { System.out.println("event : " + e); }
}



[Page réalisée à partir d'un document de Marcel Bosc]