Adloun

Classes et objets

Cours · programmation Java (école d'ingénieur), chapitre 7 · école d'ingénieur, informatique · le début du chapitre, la suite sur Adloun

Jusqu'ici, nos programmes manipulaient des nombres, des caractères, des chaînes et des tableaux. Mais le monde que l'on veut décrire n'est pas fait de nombres : il est fait d'étudiants, de comptes bancaires, de points d'une figure, de produits d'un panier. Un étudiant a un nom, un âge, une moyenne ; un compte a un titulaire et un solde, et l'on peut y déposer ou en retirer de l'argent. La programmation objet permet d'écrire ces notions telles quelles dans le programme : on définit une classe Etudiant, puis on fabrique autant d'objets étudiants que nécessaire.

Ce chapitre est le premier de la partie consacrée à l'objet. Il pose le vocabulaire (classe, objet, attribut, méthode, constructeur, référence) et, surtout, le modèle de la mémoire qui permet de comprendre ce que fait vraiment un programme objet.

Objectifs du chapitre

  • Définir une classe avec ses attributs, ses méthodes et ses constructeurs, et créer des objets avec new.
  • Comprendre qu'une variable de type objet contient une référence, et en déduire le comportement de l'affectation, de la comparaison == et du passage en paramètre.
  • Reconnaître et éviter la NullPointerException.
  • Écrire une méthode toString, manipuler des tableaux d'objets, organiser un programme en plusieurs classes.

7.1 Des tableaux aux objets

Pour décrire trois étudiants avec ce que nous savons déjà faire, il faut trois tableaux « parallèles » : la case i de chacun décrit le même étudiant.


public class EtudiantsTableaux {
    public static void main(String[] args) {
        String[] noms = {"Alice", "Bilal", "Chloé"};
        int[] ages = {19, 20, 18};
        double[] moyennes = {14.5, 11.25, 16.0};
        for (int i = 0; i < noms.length; i++) {
            System.out.printf("%s, %d ans, moyenne %.2f%n", noms[i], ages[i], moyennes[i]);
        }
    }
}

Alice, 19 ans, moyenne 14.50
Bilal, 20 ans, moyenne 11.25
Chloé, 18 ans, moyenne 16.00

Ce programme fonctionne, mais il est fragile. Rien ne garantit que les trois tableaux ont la même longueur ; trier les étudiants par moyenne oblige à permuter les trois tableaux en même temps ; ajouter une information (une adresse) oblige à créer un quatrième tableau et à modifier chaque boucle ; et une méthode qui traite « un étudiant » doit recevoir trois paramètres. Le défaut est toujours le même : la notion d'étudiant n'existe pas dans le programme. Elle n'existe que dans la tête du programmeur.

Une classe donne une existence à cette notion : elle regroupe en une seule entité les données d'un étudiant et les opérations qui le concernent.

7.2 Classe, objet, attribut, méthode

Définition 7.1Classe et objet

Une classe est un modèle : elle décrit les données (attributs) et les opérations (méthodes) communes à toute une famille d'objets. Un objet est un exemplaire de la classe, aussi appelé instance : il possède ses propres valeurs pour chacun des attributs.

La classe Point décrit les points du plan : chaque point a une abscisse et une ordonnée, sait calculer sa distance à l'origine et peut être déplacé.


// Une première classe : Point, et un programme qui l'utilise.
class Point {
    double x;  // abscisse
    double y;  // ordonnée

    // Distance de ce point à l'origine.
    double distanceOrigine() {
        return Math.sqrt(x * x + y * y);
    }

    // Déplace ce point de (dx, dy).
    void deplacer(double dx, double dy) {
        x = x + dx;
        y = y + dy;
    }
}

public class TestPoint {
    public static void main(String[] args) {
        Point a = new Point();      // un objet Point, ses attributs valent 0.0
        a.x = 3;
        a.y = 4;
        System.out.println("a = (" + a.x + ", " + a.y + ")");
        System.out.println("distance à l'origine : " + a.distanceOrigine());
        a.deplacer(1, -1);
        System.out.println("après déplacement : (" + a.x + ", " + a.y + ")");
        Point b = new Point();      // un second objet, indépendant du premier
        System.out.println("b = (" + b.x + ", " + b.y + ")");
    }
}

a = (3.0, 4.0)
distance à l'origine : 5.0
après déplacement : (4.0, 3.0)
b = (0.0, 0.0)

Plusieurs points sont à remarquer.


a.distanceOrigine()

Elles lisent ou modifient les attributs de cet objet-là.

Proposition 7.2Accès aux membres d'un objet

Si o désigne un objet, o.attribut désigne l'attribut de cet objet et o.methode(...) appelle la méthode sur cet objet. À l'intérieur d'une méthode d'instance, un attribut écrit seul (x) désigne l'attribut de l'objet sur lequel la méthode a été appelée.

7.3 Constructeurs

Dans TestPoint, l'objet est d'abord créé avec des coordonnées nulles, puis rempli attribut par attribut. Entre les deux, il existe dans un état qui n'a pas de sens. Un constructeur permet de créer un objet directement dans l'état voulu.

Définition 7.3Constructeur

Un constructeur est une méthode particulière qui porte le nom de la classe, n'a pas de type de retour (pas même void), et est appelée automatiquement par new. Son rôle est d'initialiser les attributs du nouvel objet.

La suite du cours est sur Adloun

Le chapitre en entier, formules et figures comprises, avec le tuteur, les fiches, les QCM et les exercices.

Lire la suite du cours

En accès libre, sans inscription.

Exercices corrigés de ce chapitre

Lire la suite du cours →