Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Extraire une superclasse.

Problème

Vous avez deux classes qui partagent des champs et des méthodes communs.

Solution

Créez une superclasse commune pour elles et déplacez-y tous les champs et méthodes identiques.

##Exemple

Avant
class Employee {
  String name;
  double monthlyCost;
  double getAnnualCost() { return monthlyCost * 12; }
}
class Department {
  String name;
  double monthlyCost;
  double getAnnualCost() { return monthlyCost * 12; }
}
Après
class Party {
  String name;
  double monthlyCost;
  double getAnnualCost() { return monthlyCost * 12; }
}
class Employee extends Party {}
class Department extends Party {}

##Pourquoi refactoriser

Un type de duplication de code se produit lorsque deux classes accomplissent des tâches similaires de la même manière, ou accomplissent des tâches similaires de manières différentes. Les objets offrent un mécanisme intégré pour simplifier de telles situations grâce à l’héritage. Mais bien souvent, cette similarité passe inaperçue jusqu’à ce que les classes soient créées, ce qui oblige à mettre en place une structure d’héritage par la suite.

##Avantages

  • Déduplication du code. Les champs et méthodes communs « vivent » désormais à un seul endroit.

##Comment refactoriser

  1. Créez une superclasse abstraite.

  2. Utilisez Remonter un champ, Remonter une méthode et Remonter le corps du constructeur pour déplacer les fonctionnalités communes vers une superclasse. Commencez par les champs, car en plus des champs communs, vous devrez déplacer les champs utilisés dans les méthodes communes.

  3. Recherchez dans le code client les endroits où l’utilisation des sous-classes peut être remplacée par votre nouvelle classe (comme dans les déclarations de type).