refatorações
TRANSCRIPT
RefatoraçõesAltamirRenan
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;
}//REFATORADOint 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.