130 likes | 259 Views
Refactoring em Programação Funcional. Thiago Henrique Braga T. L. P.: Programação Funcional DCC – ICEx – UFMG Professor: Carlos Camarão. Sumário. Artigo: A Case Study in Refactoring Functional Programs Simon Thompson (SBLP 2003) Refactorings Estudo de Caso
E N D
Refactoring em Programação Funcional Thiago Henrique Braga T. L. P.: Programação Funcional DCC – ICEx – UFMG Professor: Carlos Camarão
Sumário • Artigo: • A Case Study in Refactoring Functional Programs • Simon Thompson (SBLP 2003) • Refactorings • Estudo de Caso • Exemplo usando o Haskell Refactorer
Artigo • Investigar as oportunidades de uso de refactoring em programas funcionais • Estudo de caso: programa Haskell de 400 linhas escrito por um aluno de graduação • Características e considerações • Documentação de refactorings • Projeto: Refactoring Functional Programs • HaRe: The Haskell Refactorer
Refactoring • Processo de alterar a estrutura do programa sem modificar sua funcionalidade • Ciclo de implementação de um programa • Identificação de paradigmas • Regras para resolver problemas semelhantes • Tarefa complicada • Código pode estar espalhado em vários módulos • Justificativa para tornar o processo automático
Refactoring • Características: • Difusa • Bidirecional • Suporte para refactorings • Editor de texto • Verificador de tipos • Testar e testar novamente • Ferramentas sofisticadas • Fazer refactoring • Desfazer
Estudo de Caso • Semantic Tableaux • Programa escrito por um iniciante em Haskell • Uso de: • Um tipo algébrico - Prop • Funções recursivas • Poucas funções já definidas • Uma função utiliza List-Comprehension
Seqüência de Refactorings • Mais importantes: 1) Criar tipos sinônimos 2) Renomeação de funções com nomes mais sugestivos 3) Funções que fazem recursão sobre listas: usar funções de ordem superior 4) Nem todas as funções puderam ser reestruturadas diretamente 5) Alteração da representação dos dados
Documentação de Refactorings • Catálogo de Fowler • Criação de um catálogo • Descrição • Pré-condições • Exemplos • Possíveis problemas • Primitivo ou composto
HaReThe Haskell Refactorer 1) GeneraliseDef
HaReThe Haskell Refactorer 2) GeneraliseDef
HaReThe Haskell Refactorer 3) Rename
HaReThe Haskell Refactorer 4) IntroNewDef
HaReThe Haskell Refactorer 5) LiftToTopLevel