Veuillez patienter...

Comprendre l'héritage en POO

Bonjour,

Voici un nouvel article qui va tenter de vous faire découvrir, par l'exemple, ce qu'est l'héritage en POO, mais tout d'abord, un petit rappel :

Qu'est que l'héritage ?

Le mot héritage est souvent utilisé dans un cadre de sucession ou de génétique. Il implique que les descendants possèdent une partie des gènes ou des biens de leurs ascendants.

Et en programmation orientée objet ?

Pour les néophytes, définissons ce qu'est l'héritage en POO (Programmation orientée objet) :

Pour faire simple, c'est un mécanisme qui va permetttre, comme son nom l'indique, de transmettre toutes les méthodes d'une classe dite "mère" vers une autre dite "fille" et ainsi de suite.

Prenons un exemple typique avec trois classes :

Classe mère :

// Cette classe "mère" va être destinée à accueillir toutes les
// méthodes qui sont communes à toute personne
class Personne
{
    public Sexe $sexe;

    public function __construct(Sexe $sexe)
    {
        // Ici nous pourrions définir les propriétés spécifiques 
        // de l'instance de cette personne
        $this->setSexe($sexe);
    }

    public function marcher()
    {
       // Ici, nous pourrions définir ce que va impliquer l'invocation
       // de la méthode marcher pour toutes les personnes
       // $this->leverPied(); // Par exemple
       // $this->poserPied();
    }

    public function dormir()
    {
        // Ici aussi nous définirions ce qu'est le fait de dormir
    }

    public function getSexe()
    {
        return $this->sexe;
    }

    public function setSexe(Sexe $sexe)
    {
        $this->sexe = $sexe;
    }
}

Première classe fille :

// Cette classe "fille" va "hériter de toutes les méthodes de la classe mère
// A moins que l'on ai besoin de les re-spécifier explicitement
class Developpeur extends Personne
{
    // C'est une propriété propre au Développeur
    public $langage;

    public function __construct(Sexe $sexe)
    {
        // On appelle les constructeur de la classe "mère" afin 
        // de lui spécifier ce paramètre à notre instance
        parent::__construct($sexe);
        // Cette méthode va invoquer la méthode setSexe($sexe) de 
        // la classe "mère" en interne
    }

    public function developper()
    {
        // Ici, nous pourrions définir une méthode propre à la méthode développer
        // qui pourrait appeller d'autres méthodes spécifiques à cette dernière
    }
}

Deuxième classe fille (ou "petite fille") :

// Cette classe va hériter de toutes les méthodes de sa classe "mère",
// la classe Développeur
class DeveloppeurPhp extends Developpeur
{
    // ... Idem pour le constructeur

    // Ici un exemple d'overriding de méthode
    // @Voir https://secure.php.net/manual/fr/language.oop5.overloading.php
    public function developper($langage = 'PHP')
    {
        // On défini explicitement et par défaut le langage
        $this->language = $langage;
    }

}

On voit donc ici que chaque classe fille hérite de toutes les propriétés et méthodes que nous souhaitons de sa classe mère (via la visibilité).

C'est en fait comme si nous pouvions choisir quels types de gènes nous pourrions faire posséder à nos descendants !!!

A bientôt,

Mathieu