Extraire une sous-classe.
Une classe possède des fonctionnalités qui ne sont utilisées que dans certains cas.
Créez une sous-classe et utilisez-la dans ces cas.
##Example
##Why Refactor
Votre classe principale possède des méthodes et des champs pour implémenter un certain cas d'utilisation rare de la classe. Bien que ce cas soit rare, la classe en est responsable et il serait erroné de déplacer tous les champs et méthodes associés vers une classe entièrement distincte. Mais ils pourraient être déplacés vers une sous-classe, ce que nous allons précisément faire à l'aide de cette technique de refactorisation.
##Benefits
-
Crée une sous-classe rapidement et facilement.
-
Vous pouvez créer plusieurs sous-classes distinctes si votre classe principale implémente actuellement plus d'un de ces cas particuliers.
##How to Refactor
-
Créez une nouvelle sous-classe à partir de la classe concernée.
-
Si vous avez besoin de données supplémentaires pour créer des objets à partir d'une sous-classe, créez un constructeur et ajoutez-y les paramètres nécessaires. N'oubliez pas d'appeler l'implémentation du constructeur de la classe parente.
-
Trouvez tous les appels au constructeur de la classe parente. Lorsque les fonctionnalités d'une sous-classe sont nécessaires, remplacez le constructeur de la classe parente par celui de la sous-classe.
-
Déplacez les méthodes et champs nécessaires de la classe parente vers la sous-classe. Faites-le à l'aide de Descendre une méthode et Descendre un champ. Il est plus simple de commencer par déplacer les méthodes. Ainsi, les champs restent accessibles tout au long du processus : depuis la classe parente avant le déplacement, et depuis la sous-classe elle-même une fois le déplacement terminé.
-
Une fois la sous-classe prête, trouvez tous les anciens champs qui contrôlaient le choix des fonctionnalités. Supprimez ces champs en utilisant le polymorphisme pour remplacer tous les opérateurs dans lesquels les champs étaient utilisés. Un exemple simple : dans la classe Car, vous aviez le champ
isElectricCaret, selon sa valeur, dans la méthoderefuel()la voiture est soit ravitaillée en essence, soit rechargée en électricité. Après refactorisation, le champisElectricCarest supprimé et les classesCaretElectricCarauront leurs propres implémentations de la méthoderefuel().