Introdução a Refatoração de Código

A refatoração é uma alteração feita na estrutura interna do programa para torná-lo melhor entendido e menos custoso de ser modificado sem alterar seu comportamento funcional (FOWLER, 2004).

A refatoração surgiu a partir do reconhecimento de Ward Cunningham e Kent Beck, que trabalharam com SmallTalk, em 1980, e posteriormente foi sendo adotado para outras linguagens. Era muito utilizado pelos desenvolvedores de frameworks (FOWLER, 2004).

Por que devemos refatorar?

Para Martin Fowler (FOWLER, 2004), a refatoração não é a cura para todos os problemas, mas pode ser considerada uma ferramenta valiosa (um alicate de prata)  que lhe ajuda a manter seu código seguro. Mas, ele destaca outros propósitos que devem ser observados:

  • Melhora o projeto de software;
  • Torna o software mais fácil de entender;
  • Ajuda a encontra falhas;
  • Ajuda a programa mais rapidamente.

 

Quando devemos refatorar?

A refatoração é algo que devemos realizar todo o tempo em pequenas doses. E devemos aproveitar as oportunidades para aplicar a refatoração, sempre quando acrescentamos funções, consertamos uma falha ou enquanto revisamos o código (FOWLER, 2004).

Quem teve a experiência de pegar um código da faculdade e dar uma olhada, sabe que surge aquele pensamento “Quem fez isso?” e logo vem a resposta “fui eu”. Nesse caso, é uma ótima oportunidade para aplicar a refatoração.

Se tem problemas de entendimento do seu código, mesmo com os comentários, a sua lógica está duplicada, tem necessidade constante de incluir novas funcionalidades, as lógicas condicionais são complexas, então, está na hora de refatorar. Não existe tempo ideal ou alocação de atividade pelo gerente de projetos para realizar a refatoração.

Não faltam motivos para realizar a refatoração, você verá que refatora seu código sem saber. Entretanto, Martin Fowler, define alguns situações que causam “maus cheiros” durante e depois do desenvolvimento. Na Tabela 01, veremos essa situações.

Tabela 01 – Relação do problema e a refatoração sugerida (FOWLER, 2004).

SituaçõesMétodos de Refatoração
Alteração divergenteExtrair Classe
Biblioteca de classes incompletaIntroduzir Método Externo, Introduzir Extensão Local.
Cadeias de mensagensOcultar Delegação
Campo temporárioExtrair Classe, Introduzir Objeto Nulo
Cirurgia com rifleMover Método, Mover Campo, Internalizar Classe
Classe OciosaInternalizar Classe, Condensar Hierarquia
Classes alternativas com interfaces diferentesRenomear Método, Mover Método.
Classes de dadosMover Método, Encapsular Campo, Encapsular Coleção.
Classes grandesExtrair Classe, Extrair Subclasse, Extrair Interface, Substituir Atributo por Objeto
Código duplicadoExtrair Método, Extrair Classe, Subir Método na Hierarquia, Criar um Método Padrão.
Comandos switchSubstituir Comando Condicional por Polimorfismo, Substituir Enumeração por Subclasses, Substituir Enumeração pelo Padrão State/Strategy, Substituir Parâmetros por Métodos Explícitos, Introduzir Objeto Nulo.
ComentáriosExtrair Método, Introduzir Asserção.
Generalidade especulativaCondensar Hierarquia, Internalizar Classe, Remover Parâmetro, Renomear Método.
Grupos de dadosExtrair Classe, Introduzir Objeto Parâmetro, Preservar o Objeto Inteiro.
Herança recusadaSubstituir Herança por Delegação
Hierarquias paralelas de herançaMover Método, Mover Campo.
IntermediárioRemover Intermediário, Internalizar Método, Substituir Delegação por Herança.
Intimidade inadequadaMover Método, Mover Campo, Transformar Associação Bidirecional em Unidirecional, Substituir Herança por Delegação, Ocultar Delegação.
Inveja dos dadosMover Método, Mover Campo, Extrair Método.
Lista de parâmetros longaSubstituir Parâmetro por Método, Introduzir Objeto Parâmetro, Preservar o Objeto Inteiro.
Método longoExtrair Método, Substituir Variável Temporária por Consulta, Substituir Método por Objeto Método, Decompor Condicional.
Obsessão primitivaSubstituir Atributo por Objeto, Extrair Classe, Introduzir Objeto Parâmetro, Substituir Vetor por Objeto, Substituir Enumeração por Subclasses, Substituir Enumeração pelo padrão State/Strategy.

Como pudemos ver na Tabela 01, existem diversos métodos de refatoração. Neste post, fizemos uma breve apresentação do que é refatoração, seus possíveis métodos e quando devemos utilizar.

No próximo post, Conheça os métodos mais utilizados para refatorar seu código, abordaremos com exemplos práticos os métodos mais utilizados.

Referências

FOWLER, Martin. Refatoração: aperfeiçoando o projeto do código existente. Porto Alegre: Bookman, 2004.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

1 thought on “Introdução a Refatoração de Código

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *