refatorações experiência é aquela coisa maravilhosa que permite que você reconheça um erro...

45
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Refatorações

Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente

F.P. Jones

Page 2: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

O que é Refatoração?

• Refatoração é o processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada.

• É uma maneira disciplinada de aperfeiçoar o código que minimiza a chance de introdução de falhas.

• Em essência, quando você usa refatoração, você está melhorando o projeto do código após este ter sido escrito.

Page 3: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Um catálogo de Refatorações

Tratando Generalizações

Page 4: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir atributo na hierarquia

Page 5: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir atributo na hierarquia

Duas subclasses têm o mesmo atributo Mova o atributo para a superclasse

Page 6: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir atributo na hierarquia

Page 7: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir método na hierarquia

Page 8: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir método na hierarquia

Você tem métodos nas subclasses que produzem resultados idênticos .

Mova-os para a superclasse.

Motivação: Evitar a duplicação de código

Page 9: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Exemplo

O método createBill é idêntico para ambas as classes

Page 10: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Exemplo

• Não posso mover o método createBill na hierarquia porque o método chargeFor é diferente em cada subclasse

• Solução: declarar o método chargeFor como abstrato na superclasse

Page 11: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir código do construtor na hierarquia

Page 12: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Subir código do construtor na hierarquia

Você tem construtores nas subclasses com código quase idêntico.

 

• Crie um construtor para a superclasse; chame-o a partir de métodos das subclasses.

Motivação: O código dos construtores é quase idêntico, mas você não pode usar "subir método na hierarquia" porque métodos construtores não podem ser herdados

Page 13: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Descer Método na Hierarquia

Page 14: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Descer Método na Hierarquia

Algum comportamento na superclasse é relevante apenas para algumas de suas subclasses.

• Mova-o para essas subclasses

Motivação: Um código específico faz sentido apenas em algumas das subclasses

Page 15: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Descer Método na Hierarquia

Page 16: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Subclasse

Page 17: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Subclasse

Uma classe tem características que são usadas apenas em algumas instâncias.

• Crie uma subclasse para esse subconjunto de características.

Motivação: O principal motivo para usar Extrair Subclasse é a observação de que uma classe tem comportamento usado por algumas das instâncias da classe mas não por outras.

Page 18: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Subclasse

Page 19: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Subclasse

Page 20: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Superclasse

Page 21: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Superclasse

Você tem duas classes com características semelhantes.

 • Crie uma superclasse e mova as características em

comum para ela.

Motivação: Evitar a duplicação de código

Page 22: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Superclasse

Page 23: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Superclasse

Page 24: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Interface

Page 25: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair 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.

Page 26: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair 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.

Page 27: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Interface

Page 28: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Extrair Interface

Page 29: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Condensar Hierarquia

Page 30: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Condensar Hierarquia

Uma superclasse e uma subclasse não são muito diferentes.

• Junte-as.

Page 31: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Criar Método Roteiro

Page 32: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Criar Método Roteiro

Você tem dois métodos em subclasses diferentes que executam passos semelhantes na mesma ordem, mas esses passos são diferentes.

• Coloque os passos em métodos com a mesma assinatura, de modo que os métodos originais se tornem o mesmo. Você poderá então subi-los na hierarquia.

Page 33: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Criar Método Roteiro

Motivação • Herança é uma ferramenta poderosa para eliminar

comportamento duplicado. Sempre que vemos dois métodos semelhantes em uma subclasse, queremos juntá-los em uma superclasse. Mas e se eles não forem exatamente os mesmos?  

• Um caso comum é o de dois métodos que parecem ter passos similares na mesma ordem, porém os passos não são os mesmos. Neste caso podemos mover a seqüência para a superclasse e permitir que o polimorfismo execute seu papel

Page 34: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Criar Método Roteiro

Page 35: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones
Page 36: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Herança por Delegação

Page 37: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Herança por Delegação

Uma subclasse usa apenas parte da interface de uma superclasse ou não quer herdar dados.

• Crie um campo para a superclasse, ajuste métodos para delegarem para a superclasse e remova a herança.

 

Page 38: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Herança por Delegação

Motivação

• A subclasse usa somente parte da interface da superclasse

• Problema conceitual: a subclasse não é uma superclasse

• Necessidade de substituir a herança por outra "mais útil"

Page 39: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Herança por Delegação

Page 40: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Herança por Delegação

Page 41: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Delegação por Herança

Page 42: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Delegação por Herança

Você está usando delegação e está freqüentemente escrevendo muitas delegações simples para toda a interface.

 

• Torne a classe que delega uma subclasse da classe delegada.

Page 43: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Motivação

Motivação

 • Este é o reverso de Substituir Herança por Delegação. Se

você se encontrar usando todos os métodos da classe delegada e estiver farto de escrever todos esses métodos de delegação simples, pode voltar para a herança facilmente.

Page 44: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Delegação por Herança

Page 45: Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

Substituir Delegação por Herança