Le quartierJV JavaPièce 4/7Intermédiaire

Tableaux, classes et records

Stocker plusieurs valeurs dans un tableau, puis modéliser une recette avec une classe, un constructeur, l'encapsulation et un record.

Ce que tu vas apprendre

  • Utiliser un tableau pour ranger plusieurs valeurs du même type.
  • Écrire une classe avec un constructeur et des champs privés.
  • Remplacer une classe simple par un record.

Les tableaux

Un tableau range un nombre fixe de valeurs du même type. Les cases sont numérotées à partir de 0.

String[] ingredients = {"farine", "oeufs", "lait"};

System.out.println(ingredients[0]);      // farine
System.out.println(ingredients.length);  // 3

for (String ingredient : ingredients) {
    System.out.println("- " + ingredient);
}

length donne la taille, sans parenthèses pour un tableau. La boucle for (String ingredient : ingredients) parcourt chaque case à tour de rôle.

Pour créer un tableau vide de taille connue : int[] notes = new int[5];. Les cases valent alors 0.

Lire ingredients[3] alors que le tableau n'a que 3 cases lève une erreur à l'exécution, ArrayIndexOutOfBoundsException. Le dernier indice valide est length - 1.

La taille d'un tableau ne change plus après sa création. Pour une liste qui grandit, on utilise les collections du cours 06.

Pourquoi une classe

Pour décrire une recette, il faudrait un nom, une durée, un nombre de portions. Trois variables séparées se mélangent vite.

Une classe regroupe ces données et les actions associées sous un même nom. Un objet est un exemplaire créé à partir de cette classe.

Écrire la classe Recette

Recette.java
public class Recette {
    private String nom;
    private int minutes;

    public Recette(String nom, int minutes) {
        this.nom = nom;
        this.minutes = minutes;
    }

    public String getNom() {
        return nom;
    }

    public boolean estRapide() {
        return minutes <= 30;
    }
}

Chaque élément a un rôle :

  • nom et minutes sont des champs : les données de chaque recette.
  • Recette(...) est le constructeur, appelé à la création de l'objet. Il porte le nom de la classe et n'a pas de type de retour.
  • this désigne l'objet en cours. this.nom = nom copie le paramètre dans le champ.
  • getNom() et estRapide() sont des méthodes d'instance.

Créer et utiliser des objets

Recette crepes = new Recette("Crêpes", 20);
Recette cassoulet = new Recette("Cassoulet", 180);

System.out.println(crepes.getNom());       // Crêpes
System.out.println(crepes.estRapide());    // true
System.out.println(cassoulet.estRapide()); // false

Le mot new appelle le constructeur et crée l'objet. Les deux recettes ont leurs propres valeurs, indépendantes l'une de l'autre.

L'encapsulation

Les champs sont private : seul le code de la classe peut les lire ou les modifier. De l'extérieur, crepes.minutes est refusé.

C'est l'encapsulation. Elle protège les données : tu décides comment on y accède, et tu peux ajouter des contrôles.

public void setMinutes(int minutes) {
    if (minutes <= 0) {
        throw new IllegalArgumentException("La durée doit être positive");
    }
    this.minutes = minutes;
}

Une méthode qui lit un champ s'appelle un getter, une méthode qui le modifie un setter. Sans setter, le champ n'est pas modifiable de l'extérieur.

Le throw signale une erreur. Les exceptions sont expliquées dans le cours 06.

Le record

Beaucoup de classes ne font que porter des données. Un record les écrit en une ligne :

Ingredient.java
public record Ingredient(String nom, double quantite, String unite) { }

Java génère pour toi le constructeur, les accesseurs, equals, hashCode et toString. Un record est immuable : ses valeurs ne changent plus après la création.

Ingredient farine = new Ingredient("farine", 250, "g");
System.out.println(farine.nom()); // farine
System.out.println(farine);       // Ingredient[nom=farine, quantite=250.0, unite=g]

Les accesseurs portent le nom du champ, sans préfixe get : farine.nom().

Classe ou record ?

BesoinChoix
Données simples, jamais modifiéesrecord
Valeurs qui changent au fil du tempsclasse avec setters
Logique et état internes à protégerclasse

Un record peut aussi contenir des méthodes. Il ne peut pas avoir de champs d'instance supplémentaires.

Commence par un record pour les données simples. Passe à une classe seulement quand tu as besoin de modifier l'état ou de cacher des détails.

À retenir

  • Un tableau a une taille fixe et des indices qui commencent à 0 ; length donne sa taille.
  • Une classe décrit un modèle, un objet en est un exemplaire créé avec new.
  • Le constructeur initialise les champs ; this désigne l'objet courant.
  • L'encapsulation consiste à rendre les champs private et à passer par des méthodes.
  • Un record déclare en une ligne une classe de données immuable, avec accesseurs, equals et toString générés.

Pour aller plus loin

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Le quartier
Appartement
Java
Pièce
4/7
Plan n°
java/04.tableaux-classes-et-records
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.