A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Paulo Henrique MSc. Ciência da Computação – UFC

Apresentações semelhantes


Apresentação em tema: "Paulo Henrique MSc. Ciência da Computação – UFC"— Transcrição da apresentação:

1 Paulo Henrique MSc. Ciência da Computação – UFC phmendes@gmail.com
Refactoring parte 2 Paulo Henrique MSc. Ciência da Computação – UFC

2 Antes de tudo... Todos podem ficar de 8h-12h, no dia 01/08, para workshop de padrões?

3 Agenda Relembrar refactorings Testes de refactorings
Catalogando um refactoring Novas pesquisas

4 Relembrando... O que é mesmo esse tal de refactoring?
Qual o nome do cara que escreveu o livro mais famoso no assunto? Quais as vantagens de usar refactoring? Um refactoring é composto de que mesmo? O que é refuctoring?

5 Testes de Refactorings
Os testes devem verificar a si mesmos. A saída deve ser “OK” ou lista precisa das coisas que deram errado. Quando os testes funcionam, sua saída deve ser apenas uma lista enxuta de “Oks”. Ou um botão e uma luz verde e outra vermelha.

6 Testes de Refactorings
O testador ideal

7 Catálogo de refatorações
Formato de cada entrada Nome da refatoração. Resumo da situação na qual ela é necessário e o que ele faz. Motivação para usá-la (e quando não usá-la). Mecânica, i.e., descrição passo a passo. Exemplos para ilustrar o uso.

8 Catálogo de refatorações
Exemplo Nome: Extract Method Resumo: Você tem um fragmento de código que poderia ser agrupado. Mude o fragmento para um novo método e escolha um nome que explique o que ele faz. Motivação: é uma das refatorações mais comuns. Se um método é longo demais ou difícil de entender e exige muitos comentários, extraia trechos do método e crie novos métodos para eles. Isso vai melhorar as chances de reutilização do código e vai fazer com que os métodos que o chamam fiquem mais fáceis de entender. O código fica parecendo comentário

9 Catálogo de refatorações
Exemplo (cont.) Mecânica: Crie um novo método e escolha um nome que explicite a sua intenção (o nome deve dizer o que ele faz, não como ele faz). Copie o código do método original para o novo. Procure por variáveis locais e parâmetros utilizados pelo código extraído. Se variáveis locais forem usados apenas pelo código extraído, passe-as para o novo método. Caso contrário, veja se o seu valor é apenas atualizado pelo código. Neste caso substitua o código por uma atribuição. Se é tanto lido quando atualizado, passe-a como parâmetro. Compile e teste.

10 Catálogo de refatorações
Extract Method (antes da refatoração) void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; // imprime cabeçalho System.out.println (“***************************”); System.out.println (“*** Dívidas do Cliente ****”); // calcula dívidas while (e.temMaisElementos ()){ Order cada = (Order) e.proximoElemento (); divida += cada.valor (); } // imprime detalhes System.out.println (“nome: ” + _nome); System.out.println (“divida total: ” + divida);

11 Catálogo de refatorações
Extract Method (após a refatoração) void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; imprimeCabecalho (); // calcula dívidas while (e.temMaisElementos ()){ Order cada = (Order) e.proximoElemento (); divida += cada.valor (); } //imprime detalhes System.out.println(“nome: ” + _nome); System.out.println(“divida total: ” + divida); void imprimeCabecalho () { System.out.println (“***************************”); System.out.println (“*** Dívidas do Cliente ****”);

12 Catálogo de refatorações
Extract Method (com variáveis locais) void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; imprimeCabecalho (); // calcula dívidas while (e.temMaisElementos ()){ Order cada = (Order) e.proximoElemento (); divida += cada.valor (); } imprimeDetalhes (divida); void imprimeDetalhes (divida) { System.out.println(“nome: ” + _nome); System.out.println(“divida total: ” + divida);

13 Catálogo de refatorações
Nome: Inline Method Resumo: a implementação de um método é tão clara quanto o nome do método. Substitua a chamada ao método pela sua implementação. Motivação: bom para eliminar indireção desnecessária. Se você tem um grupo de métodos mau organizados, aplique Inline Method em todos eles seguido de uns bons Extract Methods.

14 Catálogo de refatorações
Inline Method (cont.) Mecânica: Verifique se o método não é polimórfico ou se as suas subclasses o especializam Ache todas as chamadas e substitua pela implementação Compile e teste Remova a definição do método Dica: se for difícil -> não faça.

15 Catálogo de refatorações
Exemplo: antes int bandeiradaDoTaxi (int hora) { return (depoisDas22Horas (hora)) ? 2 : 1); } int depoisDas22Horas (int hora) { return hora > 22; Depois return (hora > 22) ? 2 : 1);

16 Exercício Como você definiria um refactoring que transforma um atributo público em um privado, criando seus métodos de acesso? public String name;         private String name; public String getName() { return name; } public void setName(String arg) { name = arg; }

17 Novas pesquisas em refatorações
Linhas de pesquisa Refatoração para Banco de Dados Refatoração para Padrões Refatoração para Diagramas UML Refatoração para Sistemas Orientados a Aspectos

18 Novas pesquisas em refatorações
Refatoração para Banco de Dados Pequena mudança no esquema do banco de dados que melhora seu projeto sem modificar sua semântica Catálogo com vários tipos de refactorings Estruturais: mudança na estrutura da tabela do esquema Ex: Drop Column, Rename Table Qualidade dos dados: mudança que garante ou melhora a consistência dos dados Ex: Drop Non-Nullable Constraint, Introduce Default Value DataBase Refactoring site:

19 Novas pesquisas em refatorações
Refatoração para Padrões Melhora o código existente com mudanças direcionadas para a aplicação de padrões Catálogo de 27 refatorações Ex: Extract Adapter, Inline Singleton, Replace Implict Tree with Composite

20 Novas pesquisas em refatorações
Refatoração para Diagramas UML Tiago Massoni, Rohit Gheyi, Paulo Borba. “Formal Refactoring for UML Class Diagrams”, SBES 2005 Propõem um conjunto de transformações que preservam a semântica de diagramas de classe UML com OCL. Ao aplicar as transformações propostas, projetistas de software podem, de forma segura, definir transformações maiores, alem de detectar problemas sutis ao refatorar modelos. Refatoração de modelos podem ser úteis tanto em MDA quanto para introduzir padrões de projeto.

21 Novas pesquisas em refatorações
Refatoração para Sistemas OA Problema Abstrações OO (classes, métodos, atributos) nem sempre modularizam eficientemente interesses da aplicação Interesses espalhados pelos módulos e entrelaçados com o código funcional Desenvolvimento de Software Orientado a Aspectos pode auxiliar a separação de interesses

22 Novas pesquisas em refatorações
Problema (cont.) Embora o uso de aspectos possa auxiliar na modularização de interesses desta natureza, sua adição pode introduzir problemas específicos do uso de aspectos ou similares aos que podem ser encontrados em sistemas OO, tais como trechos de código que foram abandonados em um módulo e não estão mais sendo usados, duplicações de código classes com poucas responsabilidades ou atribuições em demasia

23 Novas pesquisas em refatorações
Linhas de pesquisa Refactorings para código OA Catálogo de Monteiro e Fernandes - Towards a Catalog of Aspect-Oriented Refactorings Derivando Refactorings para AspectJ Bad smells em Sistemas AO Refatorações para Padrões em Sistemas AO

24 Novas pesquisas em refatorações
Catálogo Refactorings para extração de interesses entrecontantes

25 Novas pesquisas em refatorações
Catálogo (cont.) Refactorings para reestruturação interna de aspectos

26 Novas pesquisas em refatorações
Catálogo (cont.) Refactorings para lidar com generalização

27 Novas pesquisas em refatorações
Derivando refatorings para AspectJ

28 Novas pesquisas em refatorações
Bad smells em códigos AO

29 Novas pesquisas em refatorações
Padrões em Sistemas OA Kcizales: implementação dos padrões do GoF em AspectJ Aplicar padrões em códigos OA através de padrões


Carregar ppt "Paulo Henrique MSc. Ciência da Computação – UFC"

Apresentações semelhantes


Anúncios Google