Héritage

Définition, exemples et bonnes pratiques

À retenir

  • Permet la réutilisation du code et évite la redondance.
  • Crée une hiérarchie entre une classe parente (super-classe) et une classe enfant (sous-classe).
  • L'enfant peut modifier un comportement hérité : c'est ce qu'on appelle la redéfinition.

L'héritage est un principe fondamental de la programmation qui permet à un nouvel objet de récupérer automatiquement les caractéristiques et les comportements d'un objet déjà existant. C'est comme une recette de cuisine : si vous avez une base pour faire un gâteau nature (la classe parente), vous pouvez créer une version « chocolat » (la classe enfant) qui conserve toutes les étapes de base tout en ajoutant ses propres ingrédients spécifiques.

Étymologie

Le terme provient du latin hereditas, désignant ce que l'on reçoit de ses ancêtres. En informatique, le concept a été popularisé par les langages de programmation orientés objet (comme Simula dès les années 60, puis Smalltalk et C++) pour traduire l'idée qu'une classe fille « hérite » du patrimoine logiciel (code et données) de sa classe mère.

Exemples d'usage

  • Une classe Véhicule possède une méthode avancer() ; une classe Voiture qui en hérite pourra utiliser avancer() sans avoir à réécrire le code.
  • Dans un logiciel de gestion, une classe Utilisateur contient le nom et le mot de passe ; une classe Administrateur hérite de ces champs et y ajoute des droits d'accès spécifiques.

Cas d'usage

L'héritage intervient principalement dans la conception d'architectures logicielles pour éviter la répétition de code. Il est utilisé pour modéliser des relations de type « est un » (par exemple : un Chat est un Mammifère). On le retrouve massivement dans le développement d'interfaces graphiques, de moteurs de jeux vidéo et de systèmes de gestion de données.

Bonnes pratiques

Il faut éviter de créer des chaînes d'héritage trop longues (trop de niveaux de parents/enfants), car le code devient difficile à suivre. Une règle d'or est de privilégier la composition (inclure un objet dans un autre) plutôt que l'héritage si la relation n'est pas une évidence logique. Enfin, veillez à ce qu'une classe enfant puisse toujours remplacer sa classe mère sans faire planter le programme (principe de substitution de Liskov).

Synonymes

dérivation de classe extension spécialisation

Antonymes

composition instanciation

Conseil

Quand vous débutez, posez-vous la question : « Est-ce que A est une sorte de B ? ». Si la réponse est oui (un Carré est une sorte de Forme), l'héritage est une option. Si la réponse est « A possède un B », alors l'héritage n'est pas la bonne solution.

Questions fréquentes

Une classe peut-elle hériter de plusieurs parents ?

Cela dépend du langage. Le C++ le permet (héritage multiple), mais Java ou C# l'interdisent pour éviter la complexité, préférant l'usage d'interfaces.

Quelle est la différence entre héritage et interface ?

L'héritage transmet du code déjà écrit (comportement), alors qu'une interface est un contrat qui oblige l'enfant à écrire son propre code pour certaines méthodes.