ConstructiCat Logo
CodeBust.
Browse section ▾

Subir Método.

Problem

Suas subclasses têm métodos que realizam um trabalho semelhante.

Solution

Torne os métodos idênticos e, em seguida, mova-os para a superclasse relevante.

##Example

Antes
Unit Soldier +getHealth() Tank +getHealth()
Depois
Unit +getHealth() Soldier Tank

##Why Refactor

As subclasses cresceram e se desenvolveram independentemente umas das outras, causando campos e métodos idênticos (ou quase idênticos).

##Benefits

  • Elimina código duplicado. Se você precisa fazer alterações em um método, é melhor fazê-las em um único lugar do que ter que procurar por todas as duplicatas do método nas subclasses.

  • Essa técnica de refatoração também pode ser usada se, por algum motivo, uma subclasse redefine um método da superclasse mas realiza, essencialmente, o mesmo trabalho.

##How to Refactor

  1. Investigue métodos semelhantes nas superclasses. Se não forem idênticos, formate-os para que correspondam uns aos outros.

  2. Se os métodos usam um conjunto diferente de parâmetros, coloque os parâmetros na forma que você quer ver na superclasse.

  3. Copie o método para a superclasse. Aqui você pode descobrir que o código do método usa campos e métodos que existem apenas nas subclasses e que, portanto, não estão disponíveis na superclasse. Para resolver isso, você pode:

    • Para campos: use Subir Campo ou Auto-Encapsular Campo para criar getters e setters nas subclasses; depois declare esses getters de forma abstrata na superclasse.

    • Para métodos: use Subir Método ou declare métodos abstratos para eles na superclasse (observe que sua classe se tornará abstrata se ainda não for).

  4. Remova os métodos das subclasses.

  5. Verifique os locais em que o método é chamado. Em alguns lugares você pode conseguir substituir o uso de uma subclasse pela superclasse.