À propos de ce cours
Chapitre 16 — La programmation orientée objet · 16.1 La programmation orientée objet : classes et instances
• expliquer ce qu'est la programmation orientée objet (POO) et pourquoi on l'utilise ;
• distinguer une classe d'une instance ;
• écrire une classe avec un constructeur, des propriétés et des méthodes ;
• créer des instances avec
new et vérifier leur type avec instanceof. 1. Pourquoi la programmation orientée objet ?
Un programme manipule des « choses » : des comptes bancaires, des produits, des élèves, des formes… Chacune a des données (un solde, un prix, un nom) et des comportements (déposer, calculer un prix TTC, afficher). La POO consiste à regrouper ces données et ces comportements dans un même objet.
Sans classe, il faut recopier la même structure pour chaque objet :
// Sans classe : on recopie la même structure pour chaque compte
const compte1 = {
titulaire: "Amina",
solde: 100,
deposer(montant) { this.solde += montant; },
};
const compte2 = {
titulaire: "Sami",
solde: 50,
deposer(montant) { this.solde += montant; }, // copie de la même méthode
};
compte1.deposer(20);
console.log(compte1.titulaire, compte1.solde);
console.log("Même fonction deposer ?", compte1.deposer === compte2.deposer);
Résultat dans la console
Amina 120 Même fonction deposer ? false
Chaque objet transporte sa propre copie de deposer. Pour 1 000 comptes, il y aurait 1 000 copies, et une correction devrait être faite partout.
2. Classe et instance
- Une classe est un moule (un plan) : elle décrit quelles données et quelles méthodes auront les objets.
- Une instance est un objet fabriqué à partir de ce moule avec
new. Chaque instance a ses propres données.

Figure 1 — Une classe, plusieurs instances.
3. Écrire une classe
// La classe est le MOULE ; chaque objet créé avec new est une INSTANCE
class CompteBancaire {
// Le constructeur initialise les propriétés de chaque instance
constructor(titulaire, solde = 0) {
this.titulaire = titulaire;
this.solde = solde;
}
// Les méthodes décrivent ce que l'objet sait faire
deposer(montant) {
this.solde += montant;
}
retirer(montant) {
if (montant > this.solde) {
console.log(`Refusé : solde insuffisant pour ${this.titulaire}`);
return false;
}
this.solde -= montant;
return true;
}
afficher() {
return `${this.titulaire} : ${this.solde} DT`;
}
}
const compteAmina = new CompteBancaire("Amina", 100);
const compteSami = new CompteBancaire("Sami");
compteAmina.deposer(50);
compteSami.retirer(30);
console.log(compteAmina.afficher());
console.log(compteSami.afficher());
console.log("Type de la classe :", typeof CompteBancaire);
console.log("compteAmina est un CompteBancaire ?", compteAmina instanceof CompteBancaire);
console.log("Même méthode partagée ?", compteAmina.deposer === compteSami.deposer);
Résultat dans la console
Refusé : solde insuffisant pour Sami Amina : 150 DT Sami : 0 DT Type de la classe : function compteAmina est un CompteBancaire ? true Même méthode partagée ? true
class NomDeClasse { … }: par convention, le nom commence par une majuscule (PascalCase).constructor(…)est appelé automatiquement parnew. Il initialise les propriétés avecthis.propriete = valeur.- Les méthodes s'écrivent sans le mot
functionet utilisentthispour accéder à l'objet courant. instanceofvérifie qu'un objet a été créé à partir d'une classe.- Toutes les instances partagent la même méthode
deposer(nous verrons pourquoi en leçon 16.6).
4. Ne pas oublier new
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
try {
const p = Point(1, 2); // oubli de new
} catch (e) {
console.log(e.constructor.name + " :", e.message);
}
const p = new Point(1, 2);
console.log(p);
Résultat dans la console
TypeError : Class constructor Point cannot be invoked without 'new'
Point { x: 1, y: 2 }
• Classe = moule ; instance = objet créé avec
new Classe(…). • Le
constructor initialise les données de chaque instance avec this. • Les méthodes décrivent les comportements et sont partagées par toutes les instances.
• Un nom de classe commence par une majuscule ; une classe s'utilise toujours avec
new. 🛠 Activité 1 — Ma première classe
Mission : Écrivez une classe Etudiant pour gérer les notes d'un étudiant.
Questions pour avancer (répondez dans votre compte rendu, puis appliquez dans votre projet) :
- Quelles données doit contenir un étudiant (au moins trois) ? Lesquelles sont passées au constructeur, lesquelles ont une valeur de départ (par exemple une liste de notes vide) ?
- Écrivez les méthodes
ajouterNote(note),moyenne()etpresenter(). Que doit renvoyermoyenne()s'il n'y a aucune note ? - Créez trois étudiants et ajoutez-leur des notes. Modifier les notes de l'un change-t-il celles des autres ? Pourquoi ?
- Affichez
typeof Etudiantettypeof new Etudiant(…). Que concluez-vous ? - Écrivez une fonction (hors classe)
meilleur(etudiants)qui reçoit un tableau d'étudiants et renvoie celui qui a la meilleure moyenne. - Quelle est la différence entre
e1.moyenneete1.moyenne()? Testez les deux.
Je vérifie / je rends :
- ☐ Le fichier
etudiant.jsavec vos tests. - ☐ Les réponses aux questions 3, 4 et 6.
16.2 Le mot-clé this en JavaScript →