Adloun

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

Étendre les expressions

Classes abstraites et interfaces · niveau 3 (difficile)

Énoncé

On reprend l'interface scellée Expr du cours.

  • On écrit une classe final class Oppose implements Expr sans toucher à l'interface. Que dit le compilateur ?
  • Ajouter proprement une classe Difference, puis construire et évaluer l'expression .
  • Quel avantage y a-t-il à ce que la liste des expressions soit fermée ?

Corrigé

  • La classe n'est pas dans la clause permits :

E5.java:13: error: class is not allowed to extend sealed class: Expr (as it is not listed in its 'permits' clause)
final class Oppose implements Expr {
      ^
  • On ajoute la classe et son nom dans la clause permits :

sealed interface Expr permits Nombre, Somme, Produit, Difference {
    int valeur();
    String texte();
}

final class Difference implements Expr {
    private final Expr g, d;
    Difference(Expr g, Expr d) { this.g = g; this.d = d; }
    public int valeur() { return g.valeur() - d.valeur(); }
    public String texte() { return g.texte() + " - (" + d.texte() + ")"; }
}

Expr e = new Difference(new Nombre(10),
         new Produit(new Somme(new Nombre(2), new Nombre(3)), new Nombre(4)));
System.out.println(e.texte() + " = " + e.valeur());

10 - ((2 + 3) * 4) = -10

Les parenthèses ajoutées autour du membre de droite sont nécessaires : sans elles, l'expression s'afficherait 10 - 5 - 3, qui se lit .

  • Le code qui manipule des expressions peut compter sur une liste complète et connue : aucun « cas oublié » ne peut apparaître parce qu'un autre programmeur aurait ajouté sa propre classe. Le compilateur exploite aussi cette information : avec le filtrage par motif de switch (Java 21), il vérifie que tous les cas sont traités.

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 →