Adloun

programmation Java (école d'ingénieur) · Chapitre 8 · Application directe du cours

Un thermomètre encapsulé

Encapsulation, membres de classe et paquets · niveau 1 (application)

Énoncé

Écrire une classe Thermometre dont l'attribut privé temperature (en degrés Celsius) ne peut jamais descendre sous le zéro absolu, °C. Le constructeur et le modificateur setTemperature lèvent une IllegalArgumentException si on leur donne une valeur impossible. Écrire un programme qui fixe la température à , puis , puis tente en rattrapant l'exception avec


try {
    th.setTemperature(-300);
} catch (IllegalArgumentException e) {
    System.out.println("refusé : " + e.getMessage());
}

et vérifie que la température est restée à .

Corrigé

L'invariant est « temperature est supérieure ou égale au zéro absolu ». Le constructeur passe par le modificateur, ce qui évite d'écrire deux fois le contrôle.


class Thermometre {
    public static final double ZERO_ABSOLU = -273.15;
    private double temperature;   // invariant : temperature >= ZERO_ABSOLU

    Thermometre(double t) {
        setTemperature(t);       // le constructeur passe par le contrôle
    }

    public double getTemperature() { return temperature; }

    public void setTemperature(double t) {
        if (t < ZERO_ABSOLU) {
            throw new IllegalArgumentException("sous le zéro absolu : " + t);
        }
        temperature = t;
    }
}

public class Ex1Thermometre {
    public static void main(String[] args) {
        Thermometre th = new Thermometre(20);
        th.setTemperature(-10);
        System.out.println(th.getTemperature());
        try {
            th.setTemperature(-300);
        } catch (IllegalArgumentException e) {
            System.out.println("refusé : " + e.getMessage());
        }
        System.out.println(th.getTemperature());
    }
}

-10.0
refusé : sous le zéro absolu : -300.0
-10.0

Le contrôle a lieu avant l'affectation : quand la valeur est refusée, l'attribut n'a pas été touché, et l'objet est resté dans un état valide. La constante ZERO_ABSOLU peut être publique : elle ne peut pas être modifiée.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →