Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

Subir Método.

Problema

Tus subclases tienen métodos que realizan un trabajo similar.

Solución

Haz que los métodos sean idénticos y luego muévelos a la superclase correspondiente.

##Ejemplo

Antes
class Employee {
  String name;
}
class Salesman extends Employee {
  String getName() { return name; }
}
class Engineer extends Employee {
  String getName() { return name; }
}
Después
class Employee {
  String name;
  String getName() { return name; }
}
class Salesman extends Employee {}
class Engineer extends Employee {}

##Por qué refactorizar

Las subclases crecieron y se desarrollaron independientemente unas de otras, lo que provocó campos y métodos idénticos (o casi idénticos).

##Ventajas

  • Elimina el código duplicado. Si necesitas hacer cambios en un método, es mejor hacerlo en un único lugar que tener que buscar todos los duplicados del método en las subclases.

  • Esta técnica de refactorización también puede usarse si, por alguna razón, una subclase redefine un método de la superclase pero realiza lo que es esencialmente el mismo trabajo.

##Cómo refactorizar

  1. Investiga métodos similares en las subclases. Si no son idénticos, dales el mismo formato para que coincidan entre sí.

  2. Si los métodos usan un conjunto de parámetros diferente, coloca los parámetros en la forma que quieras ver en la superclase.

  3. Copia el método a la superclase. Aquí puede que descubras que el código del método usa campos y métodos que existen solo en las subclases y que, por tanto, no están disponibles en la superclase. Para resolver esto, puedes:

    • Para los campos: usa Subir Campo o Autoencapsular Campo para crear getters y setters en las subclases; luego declara estos getters de forma abstracta en la superclase.

    • Para los métodos: usa Subir Método o declara métodos abstractos para ellos en la superclase (ten en cuenta que tu clase se volverá abstracta si no lo era previamente).

  4. Elimina los métodos de las subclases.

  5. Comprueba los lugares en los que se llama al método. En algunos lugares quizá puedas reemplazar el uso de una subclase por la superclase.