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.


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 :

É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?
- Combien de propriétés possède un
Une première classe a été écrite dans le projet :
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
acheterretourne le prix d'achat. - La méthode
vendreretourne :- 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 :
- [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 ?