Esse artigo faz parte da revista Java Magazine edição 44. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.imagem_pdf.jpg

Refatoração no Eclipse

Mantendo e melhorando a qualidade do código

Conheça diversos recursos do IDE Eclipse para refatoração, uma das atividades mais utilizadas no desenvolvimento de software OO, e um dos pilares dos processos ágeis

Durante o ciclo de vida de desenvolvimento e manutenção de produtos de software, as modificações no código fonte podem levar à queda da qualidade em relação ao projeto inicial. Essa perda de qualidade é geralmente causada por modificações com objetivos de curto prazo (como correções de defeitos), ou por alterações realizadas sem a clara compreensão da concepção do sistema. O problema pode ser também causado pela necessidade de mudanças no design da aplicação devido à inclusão de novos requisitos. Por exemplo, o desenvolvedor pode perceber que determinada classe está complexa demais.

Refatorar é o oposto a essa prática. Com ela é possível, a partir de um projeto que esteja possivelmente num estado de deterioração, transformá-lo em um código bem projetado e capaz de suportar novas mudanças com pouco impacto. A refatoração, portanto, é um processo de alteração de um sistema de software de modo que o comportamento externo do sistema não mude, mas que sua estrutura interna seja aperfeiçoada. Em essência, quando se usam técnicas de refatoração, tende-se a melhorar o código-fonte após este ter sido escrito e modificado. Além disso, através da refatoração removem-se duplicidades, melhora-se a comunicação da equipe, e simplificam-se e flexibilizam-se rotinas, facilitando a manutenção e evitando a inclusão de novos defeitos.

As refatorações são pontuais e modificam o código em pequenos passos de cada vez. Assim, se um erro é cometido, torna-se mais fácil consertá-lo. O efeito cumulativo dessas pequenas alterações pode melhorar consideravelmente a qualidade do produto.

A versão 3.2 do ambiente de desenvolvimento Eclipse apresenta formas rápidas e eficientes para refatoração, além de outros recursos de apoio, como visualização de históricos e criação de scripts de refatorações já realizadas. Estes serão os assuntos abordados neste artigo.

Refatorações com o Eclipse

No IDE Eclipse, no menu Refactor (Figura 1), ou no menu de contexto no editor de código, observam-se as possíveis operações de refatoração disponíveis no Eclipse 3.2.

 

Figura 1. Menu Refactor do Eclipse 3.2.

Através de exemplos práticos, pode-se ilustrar o uso de algumas destas operações. Assim, utilizaremos fragmentos de código de um sistema de Locação de Veículos. Esses trechos de código contêm situações indesejáveis, propositadamente inseridas, que serão corrigidas através do uso de refatorações. 

Extract Superclass

Código duplicado é um dos “maus cheiros” de código citados entre os problemas comuns em código-fonte. Uma forma de código duplicado são duas classes fazendo coisas muito semelhantes. Para resolver esse problema pode-se usar a refatoração Extract Superclass, que tira proveito da herança de classes. Observando as Listagens 1 e 2, nota-se a necessidade da refatoração. São mostrados fragmentos de duas classes, Caminhao e Automovel, contendo características semelhantes como ano, marca, modelo, nroChassi e placa.

Vale salientar, porém, que a duplicação de pouco código (como um único atributo) pode não ser motivo suficiente para aplicar essa refatoração. Em caso de dúvida, verifique se as classes em questão possuem alguma semântica em comum (no exemplo, tanto Caminhao quanto Automovel são veículos).

 

Listagem 1. Casse Caminhao

public class Caminhao {

  private Integer nroEixos;   

  private String ano;

  private String marca;

  private String modelo;

  private String nroChassi;

  private String placa;

  

  public Double getValor() { return 50.00; }  

  public Integer getNroEixos() { return nroEixos;  }

  public void setNroEixos(int nroEixos) { this.nroEixos = nroEixos; }

  public String getAno () { return ano; }

  public void setAno (String ano) { this.ano = ano; }

  public String getMarca() { return marca; }

  public void setMarca(String marca) { this.marca = marca; }

  public String getModelo() { return modelo; }

  public void setModelo(String modelo) { this.modelo = modelo; }

  public String getNroChassi() { return nroChassi; }

...

Quer ler esse conteúdo completo? Tenha acesso completo