Anterior
Próximo
Extract Methodpublicado em 02/12/2009
Na prova discursiva do BNDES deste ano,
caiu uma questão sobre refatoração de código e não fiquei surpreso ao ver que a mesma falava sobre o processo Extract Method.
Refatoração ou Refactoring é o processo de
melhorar a estrutura interna de um código sem alterar seu comportamento externo. Além da melhora no entendimento do código, refatorar significa facilitar a
manutenção, aumentar a reutilização, baixar o acoplamento.
Existem muitos outros processos de refactoring ( Rename, Encapsulate Field, Split Loop etc. ) mas o Extract Method é o mais comum deles.
O processo de extração de método consiste em mover um fragmento de código para um novo método que represente melhor a ação pretendida. Métodos longos e
com muitas responsabilidades fatalmente necessitam ser separados em métodos menores que façam a penas o que devem fazer.
Vamos dar uma olhada no exemplo clássico de
aplicação do Extract Method:
private void MostarDivida(double valor)
{
MostrarCabecalho();
// mostrar detalhes
Console.WriteLine("nome:" + _nome);
Console.WriteLine("valor:" + valor);
}
Sem muito pensar, percebemos que podemos e devemos refatorar o código separando em um novo método a ação que mostra os detalhes da dívida.
private void MostarDivida(double valor)
{
MostrarCabecalho();
MostrarDetalhes(valor);
}
private void MostrarDetalhes(double valor)
{
Console.WriteLine("nome:" + _nome);
Console.WriteLine("valor:" + valor);
}
Costumo dizer que um código bem escrito se auto documenta, se um determinado trecho de código necessita ser comentado para que outras pessoas entendam
sua função, então é provável que estejamos de frente a um bom cenário para a aplicação de Extract Method.
Abaixo segue mais um exemplo simples onde temos um método que é responsável informar se um determinado aluno passou ou não de ano.
public void MostrarAprovacao(double nota1, double nota2)
{
double media = (nota1 + nota2) /2;
if (media > 7)
Console.Write("Passou de ano !");
else
Console.Write("Não passou de ano !");
}
Podemos perceber que o método não está realizando apenas a função de mostrar aprovação. Temos um calculo de média e uma condição que julga se o aluno
passou ou não de ano.
No código abaixo, já refatorado, os métodos tem apenas uma responsabilidade.
public void MostrarAprovacao(double nota1, double nota2)
{
double media = CalcularMedia(nota1,nota2);
Console.WriteLine(PassouDeAno(media));
}
private double CalcularMedia(double nota1, double nota2)
{
return (nota1 + nota2) / 2;
}
private string PassouDeAno(double media)
{
if (media > 7)
return "Passou de ano !";
else
return "Não passou de ano !";
}
O Visual Studio fornece algumas formas de fazer refactoring, basta selecionar o código, clicar com o botão direito e no menu Refactor escolher o tipo de
refatoração a ser feita.

Tags:
-
3/12/2009 12:44 - Otávio
Muito bom, também fiz esta prova mas errei esta questão :(
Na próxima acerto ! hehe
-
3/12/2009 14:35 - Felipe Carvalho
Fala Diogo! Parabéns pelo artigo. Muito bom mesmo!
-
3/12/2009 14:37 - Luiza Jardim
Na prova discursiva do BNDES deste ano... Parabéns, Di!
-
23/1/2010 17:30 - Robson
Diogo, Fiz a prova do BNDES e nesta questão perdi 1 ponto.
Ela era metade uma tabela verdade que não tenho como ter errado e a outra era essa que vc colocou no artigo.
Fiz um pouco diferente do que está no exemplo, pois fiz:
void printOwing(int amount)
{
printBanner();
printString("name: " + _name);
printString("amount " + amount);
}
void printString(string texto)
{
System.out.println(texto);
}
Esta sintaxe não está correta?