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

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

Programação em Java Prof. Maurício Braga
Soluções Iterativas com Laços
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Introdução à Programação Orientada à Objetos Prof. Daniel Merli Lamosa Maio de 2002.
Métodos, Parâmetros, Argumentos e Contratos
UML Modelando um sistema.
Herança, Polimorfismo e Classes Abstratas em Java
Entendendo as definições de classe
Orientação a Objetos: Modificador Final para Métodos e Classes
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Refactoring de Programas Java
Introdução ao paradigma de programação: Orientado a Objetos
Exemplos de Refactoring Alguns exemplos e considerações sobre Refactoring.
Refatoração: Melhorando a Qualidade de Código Pré-Existente
UMA ABORDAGEM SOBRE ORIENTAÇÃO A OBJETOS!
Classes e objetos P. O. O. Prof. Grace.
JAVA: Conceitos Iniciais
ES – 2º Apresentação Teórica. Rename Method O nome de um método não revela o seu propósito.Motivação Métodos devem ser chamados de uma forma que comuniquem.
Unidade I: “Dê um mergulho rápido”
Programação Orientada a Objetos com Java
Conceitos básicos de orientação a objetos
Programação Avançada Prof. Natalia Castro Fernandes
JAVA Orientação a Objetos
Padrão de Projeto Visitor
JAVA Linguagem Ambiente de Desenvolvimento
Conceitos.
Desenvolvimento de Sistemas Orientados a Aspectos
Programação Orientada à Objetos
Análise e Projeto de Sistemas
Programação I Aula 2 (Métodos)
Test Driven Development Nazareno Andrade Baseado no material do prof. Hyggo Almeida.
Entendendo as definições de classe
Chamada Remota de Procedimentos
Fase de Elaboração: Fluxo de Análise Análise de Sistemas de Software Prof. Rodrigo Ribeiro.
Linguagem de Programação JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Aspect Oriented Programming (AOP)
Java Bytecode Software Básico Mitsuo Takaki.
Técnicas de Desenvolvimento de Programas
Orientação a Objetos e Java Graduação em Ciência da Computação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
JSP e Servlets ISEP – LP2 Filipe Costa – /2004.
Implementação Orientada a Objetos – Aula 03
Programação Orientada a Objetos - Java
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Prof. Gilberto Irajá Müller
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Análise Léxica Prof. Alexandre Monteiro
Utilizando UML e Padrões Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Março de 2010.
13/11/2007 João Arthur Brunet Monteiro GMF/DSC/CEEI/UFCG Evolução de Software A Survey of Software Refactoring Reconstruction of Successful Software Evolution.
Generalização e herança Agregação e composição
Utilizando UML e Padrões Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Março de 2010.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
1 Refatoração: Melhorando a Qualidade de Código Pré-Existente Prof. Dr. Fabio Kon Departamento de Ciência da Computação IME / USP JIM ’ São Lu í.
Aula Prática 13 Orientação a Objeto Monitoria
Padrões de projeto M.Sc. Sílvio Bacalá Jr..
1 Refatoração: Melhorando o Design de Código Pré-Existente Prof. Dr. Fabio Kon Prof. Dr. Alfredo Goldman Departamento de Ciência da Computação IME / USP.
Evolução de Software e Refatoração
Módulo II Capítulo 1: Orientação a Objetos
Paradigmas da Programação – Semestre 1 – Aula 7 Professor: Eduardo Mantovani )
REFATORAÇÃO JOÃO LACERDA DJALMA LIMA. MARTIN FOWLER É um autor conhecido na área de arquitetura de software, especializado em análise orientada a objetos,
Aula 10 Adeline de Sousa Tópicos desta aula:  Problemas da duplicação de código e como eliminá-la  Aliasing  Escopo de variáveis.
Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 3: – Modelagem de Classes (parte 2)
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

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

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

Agenda Relembrar refactorings Testes de refactorings Catalogando um refactoring Novas pesquisas

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?

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.

Testes de Refactorings O testador ideal

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.

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

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.

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);

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 ****”);

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);

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.

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.

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);

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; }

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

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: http://www.databaserefactoring.com/

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

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.

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

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

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

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

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

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

Novas pesquisas em refatorações Derivando refatorings para AspectJ

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

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