Sobes.tech
Junior

Pouvez-vous parler des principes de l'héritage en programmation orientée objet?

sobes.tech IA

Réponse de l'IA

L'héritage permet de créer une nouvelle classe (fille ou dérivée), basée sur une classe existante (parente, de base ou superclasse). La classe fille hérite des propriétés (attributs) et des méthodes de la classe parente, et peut également ajouter les siennes ou redéfinir celles héritées.

Concepts principaux:

  • Extension de la fonctionnalité: En héritant de la classe parente, la classe fille obtient une fonctionnalité de base qu'elle peut étendre en ajoutant de nouvelles méthodes ou propriétés.
  • Redéfinition des méthodes: La classe fille peut modifier le comportement d'une méthode héritée en créant une méthode avec le même nom (polymorphisme).
  • Réutilisation du code: Permet d'éviter la duplication de code, car la logique commune est définie dans la classe parente.
  • Relation "est": L'héritage modélise la relation "est un" (is-a). Par exemple, "Un chat est un animal".
<?php

class Animal {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function speak() {
        echo "Son inconnu\n";
    }
}

class Dog extends Animal {
    public function speak() {
        echo "Wouf-wouf!\n";
    }
}

class Cat extends Animal {
    public function speak() {
        echo "Miaou-miaou!\n";
    }
}

$dog = new Dog("Bobby");
$dog->speak(); // Sortie: Wouf-wouf!

$cat = new Cat("Murka");
$cat->speak(); // Sortie: Miaou-miaou!

?>

En PHP, l'héritage se fait avec le mot-clé extends. Une classe ne peut hériter que d'une seule classe (héritage simple), mais peut implémenter plusieurs interfaces.

L'accès aux propriétés et méthodes de la classe parente depuis la classe fille est possible avec le mot-clé parent::.

<?php

class ParentClass {
    protected $value = "valeur du parent";

    public function showValue() {
        echo $this->value . "\n";
    }
}

class ChildClass extends ParentClass {
    // Redéfinition de la propriété
    protected $value = "valeur de l'enfant";

    public function showValues() {
        // Appel de la méthode de la classe parente
        parent::showValue();
        // Affichage de la valeur de la classe enfant
        echo $this->value . "\n";
    }
}

$obj = new ChildClass();
$obj->showValues();
// Sortie:
// valeur du parent
// valeur de l'enfant

?>

Modificateurs d'accès clés:

  • public: Accessible de partout.
  • protected: Accessible dans la classe et dans les classes héritées.
  • private: Accessible uniquement dans la classe.

Les méthodes peuvent être déclarées final, ce qui empêche leur redéfinition dans les classes filles. Les classes peuvent également être final, ce qui empêche leur héritage. Elles peuvent être abstract, ce qui nécessite leur implémentation dans les classes filles.