ConstructiCat Logo
CodeBust.
Browse section ▾

Descer Método.

Problem

Um comportamento implementado em uma superclasse é usado por apenas uma (ou algumas) subclasses?

Solution

Mova esse comportamento para as subclasses.

##Example

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

##Why Refactor

No início, um determinado método deveria ser universal para todas as classes, mas, na realidade, é usado em apenas uma subclasse. Essa situação pode ocorrer quando funcionalidades planejadas não se concretizam.

Tais situações também podem ocorrer após a extração (ou remoção) parcial de funcionalidades de uma hierarquia de classes, deixando um método que é usado em apenas uma subclasse.

Se você perceber que um método é necessário em mais de uma subclasse, mas não em todas, pode ser útil criar uma subclasse intermediária e mover o método para ela. Isso permite evitar a duplicação de código que resultaria de descer um método para todas as subclasses.

##Benefits

  • Melhora a coesão da classe. Um método fica localizado onde você espera vê-lo.

##How to Refactor

  1. Declare o método em uma subclasse e copie seu código da superclasse.

  2. Remova o método da superclasse.

  3. Encontre todos os lugares onde o método é usado e verifique se ele é chamado a partir da subclasse necessária.