Refatorações
Altamir
Renan
Extract Interface
• Diversos clientes usam o mesmo subconjunto da
interface de uma classe ou duas classes tem parte de suas
interfaces em comum.
 Extraia o subconjunto para uma interface.
• Motivação:
▫ Somente parte da interface de uma classe faz sentido para um
grupo de clientes
▫ Uma classe tem de trabalhar com qualquer classe que trate um
grupo de requisições
▫ Interfaces são uma boa solução quando uma classe tem papéis
distintos em diferentes situações.
Inline Method
• A implementação de um método é tão clara
quanto o nome do método. Substitua a
chamada ao método pela sua implementação.
• Motivação:
▫ Bom para eliminar indireção desnecessária. Se
você tem um grupo de métodos mal organizados,
aplique Inline Method em todos eles seguido de
uns bons Extract Methods.
int bandeiradaDoTaxi (int hora) {
return (depoisDas22Horas (hora)) ? 2 : 1);
}
int depoisDas22Horas (int hora) {
return hora > 22;
}
//REFATORADO
int bandeiradaDoTaxi (int hora) {
return (hora > 22) ? 2 : 1);
}
Extract Superclass
• Duas classes apresentam características semelhantes.
• Motivação:
▫ Código duplicado é um dos principais Bad Smells em
sistemas. Se você código duplicado em vários lugares,
então, quando chega a hora de mudar, você tem mais coisas
para mudar do que você deveria.
▫ Uma forma de código duplicado é ter duas classes que
fazem coisas semelhantes, da mesma forma, ou coisas
semelhantes de diferentes maneiras. Objetos fornecem um
mecanismo embutido para simplificar esta situação com a
herança.
▫ No entanto, muitas vezes você não notara as semelhanças
até ter criado algumas classes, em que você precisa criar a
estrutura de herança mais tarde.
Extract Subclass
• O principal motivo para o uso é a constatação de
que a classe tem um tipo comportamento para
algumas instâncias da classe e não para outros.
Às vezes, isso é sinalizado por um tipo de código,
em que você pode usar Replace Type Code with
Subclasses ou Replace Type Code with
State/Strategy.
Pull UP Field
• A superclasse e a subclasse têm os mesmos
atributos (field). Mova os atributos repetidos para a
superclasse.
• Motivação:
▫ Subclasses desenvolvidas independentemente umas
das outras, ou após refatoração, podem ter
características (features) duplicadas. Atributos podem
ser duplicados. Estes não necessariamente têm o
mesmo nome em todas as subclasses. A forma de
eterminar se tal acontece é verificar como os atributos
são usados por outros métodos. Se eles são usados da
mesma forma, pode-se generalizá-los.
Refatorações

Refatorações

  • 1.
  • 2.
    Extract Interface • Diversosclientes usam o mesmo subconjunto da interface de uma classe ou duas classes tem parte de suas interfaces em comum.  Extraia o subconjunto para uma interface. • Motivação: ▫ Somente parte da interface de uma classe faz sentido para um grupo de clientes ▫ Uma classe tem de trabalhar com qualquer classe que trate um grupo de requisições ▫ Interfaces são uma boa solução quando uma classe tem papéis distintos em diferentes situações.
  • 5.
    Inline Method • Aimplementação de um método é tão clara quanto o nome do método. Substitua a chamada ao método pela sua implementação. • Motivação: ▫ Bom para eliminar indireção desnecessária. Se você tem um grupo de métodos mal organizados, aplique Inline Method em todos eles seguido de uns bons Extract Methods.
  • 6.
    int bandeiradaDoTaxi (inthora) { return (depoisDas22Horas (hora)) ? 2 : 1); } int depoisDas22Horas (int hora) { return hora > 22; } //REFATORADO int bandeiradaDoTaxi (int hora) { return (hora > 22) ? 2 : 1); }
  • 7.
    Extract Superclass • Duasclasses apresentam características semelhantes. • Motivação: ▫ Código duplicado é um dos principais Bad Smells em sistemas. Se você código duplicado em vários lugares, então, quando chega a hora de mudar, você tem mais coisas para mudar do que você deveria. ▫ Uma forma de código duplicado é ter duas classes que fazem coisas semelhantes, da mesma forma, ou coisas semelhantes de diferentes maneiras. Objetos fornecem um mecanismo embutido para simplificar esta situação com a herança. ▫ No entanto, muitas vezes você não notara as semelhanças até ter criado algumas classes, em que você precisa criar a estrutura de herança mais tarde.
  • 10.
    Extract Subclass • Oprincipal motivo para o uso é a constatação de que a classe tem um tipo comportamento para algumas instâncias da classe e não para outros. Às vezes, isso é sinalizado por um tipo de código, em que você pode usar Replace Type Code with Subclasses ou Replace Type Code with State/Strategy.
  • 13.
    Pull UP Field •A superclasse e a subclasse têm os mesmos atributos (field). Mova os atributos repetidos para a superclasse. • Motivação: ▫ Subclasses desenvolvidas independentemente umas das outras, ou após refatoração, podem ter características (features) duplicadas. Atributos podem ser duplicados. Estes não necessariamente têm o mesmo nome em todas as subclasses. A forma de eterminar se tal acontece é verificar como os atributos são usados por outros métodos. Se eles são usados da mesma forma, pode-se generalizá-los.