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

Extrair Superclasse.

Problema

Você tem duas classes com campos e métodos em comum.

Solução

Crie uma superclasse compartilhada para elas e mova todos os campos e métodos idênticos para ela.

##Exemplo

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

##Por que refatorar

Um tipo de duplicação de código ocorre quando duas classes realizam tarefas semelhantes da mesma forma, ou realizam tarefas semelhantes de maneiras diferentes. Os objetos oferecem um mecanismo embutido para simplificar tais situações por meio da herança. Mas, muitas vezes, essa semelhança passa despercebida até que as classes sejam criadas, exigindo que uma estrutura de herança seja criada posteriormente.

##Benefícios

  • Deduplicação de código. Os campos e métodos comuns agora “vivem” em um único lugar.

##Como refatorar

  1. Crie uma superclasse abstrata.

  2. Use Subir Campo, Subir Método e Subir Corpo do Construtor para mover a funcionalidade comum para uma superclasse. Comece pelos campos, pois, além dos campos comuns, você precisará mover os campos usados nos métodos comuns.

  3. Procure lugares no código cliente onde o uso de subclasses pode ser substituído pela sua nova classe (como em declarações de tipo).