Classes et objets

On définit une classe dans un fichier qui porte son nom. La définition est un bloc qui peut contenir dans n'importe quel ordre des déclarations d'attributs et des déclarations de méthodes.

public class Compteur {
  // attribut
  private int compte;
  // méthode
  public void plusUn() {
    this.compte++;
  }
  // autre méthode
  public String toString() {
    return Integer.toBinaryString(this.compte);
  }
}

Le mot réservé this contient une référence à l'objet sur lequel la méthode a été appelée. Il est permis de ne pas l'écrire :

public void plusUn() {
  compte++;
}

Pour créer un objet, il faut le construire, c'est à dire initialiser tous ses attributs. On utilise pour cela une méthode spéciale nommée constructeur.

public class Compteur {
  ...
  public Compteur() {
    this.compte = 0;
  }
}

Le constructeur a pour responsabilité de donner une valeur initiale à tous les attributs de l'objet. Sa signature a une forme particulière : son nom est identique au nom de la classe, et il n'a pas de type de retour (même pas void).

Remarque Si vous oubliez d'initialiser un attribut, il prend la valeur 0 par défaut (false pour un booléen). Si vous oubliez carrément de prévoir un constructeur, le compilateur en rajoutera un par défaut qui ne prend pas d'argument et qui ne fait rien.

Quand on écrit la définition d'une classe, une partie de son contenu est marquée comme visible (public), et une partie est invisible (private). La partie invisible est l'arrière-boutique : toutes les définitions dont on a besoin pour faire marcher la classe, mais qui n'intéressent personne. La partie visible est la devanture : ce que l'on souhaite montrer aux développeurs qui vont manipuler des objets de cette classe.

public class Exemple {
  public static void main(String[] args) {
    Compteur c = new Compteur();
    c.compte += 1; // interdit : l'attribut compte est private !
    c.plusUn();    // autorisé : la méthode plusUn est public.
    c.plusUn();
    System.out.println(c);
  }
}

Dans la majorité des cas, les attributs sont private, et les méthodes sont public.

  1. Progression. Utilisez la classe Compteur donnée plus haut pour écrire un programme qui affiche les entiers de 5 à 9 en binaire.

  2. Date. Supposons qu'un projet nécessite la création d'une classe pour représenter une date au jour près (il existe déjà plusieurs classes similaires en Java, mais nous ne souhaitons pas les employer). Pour commencer, définissez une telle classe en prévoyant un constructeur et une méthode toString qui renvoie une chaîne décrivant la date au format ISO 8601 (AAAA-MM-JJ). Testez votre classe avec un programme simple.

  3. Lendemains. Ajoutez à la classe de l'exercice précédent une méthode qui renvoie une nouvelle date décrivant le lendemain de la date d'origine (sans se soucier des années bissextiles). Ajoutez également une méthode qui compare deux dates (inspirez-vous de strcmp).

  4. Période. En vous appuyant sur la classe des deux exercices précédents, définissez une classe qui réprésente un intervalle de temps (au jour près). Prévoyez :

    • un constructeur,
    • une méthode toString,
    • une méthode qui prolonge la période d'une journée,
    • une méthode qui renvoie le nombre de jours contenus dans l'intervalle.

  5. Diagramme. Dessinez le diagramme de classes de l'application de l'exercice précédent. Habituellement, on préfère faire le diagramme avant de coder, mais mieux vaut tard que jamais...

retour à la page d'accueil

retour au sommet