esperanto
interlingua
 

Un nouvel objet

Le tableau d'objets Rectangle de l'applet précédente permettrait donc de produire les 216 rectangles cliquables de notre projet. Pour l'instant, ils sont tous noirs, pour simplifier le programme, mais il est certainement possible de les dessiner de 216 couleurs différentes en employant le mécanisme vu à l'étape 8 (excellente idée d'exercice !).
Il resterait cependant à trouver le moyen de leur faire afficher le code RGB de leur couleur. Et là on bute sur une difficulté : la couleur étant déterminée par la méthode paint(), le lien entre chaque objet Rectangle et sa couleur n'est pas du tout évident. Les objets Rectangle, tels qu'ils nous sont fournis par le langage java, ont les attributs x, y, width et height, ainsi que la méthode inside(), que nous avons utilisés, mais ces objets n'ont pas d'attribut "couleur", et encore moins d'attributs R, G ou B que l'on pourrait appeler aussi facilement que x, y, width et height.
Certes, il est sans doute possible de trouver un lien entre x et y et la couleur de chaque rectangle, puisque tous ces paramètres varient en même temps, mais l'algorithme qui permet de retrouver R, G et B à partir de x et y ne saute pas aux yeux ! (autre idée d'exercice !!)
La solution est beaucoup plus simple : puisque les objets Rectangle n'ont pas d'attributs R, G, B, nous allons créer un nouvel objet qui répondra exactement à nos besoins.

Définir une classe

Un objet, nous l'avons vu à l'étape 10, est le produit d'une structure appelée "classe" : définir un nouvel objet, c'est déclarer une nouvelle classe.

Voici comment l'on déclare une classe :

class MonObjet
{
public int MonAttribut;--- un attribut de type "entier" est ici déclaré

         --- en rouge ci-dessous : le constructeur
public MonObjet(int parametre1)
   {
   this.MonAttribut = parametre1;
   }


public int Additionner()--- une méthode est ici déclarée
   {
   return MonAttribut + 2;
   }
}

 

Le code ci-dessus définit un nouvel objet de type "entier". Cet objet a un attribut (MonAttribut) et deux méthodes.

  • La première permettra aux autres programmes d'utiliser cet objet (l'instancier) en le déclarant comme ceci :
    MonObjet x = new MonObjet(18);
    Notez que l'on doit indiquer un entier entre les parenthèses, parce que c'est spécifié par le constructeur (int parametre1).
  • La deuxième, quand on l'appellera, retournera (return) simplement le chiffre passé en paramètre (parametre1, autrement dit MonAttribut) augmenté de 2.
    Les autres programmes appelleront cette méthode comme ceci :
    int resultat = x.Additionner();

Instancier un objet

Instancier un objet, c'est tout simplement appeler un objet à l'existence en suivant les règles de son constructeur, ce que nous avons déjà fait avec les objets Rectangle lors des étapes précédentes.

Une fois que l'objet est instancié, on peut utiliser ses attributs et ses méthodes.

Voici le code d'une applet qui utilise la classe MonObjet. On lui passe l'entier 1 en paramètre :

import java.awt.*;
public class PPMonObjet extends java.applet.Applet
{
MonObjet x = new MonObjet(1);
int resultat;--- attention à bien déclarer les variables au début
String S;

public void init()
   {
   resultat = x.Additionner();
   S = Integer.toString(resultat);--- cette méthode transforme l'entier "resultat" en une chaîne de caractères : c'est nécessaire pour l'affichage ci-dessous
   }

   public void paint (Graphics g)
   {
   g.drawString(S, 10, 10);--- la méthode drawString, pour l'affichage, exige une chaîne de caractères en paramètre
   }
}

 

Et voici le résultat attendu :

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

Pour que cette applet fonctionne, vous devez d'abord compiler un fichier MonObjet.java (la classe), puis l'applet proprement dite, ici baptisée PPMonObjet.java (Programme Principal, aussi appelé "programme appelant"). Vous pouvez aussi écrire la classe et l'applet dans le même fichier, mais le compilateur fabriquera quand même deux fichiers en .class.

Cette classe MonObjet, et l'applet qui instancie ici un objet x de cette classe n'ont aucun intérêt pratique, mais vous ont aidé, peut-être, à comprendre le mécanisme et l'intérêt de la programmation objet. Les étapes suivantes ont recours à ce système pour mettre la dernière main à notre projet.