Refatoração

Refatoração (do inglês refactoring) é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo.

O uso desta técnica aprimora a concepção (design) de um software e evita a deterioração tão comum durante o ciclo de vida de um código. Esta deterioração é geralmente causada por mudanças com objetivos de curto prazo ou por alterações realizadas sem a clara compreensão da concepção do sistema.

Outra consequência é a melhora no entendimento do código, o que facilita a manutenção e evita a inclusão de defeitos. Esta melhora no entendimento vem da constante alteração do código com objetivo de facilitar a comunicação de motivações, intenções e objetivos por parte do programador.

É fundamental que o sistema de software possua testes automatizados para realizar refatoração. Desta forma, será possível garantir que o comportamento externo não foi alterado.

O livro mais importante sobre refatoração é Refactoring: Improving the Design of Existing Code (ISBN 0-201-48567-2) de Martin Fowler, onde são explicados os conceitos, motivações e uma série de refatorações descritas passo a passo.

Programação extrema tem refatoração como uma de suas práticas.

Exemplo

O código Java abaixo demonstra a aplicação da refatoração para extrair método (Extract Method).

  • Antes
 /** Salva o produto no banco de dados. */
 public void save() {
     // Verifica propriedades
     if (this.getName() == null) {
         throw new Exception("Falta nome");
     }
     if (this.getDescription() == null) {
         throw new Exception("Falta a descrição");
     }
 
     this.getDatabase().save(this);
 }
  • Depois
 /** Salva o produto no banco de dados. */
 public void save() {
     this.checkProperties();
     this.getDatabase().save(this);
 }
 
 /** Verifica as propriedades do produto. */
 private void checkProperties() {
     if (this.getName() == null) {
         throw new Exception("Falta nome do produto.");
     }
     else if (this.getDescription() == null) {
         throw new Exception("Falta a descrição do produto.");
     }
 }

Outro exemplo de refatoração, que também utiliza a prática de Desenvolvimento Orientado a Testes pode ser encontrado no link http://www.improveit.com.br/xp/praticas/tdd.

Utilização

Kent Beck, um dos criadores da programação extrema, afirma que refatoração deve ser utilizada quando o "código cheirar mal" (do inglês bad smells in code). Este conselho bem humorado indica uma confiança na experiência de programadores e também ressalta o valor estético do código, que deve valorizar a clareza e comunicação.

Alguns indícios já possuem uma aceitação ampla para promover refatoração:

  • Código duplicado (duplicated code)
  • Método longo (long method)
  • Classe grande (large class)
  • Lista de parâmetros longa (long parameter list)
  • indentação (Bad Indentation)

Refatorações

As refatorações descritas no livro de Martin Fowler utilizam fortemente conceitos de orientação a objeto. Basta observar algumas:

  • Extrair Método (Extract Method)
  • Mover Método (Move Method)
  • Mover Atributo (Move Field)
  • Extrair Classe (Extract Class)
  • Encapsular Atributo (Encapsulate Field)
  • Renomear Método (Rename Method)
  • Subir Método (Pull Up Method)
  • Subir Atributo (Pull Up Field)
  • Descer Método (Push Down Method)
  • Descer Atributo (Push Down Field)
  • Extrair Sub-classe (Extract Subclass)
  • Extrair Super-classe (Extract Superclass)

Referências

Ligações externas

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.