Chapitre 10 : Programmation orientée objet
1. Introduction à la POO
La Programmation Orientée Objet (POO) permet d'organiser le code en classes et objets.
2. Classes ES6
Déclaration d'une classe
class Personne {
constructor(nom, age) {
this.nom = nom;
this.age = age;
}
sePresenter() {
console.log(`Je suis ${this.nom}, ${this.age} ans`);
}
}
// Créer une instance
let alice = new Personne("Alice", 25);
alice.sePresenter(); // "Je suis Alice, 25 ans"
3. Constructeur
Méthode spéciale appelée lors de la création d'un objet :
class Voiture {
constructor(marque, modele, annee) {
this.marque = marque;
this.modele = modele;
this.annee = annee;
this.kilometrage = 0;
}
rouler(km) {
this.kilometrage += km;
console.log(`${this.marque} a roulé ${km} km`);
}
}
let maVoiture = new Voiture("Toyota", "Corolla", 2020);
maVoiture.rouler(100);
console.log(maVoiture.kilometrage); // 100
4. Méthodes et propriétés
class CompteBancaire {
constructor(titulaire, soldeInitial = 0) {
this.titulaire = titulaire;
this.solde = soldeInitial;
}
deposer(montant) {
this.solde += montant;
console.log(`Dépôt de ${montant}€. Nouveau solde: ${this.solde}€`);
}
retirer(montant) {
if (montant > this.solde) {
console.log("Solde insuffisant");
return false;
}
this.solde -= montant;
console.log(`Retrait de ${montant}€. Nouveau solde: ${this.solde}€`);
return true;
}
afficherSolde() {
console.log(`Solde de ${this.titulaire}: ${this.solde}€`);
}
}
let compte = new CompteBancaire("Alice", 1000);
compte.deposer(500); // Dépôt de 500€. Nouveau solde: 1500€
compte.retirer(200); // Retrait de 200€. Nouveau solde: 1300€
compte.afficherSolde(); // Solde de Alice: 1300€
5. Héritage avec extends
class Animal {
constructor(nom) {
this.nom = nom;
}
parler() {
console.log(`${this.nom} fait un bruit`);
}
}
class Chien extends Animal {
constructor(nom, race) {
super(nom); // Appelle le constructeur parent
this.race = race;
}
parler() {
console.log(`${this.nom} aboie: Wouf!`);
}
courir() {
console.log(`${this.nom} court`);
}
}
let monChien = new Chien("Rex", "Labrador");
monChien.parler(); // "Rex aboie: Wouf!"
monChien.courir(); // "Rex court"
6. Getters et Setters
class Rectangle {
constructor(largeur, hauteur) {
this._largeur = largeur;
this._hauteur = hauteur;
}
// Getter
get aire() {
return this._largeur * this._hauteur;
}
get perimetre() {
return 2 * (this._largeur + this._hauteur);
}
// Setter
set largeur(valeur) {
if (valeur > 0) {
this._largeur = valeur;
} else {
console.error("La largeur doit être positive");
}
}
get largeur() {
return this._largeur;
}
}
let rect = new Rectangle(10, 5);
console.log(rect.aire); // 50
console.log(rect.perimetre); // 30
rect.largeur = 15;
console.log(rect.aire); // 75
7. Méthodes statiques
class MathUtils {
static PI = 3.14159;
static carre(x) {
return x * x;
}
static cube(x) {
return x * x * x;
}
}
// Appel sans créer d'instance
console.log(MathUtils.PI); // 3.14159
console.log(MathUtils.carre(5)); // 25
console.log(MathUtils.cube(3)); // 27
8. Exercice pratique
// Système de gestion de bibliothèque
class Livre {
constructor(titre, auteur, annee) {
this.titre = titre;
this.auteur = auteur;
this.annee = annee;
this.emprunte = false;
}
emprunter() {
if (this.emprunte) {
console.log(`${this.titre} est déjà emprunté`);
return false;
}
this.emprunte = true;
console.log(`${this.titre} a été emprunté`);
return true;
}
retourner() {
this.emprunte = false;
console.log(`${this.titre} a été retourné`);
}
}
class Bibliotheque {
constructor(nom) {
this.nom = nom;
this.livres = [];
}
ajouterLivre(livre) {
this.livres.push(livre);
console.log(`${livre.titre} ajouté à ${this.nom}`);
}
afficherLivres() {
console.log(`\nLivres dans ${this.nom}:`);
this.livres.forEach((livre, index) => {
let statut = livre.emprunte ? "Emprunté" : "Disponible";
console.log(`${index + 1}. ${livre.titre} - ${statut}`);
});
}
}
// Utilisation
let biblio = new Bibliotheque("Bibliothèque Municipale");
let livre1 = new Livre("1984", "George Orwell", 1949);
let livre2 = new Livre("Le Petit Prince", "Saint-Exupéry", 1943);
biblio.ajouterLivre(livre1);
biblio.ajouterLivre(livre2);
livre1.emprunter();
biblio.afficherLivres();
Conclusion
Vous maîtrisez maintenant la POO en JavaScript ! Dans le prochain chapitre, nous allons découvrir l'utilisation de modules.
Quiz du chapitre 10
Ateliers pratiques & Projets
Testez vos compétences avec nos exercices guidés et le tuteur IA.
Ateliers pratiques & Corrigés détaillés
Ateliers pratiques & Corrigés
#1 — Création de Classe
Atelier #1Crée une classe 'Voiture' avec un constructeur prenant la marque et l'année.
Consulter la solution type du formateur
#2 — Instanciation
Atelier #2Crée une instance de 'Voiture' nommée 'maCaisse' pour une 'Tesla' de 2023.
Consulter la solution type du formateur
#3 — Méthode de classe
Atelier #3Ajoute une méthode 'description' à la classe Voiture qui affiche les infos du véhicule.
Consulter la solution type du formateur
#4 — Héritage
Atelier #4Comment fait-on hériter une classe 'Bateau' d'une classe 'Vehicule' ?
Consulter la solution type du formateur
#5 — Static
Atelier #5À quoi sert le mot-clé 'static' sur une méthode ?