esperanto
interlingua
 

La classe Carre

Les rectangles de notre applet, vous l'avez sûrement déjà remarqué, sont des carrés : nous allons donc construire une classe d'objets Carre (sans accent et sans s).

Héritage

Voici d'abord cette nouvelle classe :

import java.awt.*;

class Carre extends Rectangle
{
public int abscisse;
public int ordonnee;

public Carre(int abscisse, int ordonnee)
   {
   super(abscisse, ordonnee, 10, 10);
   this.abscisse = abscisse;
   this.ordonnee = ordonnee;
   }

public void paint(Graphics g)
   {
   g.fillRect(abscisse,ordonnee,10,10);
   }
}

 

Quelques éclaircissements

class Carre extends Rectangle
Un carré est une espèce de rectangle : nous allons donc nous servir de la classe Rectangle pour en dériver la classe Carre.
super(abscisse, ordonnee, 10, 10);
Un objet Rectangle se construit avec quatre paramètres : abscisse du coin supérieur gauche (x), ordonnée du coin supérieur gauche (y), largeur (width) et hauteur (height).
Ici, en utilisant le mot clé super, nous indiquons au programme que nous construisons l'objet Carre sur le même modèle qu'un Rectangle, avec la particularité que les paramètres width et height sont d'emblée fixés, une fois pour toutes, à 10.
C'est une illustration du principe de l'héritage en programmation objet : une classe dérivée d'une autre classe hérite de ses attributs et méthodes.
Ainsi, notre classe Carre possède automatiquement la méthode inside(), puisque, nous l'avons vu, la classe Rectangle la possède.
this.abscisse = abscisse;
Souvenez-vous de l'étape précédente où nous avons écrit :
this.MonAttribut = parametre1;
Nous aurions pu de la même manière écrire ici :
public Carre(int parametre1, int parametre2)
   {
   super(parametre1, parametre2, 10, 10);
   this.abscisse = parametre1;
   this.ordonnee = parametre2;
   }

Les programmeurs ont pris l'habitude d'utiliser le même nom pour les attributs et les paramètres du constructeur : ainsi, le paramètre "abscisse" est tout de suite plus compréhensible que "parametre1", même si une formule comme "this.ordonnee = ordonnee" ne laisse pas de surprendre au début !

Si vous comparez cette classe Carre avec la classe MonObjet de l'étape 13, vous voyez qu'il y a des points communs :

  • Le constructeur [public Carre(int abscisse, int ordonnee)] qui permettra d'instancier un objet Carre en toute simplicité :
    Carre x = new Carre(18,18);
  • Une méthode paint(Graphics g) que l'on appellera dans l'applet.

Un tableau d'objets Carre

Nous allons maintenant utiliser cette nouvelle classe dans une applet. Nous allons pouvoir profiter de cette structure pour demander à chaque objet Carre d'afficher son abscisse.

import java.applet.*;
import java.awt.*;

public class applet16 extends Applet
{
int abscisse = 0;
int ordonnee = 30;
Carre [] tabCarre = new Carre[10];
boolean dedans;
String t = new String("");
TextField T = new TextField(t, 5);

public void init()
{
add(T);
for (int i=0; i<10; i++)
   {
   tabCarre [i] = new Carre(abscisse,ordonnee);--- appel du constructeur de Carre
   abscisse+=12;
   }//for i
}//init

public void paint(Graphics g)
   {
   g.setColor(Color.black);
   for (int j=0;j<10;j++)
      {
      tabCarre[j].paint(g);--- appel de la méthode paint() de Carre
      }//for j
   }//paint

   public boolean mouseDown(Event evt, int x, int y)
   {
   int k;
   for (k=0; k<10;k++)
      {
      dedans =(tabCarre[k].inside(x,y)) ? true : false;--- méthode inside() de Rectangle dont hérite Carre
      if (dedans)
         {
         t=Integer.toString(tabCarre[k].abscisse);--- attribut abscisse de l'objet Carre
         T.setText(t);
         }
      }//for k
   return true;
   }

   public boolean mouseUp(Event evt, int x, int y)
   {
   dedans=false;
   t="";
   T.setText(t);
   return true;
   }
}

 

Et voici le résultat :

Le code de la classe prêt à l'emploi
Le code de l'applet prêt à l'emploi