Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

Extraer superclase.

Problema

Tienes dos clases con campos y métodos comunes.

Solución

Crea una superclase compartida para ellas y mueve a ella todos los campos y métodos idénticos.

##Ejemplo

Antes
class Employee {
  String name;
  double monthlyCost;
  double getAnnualCost() { return monthlyCost * 12; }
}
class Department {
  String name;
  double monthlyCost;
  double getAnnualCost() { return monthlyCost * 12; }
}
Después
class Party {
  String name;
  double monthlyCost;
  double getAnnualCost() { return monthlyCost * 12; }
}
class Employee extends Party {}
class Department extends Party {}

##Por qué refactorizar

Un tipo de duplicación de código se produce cuando dos clases realizan tareas similares de la misma manera, o realizan tareas similares de formas diferentes. Los objetos ofrecen un mecanismo integrado para simplificar tales situaciones mediante la herencia. Pero a menudo esta similitud pasa desapercibida hasta que las clases ya están creadas, lo que obliga a crear una estructura de herencia más adelante.

##Ventajas

  • Desduplicación de código. Los campos y métodos comunes ahora “viven” en un único lugar.

##Cómo refactorizar

  1. Crea una superclase abstracta.

  2. Usa Subir campo, Subir método y Subir cuerpo del constructor para mover la funcionalidad común a una superclase. Empieza por los campos, ya que además de los campos comunes necesitarás mover los campos que se utilizan en los métodos comunes.

  3. Busca lugares en el código cliente donde el uso de subclases pueda sustituirse por tu nueva clase (como en las declaraciones de tipos).