OUJOOD.COM
📌 Déclaration d’une classe abstraite
On utilise le mot-clé abstract pour :
- déclarer la classe elle-même
- et/ou certaines méthodes qui seront obligatoirement redéfinies
🔧 Exemple concret
abstract class Animal {
constructor(public nom: string) {}
manger(): void {
console.log(\`\${this.nom} mange.\`);
}
abstract crier(): void; // méthode à définir obligatoirement
}
class Chien extends Animal {
crier(): void {
console.log(\`\${this.nom} aboie : Wouf!\`);
}
}
const rex = new Chien("Rex");
rex.manger(); // hérité
rex.crier(); // redéfini
Animalest une classe abstraite- Elle fournit une méthode
manger()concrète - Elle impose la méthode
crier(), sans l’implémenter Chienest obligé de fournir sa propre version decrier()
🚫 Une classe abstraite ne peut pas être instanciée directement
// ❌ Ceci provoque une erreur :
const a = new Animal("Mystère");
On ne peut créer d’objet que depuis une sous-classe concrète (ex : Chien), jamais depuis la classe abstraite directement.
🎓 Pourquoi utiliser une classe abstraite ?
- Pour forcer les sous-classes à implémenter certaines méthodes
- Pour partager une logique commune entre plusieurs sous-classes
- Pour définir une structure de base solide dans les projets
🧬 Comparaison rapide : Interface vs Classe abstraite
| Caractéristique | Interface | Classe Abstraite |
|---|---|---|
| Contient de la logique (implémentation) | ❌ | ✅ |
| Peut contenir des méthodes abstraites | ✅ | ✅ |
Peut être héritée avec extends |
❌ (utilise implements) |
✅ |
| Peut être instanciée | ❌ | ❌ |
📌 Résumé
- Les classes abstraites sont des modèles partagés
- Elles peuvent avoir des méthodes concrètes et abstraites
- On ne peut pas les instancier directement
- Idéal pour structurer un projet avec des classes de base réutilisables
🧭 Prochaine étape
À partir du prochain chapitre, nous allons commencer à appliquer tout ce que nous avons vu… dans notre projet panier e-commerce 🛒 ! Nous allons créer les premières **classes métiers** de l’application.
Souhaites-tu passer au Module 3 : Application pratique – Chapitre 1 : Création de la classe Produit ?