Héritage ou composition : compromis
Comparer l’héritage et la composition et choisir l’outil adapté à la conception
Héritage ou composition : compromis est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Deux façons de réutiliser du code
Vous pouvez réutiliser du code en héritant d'une autre classe ou en le composant sous forme de membre. Ces deux approches ont leur utilité.
Héritage : « est un »
Utilisez l'héritage lorsque la classe dérivée est véritablement une forme spécialisée de la classe de base.
class Vehicle {};
class Car : public Vehicle {}; // a Car IS a Vehicle
class SportsCar : public Car {};Composition : « a un »
Utilisez la composition lorsque la relation est « a un » ou « utilise un ».
class Engine {};
class Car {
Engine engine_; // a Car HAS an Engine
};Compromis en matière de couplage
L'héritage crée un couplage étroit : les classes dérivées dépendent des détails internes de la classe de base. La composition maintient l'indépendance des modules et facilite leur modification.
Souplesse
La composition permet de modifier le comportement à l'exécution en remplaçant l'objet composé. L'héritage fixe le comportement à la compilation.
class Logger {
std::unique_ptr<LogSink> sink_; // can swap implementations
public:
void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};Tests
Les objets composés peuvent être remplacés par des simulations pour les tests. Les classes de base héritées sont plus difficiles à simuler sans fonctions virtuelles ou modèles.
Le problème de la classe de base fragile
Les modifications d'une classe de base peuvent casser de nombreuses classes dérivées. La composition limite la modification à la classe qui compose les objets.
Choisir l'héritage lorsque
L'héritage convient lorsque :
- il existe une relation claire « est un »
- le polymorphisme via une interface de base est nécessaire
- la classe de base est explicitement conçue pour être dérivée
Choisir la composition lorsque
La composition convient lorsque :
- vous souhaitez pouvoir remplacer les implémentations
- la relation est « a un » ou « utilise un »
- vous souhaitez un couplage faible et des tests plus faciles
Le patron Stratégie
Combinez composition et polymorphisme : stockez un pointeur vers une classe de base, désignant un objet stratégie que la classe hôte compose.
class Sorter {
std::unique_ptr<SortStrategy> strategy_;
public:
void sort(std::vector<int>& v) { strategy_->execute(v); }
};Mélanges et classes de politique
Pour personnaliser le code à la compilation, utilisez des classes de politique basées sur des modèles : il s'agit d'une composition au niveau des types. Cette approche est puissante et n'ajoute aucun surcoût à l'exécution.
Interface et composition
Un patron moderne courant consiste à définir une interface (classe de base abstraite), puis à composer des classes concrètes qui l'implémentent. L'héritage sert à définir l'interface et la composition à réaliser l'implémentation.
Vérification rapide
Quelle approche offre généralement davantage de souplesse et un couplage plus faible ?
Récapitulatif
L'héritage modélise « est un » et la composition « a un ». La composition est plus souple et moins couplée : préférez-la pour réutiliser du code. Utilisez l'héritage pour le polymorphisme via une interface, souvent associé à des implémentations composées.
Apprends C++ avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 51
- Leçons
- 203
Questions Fréquemment Posées
La leçon « Héritage ou composition : compromis » est-elle gratuite ?
Oui — le texte complet de « Héritage ou composition : compromis » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Héritage ou composition : compromis » ?
Comparer l’héritage et la composition et choisir l’outil adapté à la conception Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Héritage ou composition : compromis » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Héritage simple et multiple
- Fonctions virtuelles et vtable
- Classes abstraites et méthodes virtuelles pures
- Héritage ou composition : compromis