Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

Bajar método.

Problema

¿El comportamiento implementado en una superclase es utilizado por una sola subclase (o por unas pocas)?

Solución

Mueve este comportamiento a las subclases.

##Ejemplo

Antes
class Employee {
  double salesQuota() { return quota; }
}
class Salesman extends Employee {}
class Engineer extends Employee {}
Después
class Employee {}
class Salesman extends Employee {
  double salesQuota() { return quota; }
}
class Engineer extends Employee {}

##Por qué refactorizar

Al principio, cierto método estaba pensado para ser universal para todas las clases, pero en realidad se usa en una sola subclase. Esta situación puede producirse cuando las funcionalidades planificadas no llegan a materializarse.

Tales situaciones también pueden producirse tras la extracción (o eliminación) parcial de funcionalidad de una jerarquía de clases, dejando un método que se usa en una sola subclase.

Si ves que un método lo necesitan varias subclases, pero no todas, puede ser útil crear una subclase intermedia y mover el método a ella. Esto permite evitar la duplicación de código que resultaría de bajar un método a todas las subclases.

##Ventajas

  • Mejora la cohesión de las clases. Un método se ubica donde esperas verlo.

##Cómo refactorizar

  1. Declara el método en una subclase y copia su código desde la superclase.

  2. Elimina el método de la superclase.

  3. Busca todos los lugares donde se usa el método y verifica que se le llame desde la subclase necesaria.