2. 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.
3.
4.
5. 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.
6. 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);
}
7. 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.
8.
9.
10. 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.
11.
12.
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.