Remonter une méthode.
Vos sous-classes ont des méthodes qui effectuent un travail similaire.
Rendez les méthodes identiques, puis déplacez-les vers la superclasse appropriée.
##Exemple
class Employee {
String name;
}
class Salesman extends Employee {
String getName() { return name; }
}
class Engineer extends Employee {
String getName() { return name; }
}class Employee {
String name;
String getName() { return name; }
}
class Salesman extends Employee {}
class Engineer extends Employee {}##Pourquoi refactoriser
Les sous-classes ont grandi et évolué indépendamment les unes des autres, provoquant des champs et des méthodes identiques (ou presque identiques).
##Avantages
-
Élimine le code dupliqué. Si vous devez modifier une méthode, il vaut mieux le faire à un seul endroit plutôt que d'avoir à rechercher tous les doublons de la méthode dans les sous-classes.
-
Cette technique de refactorisation peut aussi être utilisée si, pour une raison quelconque, une sous-classe redéfinit une méthode de la superclasse mais effectue essentiellement le même travail.
##Comment refactoriser
-
Examinez les méthodes similaires dans les sous-classes. Si elles ne sont pas identiques, mettez-les en forme pour qu'elles correspondent.
-
Si les méthodes utilisent un ensemble de paramètres différent, mettez les paramètres sous la forme que vous souhaitez voir dans la superclasse.
-
Copiez la méthode dans la superclasse. Vous pourriez alors constater que le code de la méthode utilise des champs et des méthodes qui n'existent que dans les sous-classes et qui ne sont donc pas disponibles dans la superclasse. Pour résoudre cela, vous pouvez :
-
Pour les champs : utilisez soit Remonter un champ, soit Auto-encapsuler un champ pour créer des accesseurs et mutateurs dans les sous-classes ; déclarez ensuite ces accesseurs de manière abstraite dans la superclasse.
-
Pour les méthodes : utilisez soit Remonter une méthode, soit déclarez des méthodes abstraites pour elles dans la superclasse (notez que votre classe deviendra abstraite si elle ne l'était pas déjà).
-
-
Supprimez les méthodes des sous-classes.
-
Vérifiez les emplacements où la méthode est appelée. À certains endroits, vous pourrez peut-être remplacer l'utilisation d'une sous-classe par la superclasse.