Introducao a refatoracao
-
Upload
ivan-ricarte -
Category
Technology
-
view
490 -
download
0
Transcript of Introducao a refatoracao
Quando for necessário alterar o código e ele não está estruturado de modo adequado para receber essa modificação, primeiro refatore o programa para tornar a modificação mais fácil de ser realizada, e então faça a modificação.
Quando você tem um fragmento de código que pode ser manipulado como um grupo:
Transforme o fragmento em um método cujo nome explique o propósito do método
https://refactoring.guru/extract-method
Quando um método usa mais características de outra classe que da classe na qual ele está alocado:
Crie um novo método com corpo similar na classe que ele mais usa. Transforme o método original em uma delegação ou, se for o caso, remova-o.
https://refactoring.guru/move-method
Você tem uma variável temporária que recebe um valor uma vez a partir de uma expressão simples e a variável temporária pode atrapalhar a aplicação de outras refatorações:
Troque todas as referências à variável temporária pela expressão.
https://refactoring.guru/inline-temp
Verificar que atribuição é a única:
Substituir usos da variável pelo lado direito da atribuição:
E testar...
Você está usando uma variável temporária para manter o resultado de uma expressão:
Extraia a expressão para um método. Substitua todas as referências para a variável temporária pelo novo método. O novo método poderá
então ser utilizado em outros métodos
https://refactoring.guru/replace-temp-with-query
Na classe Rental:
Escolha do switch é feito com base em um atributo de Movie(não é uma boa estratégia...)
O mesmo ocorre com o método getFrequentRenterPoints():
Adicionalmente: coisas que variam juntas devem estar juntas
Você tem um código de tipo que afeta o comportamento de uma classe, mas você não pode usar herança diretamente:
Substitua o código de tipo com um objeto de estado
https://refactoring.guru/replace-type-code-with-state-strategy
Você está acessando um atributo diretamente, mas o forte acoplamento em relação a esse atributo está se tornando problemático:
Crie métodos get...() e set...() para esse atributo e use apenas esses métodos para acessar o atributo
https://refactoring.guru/self-encapsulate-field
Substituir condicional com polimorfismo:1. Para cada case do switch, criar um método que
sobrescreve o método original2. Compilar e testar
Seguindo o mesmo procedimento para getFrequentRenterPoints()• Mover o método para a classe Price:
Na classe Movie:
Na classe Price:
Comportamento para os demais tipos de filmes (Regular, Infantil): Utiliza o método padrão (manter na classe Price)
http://staruml.io/http://www.uml-lab.com/en/uml-lab/tutorials/http://plugins.netbeans.org/plugin/55435/easyuml
http://junit.org/http://courses.cs.washington.edu/courses/cse143/11wi/eclipse-tutorial/junit.shtml
http://sourcemaking.com/refactoringhttp://refactoring.guru/