refatorações experiência é aquela coisa maravilhosa que permite que você reconheça um erro...
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/35.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc10a497959413d8c0a8b/html5/thumbnails/45.jpg)
Substituir Delegação por Herança