Classe abstraite : Mise en pratique
Dans cette mise en pratique, nous allons voir comment déclarer et utiliser des Classes Abstraites en PHP. Les classes abstraites sont un élément important de la programmation objet, pour rappel, une classe abstraite :
- Sert de base à d'autres classes dérivées (héritées).
- Ne peut pas être instanciée (pas de
new). - Permet de factoriser du code.
- Doit être héritée par une classe fille.
Sommaire
Ressources disponibles :
Mise en situation

abstract class EtudiantAbstrait
{
// Force les classes filles à définir cette méthode
abstract protected function getSpecificite();
abstract protected function setSpecificite($valeur);
// méthode commune
public function parler() {
print "Je suis " . $this->getSpecificite() . "\n";
}
}Questionnement
- Une classe
abstraiteest définie avec le mot clé : - Identifier les particularités de la classe
EtudiantAbstrait- Particularité 1 :
- Particularité 2 :
- Particularité 3 :
- D'un point de vue sécurité, qu'apporte cette organisation ? (Une piste, encapsulation…)
- Selon vous, pourquoi la classe abstraite ne possède-t-elle pas de constructeur ?
Déclarer les classes
Pour utiliser une classe abstraite, nous allons devoir « hériter » de celle-ci avec les mots clés que vous connaissez déjà :
extendsen PHP et en Java.:en C#.
La différence avec un simple héritage, c'est que vous devrez « implémenter » / « écrire » les deux méthodes :
getSpecificite()setSpecificite($valeur)
Et la méthode parler ?
Pour la méthode parler() c'est au choix. Vous pouvez :
- La redéfinir dans votre classe pour en changer le comportement.
- Ne pas la redéfinir et bénéficier du comportement de « base de la classe abstraite ».
Questionnement
- Écrire la définition de la classe pour
EtudiantSIO. - Écrire la définition de la classe pour
EtudiantSEN. - Quelle différence majeure observez-vous entre la classe abstraite
EtudiantAbstraitet les classes filles ?
Utilisation
Je souhaite créer 6 étudiants (3 SEN et 3 SIO).
Pour les SEN, ils doivent avoir les compétences suivantes :
- La sécurité.
- La soudure.
- Le réseau.
Pour les SIO, ils doivent avoir les options suivantes :
- SLAM
- SISR
- SLAM
Vous placerez ces étudiants dans une liste. Puis pour chacun d'entre eux, vous appellerez la méthode parler().
Questionnement
- Identifier l'avantage d'une classe abstraite VS un simple héritage.
- Faire évoluer le code pour ajouter le
nomet leprenomde l'étudiant.- Quelle(s) classe(s) seront impactées ?
- Et de quelle manière ?
Redéfinir une méthode
Après réflexion, vous souhaitez changer le comportement de la méthode parler() pour les étudiants de la classe EtudiantSIO.
Vous souhaitez que le message soit le suivant :
Je suis un étudiant SIO et je suis spécialisé en sécurité.Questionnement
- Identifier les modifications à apporter au code.
- Écrire le code pour la classe
EtudiantSIO.
Évolution du code
Vous souhaitez ajouter l'identifiant de l'étudiant :
- nom
- prénom
Questionnement
- Quelles classe(s) seront impactée(s) ?
- Quelles modifications apporter au code ?
- Écrire le code permettant d'ajouter ces informations.
- Devez-vous modifier la méthode
parler()?
Analyser une erreur
Un développeur souhaite créer un Étudiant, il a donc écrit le code suivant :
$etudiant = new EtudiantAbstrait();En exécutant ce code, vous obtenez l'erreur suivante :
Cannot instantiate abstract class EtudiantAbstraitQuestionnement
- Identifier la raison de cette erreur.
- Identifier la solution pour contourner cette erreur.