Aller au contenu principal

L'héritage

Partie théorique

En programmation orientée objet, l'héritage est un mécanisme qui permet à une classe d'hériter des propriétés et des méthodes d'une autre classe.

  • La classe qui hérite est appelée "classe enfant" ou "classe dérivée",
  • et la classe dont elle hérite est appelée "classe parente" ou "classe de base".

L'héritage est utile pour créer des classes spécialisées qui reprennent les caractéristiques d'une classe plus générale tout en ajoutant ou en modifiant certaines d'entre elles. Cela permet de réduire la redondance du code et de faciliter la maintenance et l'évolution du programme.

Comment permettre à une classe d'hériter des propriétés et des méthodes d'une autre classe ?

En PHP :

  • l'héritage est réalisé en utilisant le mot-clé extends
  • Une classe ne peut hériter que d'une seule classe parente.
attention

L'héritage est un concept fondamental en programmation orientée objet (POO).

Exemple pratique

class Vehicule {
protected $vitesseMax;

public function getVitesseMax() {
return $this->vitesseMax;
}

public function setVitesseMax($v) {
$this->vitesseMax = $v;
}
}

class Voiture extends Vehicule {
private $nombreDePortes;

public function getNombreDePortes() {
return $this->nombreDePortes;
}

public function setNombreDePortes($n) {
$this->nombreDePortes = $n;
}
}

$voiture = new Voiture();
$voiture->setNombreDePortes(4);
print($voiture->getNombreDePortes()); // Affiche 4
$voiture->setVitesseMax(135);
print($voiture->getVitesseMax()); // Affiche 135

Test de mémorisation/compréhension


Qu'est-ce que l'héritage en PHP ?


Comment déclarer l'héritage en PHP ?


Qu'est-ce qu'une classe enfant en PHP ?



TP pour réfléchir et résoudre des problèmes

Nous allons maintenant étendre notre jeu en utilisant l'héritage pour créer deux types spécifiques de personnages : un Guerrier et un Magicien.

Ces deux types de personnages hériteront de la classe Personnage et auront des propriétés et des méthodes supplémentaires.

Voici les étapes à suivre :

  1. Dans le répertoire classes du répertoire jeu_combat (de la séance précédente) :

    • Créez une classe Guerrier qui hérite de la classe Personnage.
    • Ajoutez une propriété privée $force pour représenter la force du guerrier.
  2. Ajoutez un accesseur (getter) et un mutateur (setter) pour la propriété $force.

    Assurez-vous d'ajouter des vérifications pour garantir que la force est un nombre positif.

  3. Ajoutez une méthode attaquer qui affiche un message indiquant que le guerrier attaque et indiquant sa force.

  4. Créez une classe Magicien qui hérite également de la classe Personnage.

    Ajoutez une propriété privée $magie pour représenter le niveau de magie du magicien.

  5. Ajoutez un accesseur (getter) et un mutateur (setter) pour la propriété $magie.

    Assurez-vous d'ajouter des vérifications pour garantir que le niveau de magie est un nombre positif.

  6. Ajoutez une méthode lancerSort qui affiche un message indiquant que le magicien lance un sort et indiquant son niveau de magie.

  7. Créez une instance de chaque classe et testez toutes les méthodes :

    $guerrier = new Guerrier();
    $guerrier->setNom("Arthur");
    $guerrier->setPointsDeVie(100);
    $guerrier->setExperience(0);
    $guerrier->setForce(50);
    $guerrier->attaquer(); // Affiche "Arthur attaque avec une force de 50 points."

    $magicien = new Magicien();
    $magicien->setNom("Merlin");
    $magicien->setPointsDeVie(80);
    $magicien->setExperience(0);
    $magicien->setMagie(100);
    $magicien->lancerSort(); // Affiche "Merlin lance un sort avec un niveau de magie de 100 points."
Une solution