1 / 45

Refatorações

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

phuong
Download Presentation

Refatorações

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

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

  3. Um catálogo de Refatorações Tratando Generalizações

  4. Subir atributo na hierarquia

  5. Subir atributo na hierarquia • Duas subclasses têm o mesmo atributo • Mova o atributo para a superclasse

  6. Subir atributo na hierarquia

  7. Subir método na hierarquia

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

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

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

  11. Subir código do construtor na hierarquia

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

  13. Descer Método na Hierarquia

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

  15. Descer Método na Hierarquia

  16. Extrair Subclasse

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

  18. Extrair Subclasse

  19. Extrair Subclasse

  20. Extrair Superclasse

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

  22. Extrair Superclasse

  23. Extrair Superclasse

  24. Extrair Interface

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

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

  27. Extrair Interface

  28. Extrair Interface

  29. Condensar Hierarquia

  30. Condensar Hierarquia • Uma superclasse e uma subclasse não são muito diferentes. • Junte-as.

  31. Criar Método Roteiro

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

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

  34. Criar Método Roteiro

  35. Substituir Herança por Delegação

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

  37. 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"

  38. Substituir Herança por Delegação

  39. Substituir Herança por Delegação

  40. Substituir Delegação por Herança

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

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

  43. Substituir Delegação por Herança

  44. Substituir Delegação por Herança

More Related