Classes et instances
Moule, instances, état et comportement regroupés.
Objectifs
À la fin de cette leçon, vous saurez :
- définir une classe avec constructeur et méthodes ;
- créer des instances et comprendre l'état ;
- relier chaque concept à votre todo list existante.
La classe : un moule
class Tache {
constructor(titre) {
this.titre = titre;
this.fait = false;
}
basculer() {
this.fait = !this.fait;
}
decrire() {
return `${this.fait ? "[x]" : "[ ]"} ${this.titre}`;
}
}
const t1 = new Tache("Courses");
const t2 = new Tache("Réviser");
t1.basculer();
console.log(t1.decrire()); // "[x] Courses"
console.log(t2.decrire()); // "[ ] Réviser"
| Concept | Dans l'exemple |
|---|---|
| classe | le moule Tache |
| instance | t1, t2 : deux objets issus du même moule |
| constructeur | initialise les propriétés à la création |
| propriété / état | titre, fait : données propres à CHAQUE instance |
| méthode / comportement | basculer(), decrire() : partagées par toutes |
this désigne l'instance sur laquelle on travaille : t1.basculer() change t1, jamais t2. C'est exactement vos objets {titre, fait} du projet todo, désormais accompagnés de leurs comportements — plus besoin des fonctions externes qui mutent des objets nus.
Pourquoi regrouper état + comportement
// Avant : données nues + fonctions dispersées
taches.push({ titre: "x", fait: false });
function basculer(t) { t.fait = !t.fait; }
// Après : l'objet sait se comporter
const t = new Tache("x");
t.basculer();
Le bénéfice apparaît avec l'échelle : quand la règle change (« une tâche faite ne peut plus rebasculer »), vous modifiez UNE méthode dans UNE classe, pas dix endroits dans le code.
L'abstraction : montrer l'essentiel, cacher le mécanisme
Un mot revient sans arrêt en conception : abstraction. Concrètement : exposer quoi une chose fait, cacher comment elle le fait. Votre classe Tache expose decrire() ; celui qui l'appelle n'a pas besoin de savoir que le formatage passe par une méthode privée ou un tableau intermédiaire.
L'abstraction se reconnaît à son effet : on peut changer le comment (réécrire decrire(), changer le stockage interne) sans casser ceux qui dépendent du quoi. C'est le critère d'une bonne frontière.
Elle se distingue de l'encapsulation, sa cousine mécanique : encapsuler = rendre inaccessibles les détails internes (champs privés, #propriete). Nous pratiquons l'encapsulation en profondeur au chapitre suivant — retenez ici le couple : l'abstraction décide ce qu'on montre, l'encapsulation est le mécanisme qui l'interdit.
@@03c286ae-5cef-42b0-916c-b64fec337746|replace-inline@@
Exercice
- Créez
class Utilisateur { constructor(nom) {...} }avec méthodesaluer(). - Ajoutez
Tache.assigneA(user)et affichez « [x] Courses (Ana) ». - Créez trois instances et vérifiez leur indépendance d'état.
Résumé
- Classe = moule ; instance = objet vivant avec son état.
- constructor initialise ; this désigne l'instance courante.
- Regrouper état et comportement localise les évolutions.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Point sur l'exercice 2
decrire() {
const qui = this.assignee ? ` (${this.assignee.nom})` : "";
return `${this.fait ? "[x]" : "[ ]"} ${this.titre}${qui}`;
}
Une tâche peut référencer son utilisateur : les objets composent leurs relations naturellement.