Héritage (informatique) - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

L’héritage est un principe de la programmation orientée objet, permettant entre autres la réutilisabilité et l'adaptabilité des objets. Elle se nomme ainsi car le principe est en quelque sorte le même que celui d’un arbre généalogique. Ce principe est basé sur des classes dont les « filles » héritent des caractéristiques de leur(s) « mère(s) ».

Chaque classe possède des attributs et/ou des méthodes qui lui sont propres. Lorsqu'une classe fille hérite d'une classe mère, elle peut alors utiliser ses attributs et ses méthodes.

Chacune des classes filles peut donc posséder les mêmes caractéristiques que ses classes mères tout en bénéficiant de caractéristiques supplémentaires (spécialisation) à celles de ces classes mères. Toutes les méthodes de la classe héritée (fille) peuvent être redéfinies : on parle alors de polymorphisme d'héritage. Chaque classe fille peut, si le programmeur n'a pas défini de limitation, devenir à son tour classe mère d'une autre classe.

Exemple basique de diagramme UML représentant une relation d'héritage

Pour qu'une classe fille puisse hériter des propriétés de la classe mère, il faut que les propriétés de la classe mère possèdent des attributs de visibilité compatibles. Il existe globalement trois niveaux de visibilité :

  • Public est la visibilité la plus large (accessible directement en dehors de la classe)
  • Private est la plus restrictive (accessible uniquement depuis la classe courante)
  • Protected est intermédiaire et est visible par la classe courante, toutes les classes filles, mais inaccessible en dehors des classes mère/filles.

Propriétés de la notion d'héritage

Il s'agit d'une relation :

  • Transitivité : si B hérite de A et si C hérite de B alors C hérite de A ;
  • Non réflexif : une classe ne peut hériter d’elle même ;
  • Non symétrique : si A hérite de B, B n’hérite de pas de A ;
  • Sans cycle : Il n'est pas possible que B hérite de A, C hérite de B et que A hérite de C.

Exemples

PHP

      /* Déclaration des classes */             class Animal {         //Donnée membre         public $nom;                //Constructeur         public function __construct($nouveauNom) {};                //Méthode         public function recevoirNom($nouveauNom) {};      }             class Chat extends Animal {          //Constructeur         public function __construct($nouveauNom) {};                //Méthode         public function miauler() {};      }             class Chien extends Animal {         //Constructeur         public function __construct($nouveauNom) {};                //Méthode         public function aboyer() {};      }             /* Utilisation des classes*/             //Instanciation de la classe chien (toutou devient un objet de type chien)      $toutou = new Chien('Rex');             //On envoie un message au chien en utilisant une de ses méthodes (ici aboyer)      $toutou->aboyer(); // Méthode de la classe Chien      $toutou->recevoirNom('Isidor'); // Méthode héritée de la classe mère Animal      

Java

      /* Déclaration des classes */             public class Animal{         //Donnée membre         String nom;                //Constructeur         public Animal() {};                //Méthode         public recevoirNom(String nouveauNom) {};      }             public class Chat extends Animal{          //Constructeur         public Chat() {};                //Méthode         public miauler() {};      }             public class Chien extends Animal{         //Constructeur         public Chien() {};                //Méthode         public aboyer() {};      }             /* Utilisation des classes*/             //Instanciation de la classe chien (toutou devient un objet de type chien)      Chien toutou=new Chien("Rex");             //On envoie un message au chien en utilisant une de ses méthodes (ici aboyer)      toutou.aboyer();		//méthode aboyer de la classe chien      toutou.recevoirNom("Isidor");//Appel d'une méthode héritée de la classe mère      
Page générée en 0.085 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise