Logotipo do ConstructiCat
CodeBust.
Explorar a seção ▾

Recolher Hierarquia.

Problema

Você tem uma hierarquia de classes na qual uma subclasse é praticamente igual à sua superclasse.

Solução

Mescle a subclasse e a superclasse.

##Exemplo

Antes
class Employee {
  String name;
  double monthlyCost;
}
class Salesman extends Employee {
}
Depois
class Employee {
  String name;
  double monthlyCost;
}

##Por que refatorar

Seu programa cresceu ao longo do tempo e uma subclasse e uma superclasse se tornaram praticamente iguais. Uma funcionalidade foi removida de uma subclasse, um método foi movido para a superclasse... e agora você tem duas classes parecidas.

##Benefícios

  • A complexidade do programa é reduzida. Menos classes significam menos coisas para manter organizadas na sua cabeça e menos partes móveis quebráveis com que se preocupar durante futuras mudanças no código.

  • Navegar pelo seu código fica mais fácil quando os métodos são definidos em uma única classe. Você não precisa vasculhar toda a hierarquia para encontrar um método específico.

##Como refatorar

  1. Selecione qual classe é mais fácil de remover: a superclasse ou a sua subclasse.

  2. Use Subir Campo e Subir Método se você decidir se livrar da subclasse. Se optar por eliminar a superclasse, recorra a Descer Campo e Descer Método.

  3. Substitua todos os usos da classe que você está excluindo pela classe para a qual os campos e métodos serão migrados. Muitas vezes isso será código de criação de classes, tipagem de variáveis e parâmetros, e documentação em comentários de código.

  4. Exclua a classe vazia.