Skip to content

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

UML

php
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 abstraite est 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à :

  • extends en 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 EtudiantAbstrait et 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 nom et le prenom de 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 :

text
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 :

php
$etudiant = new EtudiantAbstrait();

En exécutant ce code, vous obtenez l'erreur suivante :

text
Cannot instantiate abstract class EtudiantAbstrait

Questionnement

  • Identifier la raison de cette erreur.
  • Identifier la solution pour contourner cette erreur.
×

Reformulation

La reformulation (IA) peut faire des erreurs. Envisagez de vérifier les informations.