Tableaux, classes et records
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.
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
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 :
nometminutessont 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.thisdésigne l'objet en cours.this.nom = nomcopie le paramètre dans le champ.getNom()etestRapide()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 :
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 ?
| Besoin | Choix |
|---|---|
| Données simples, jamais modifiées | record |
| Valeurs qui changent au fil du temps | classe avec setters |
| Logique et état internes à protéger | classe |
Un record peut aussi contenir des méthodes. Il ne peut pas avoir de champs d'instance supplémentaires.
À retenir
- Un tableau a une taille fixe et des indices qui commencent à 0 ;
lengthdonne sa taille. - Une classe décrit un modèle, un objet en est un exemplaire créé avec
new. - Le constructeur initialise les champs ;
thisdésigne l'objet courant. - L'encapsulation consiste à rendre les champs
privateet à passer par des méthodes. - Un
recorddéclare en une ligne une classe de données immuable, avec accesseurs,equalsettoStringgénérés.
Pour aller plus loin
Sources officielles
Ensuite
Conditions, boucles et méthodes
Faire des choix avec if et switch, répéter avec for et while, et regrouper du code dans des méthodes.
Héritage, interfaces et polymorphisme
Réutiliser une classe avec l'héritage, définir un contrat avec une interface, et traiter des objets différents de la même façon.
- Projet
- Lignes de code
- Niveau
- Le quartier
- Appartement
- Java
- Pièce
- 4/7
- Plan n°
- java/04.tableaux-classes-et-records