Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Descendre la méthode.

Problème

Un comportement implémenté dans une superclasse n’est-il utilisé que par une seule (ou quelques) sous-classe(s) ?

Solution

Déplacez ce comportement vers les sous-classes.

##Exemple

Avant
class Employee {
  double salesQuota() { return quota; }
}
class Salesman extends Employee {}
class Engineer extends Employee {}
Après
class Employee {}
class Salesman extends Employee {
  double salesQuota() { return quota; }
}
class Engineer extends Employee {}

##Pourquoi refactoriser

Au départ, une certaine méthode était censée être universelle pour toutes les classes, mais en réalité elle n’est utilisée que dans une seule sous-classe. Cette situation peut se produire lorsque des fonctionnalités prévues ne se concrétisent pas.

De telles situations peuvent également survenir après l’extraction (ou la suppression) partielle de fonctionnalités d’une hiérarchie de classes, laissant une méthode qui n’est utilisée que dans une seule sous-classe.

Si vous constatez qu’une méthode est nécessaire à plusieurs sous-classes, mais pas à toutes, il peut être utile de créer une sous-classe intermédiaire et d’y déplacer la méthode. Cela permet d’éviter la duplication de code qui résulterait de la descente de la méthode vers toutes les sous-classes.

##Avantages

  • Améliore la cohérence des classes. Une méthode se trouve là où vous vous attendez à la voir.

##Comment refactoriser

  1. Déclarez la méthode dans une sous-classe et copiez-y son code depuis la superclasse.

  2. Supprimez la méthode de la superclasse.

  3. Trouvez tous les endroits où la méthode est utilisée et vérifiez qu’elle est appelée depuis la sous-classe appropriée.