Skip to content

La redéfinition : Mise en pratique

Dans cette mise en pratique, nous allons voir comment fonctionne la redéfinition de méthodes. Aussi appelée « overriding » (en anglais), elle consiste à définir le comportement d'une méthode selon le type de l'objet qui l'invoque. Autrement dit, elle consiste à donner une nouvelle implémentation à une méthode héritée sans changer sa signature :

  • Nom de méthode identique.
  • Paramètres de la méthode identiques.
  • Type de retour identique.

Surcharge et redéfinition

La redéfinition de méthode est un concept que l’on rencontre lors de la création de classes filles.

Exemple surchargeExemple Redéfinition


Avec les changements récents du BTS, M. Jousseaume souhaite moderniser son parc d'ordinateurs pour y intégrer différents types d'ordinateurs, et notamment des ordinateurs Apple (Mac). À cause de leur prix, les ordinateurs Apple ne seront pas en accès libre, mais disponibles uniquement sur demande.

Comme pour une entreprise classique, les ordinateurs doivent être amortis. À ce titre, il est prévu de les amortir différemment selon leur type. Vous ne gérerez pas cette partie du code, cependant il vous est demandé de fournir la méthode vendre() qui permettra de fournir le prix de vente de l'ordinateur en question.

Nous sommes au début du projet, l'équipe de développement a écrit l'UML de la problématique lors d'une réunion de lancement :

UML du problème

Étudier l'UML

  • Combien avons-nous de classes instanciables ?
  • Pourquoi l'héritage est-il intéressant ici ?
  • Lire l'UML :
    • Combien de propriétés possède un Ordinateur ?
    • Combien de propriétés possède un PC ?
    • Et le Mac ?

Une première classe a été écrite dans le projet :

php
abstract class Ordinateur {
    protected $nom;
    protected $dateFabrication;
    protected $prix;

    abstract public function acheter();
    abstract public function vendre();

    public function age(){
        return date('Y') - $this->dateFabrication;
    }

    public function toString(){
        return "{$this->nom}, {$this->dateFabrication}";
    }
}

Questionnement

  • Identifier les particularités de la classe Ordinateur
    • Particularité 1 :
    • Particularité 2 :
  • Pourquoi la classe ne possède-t-elle pas de constructeur ?

La classe Mac

Vous avez à votre charge l'écriture du code de la classe Mac. Les ordinateurs de la marque Apple ont une spécificité : ils possèdent une architecture particulière :

  • ARM
  • Intel

Cette différence impactera évidemment leurs performances, mais également leur valeur de revente.

Question 1

Identifiez dans l'UML le nombre de méthodes redéfinies.

Question 2

Écrire le code de la classe Mac :

  • La méthode acheter retourne le prix d'achat.
  • La méthode vendre retourne :
    • Le prix - (age * 100).
    • Pour un Mac ARM : Le prix - (age * 50).

Question 3

La méthode toString est utilisée pour afficher le contenu des étagères dans l'interface Web. Pour améliorer la lisibilité de l'interface, il vous est demandé de spécialiser la méthode toString pour afficher par exemple :

text
- [APPLE] Ordinateur1, 01-02-2021, Type ARM.
- [APPLE] Ordinateur2, 01-01-2021, Type Intel.
  • Écrire le code permettant de répondre à la problématique.
  • Pourquoi une méthode spécialisée est-elle intéressante ici ?
×

Reformulation

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