Refactoring as formal refinements / Refactoring as formal refinements

AUTOR(ES)
DATA DE PUBLICAÇÃO

2004

RESUMO

A reestruturaÂc~ao de programas no contexto da orientaÂc~ao a objeto Âe tambÂem conhecida como refactoring e consiste em mudanÂcas na estrutura interna de um software, sem modiÂcar seu com- portamento externo, a Âm de melhorar sua legibilidade e tornÂa-lo mais fÂacil de passar por futuras mudanÂcas. Na prÂatica, refactoring baseia-se em compilaÂc~ao e testes para assegurar a preservaÂc~ao do comportamento. Trabalhos como os de Opdyke e Roberts foram realizados com vistas Âa formalizaÂc~ao de refac- torings por meio da identiÂcaÂc~ao de condiÂc~oes que devem ser satisfeitas para assegurar que uma mudanÂca num programa preserva o comportamento do mesmo. As condiÂc~oes, geralmente escritas na linguagem do cÂalculo de predicados, s~ao introduzidas como prÂe e pÂos-condiÂc~oes dos refactor- ings. Outras abordagens para a prova de preservaÂc~ao do comportamento de refactorings usam formalismos como anÂalise conceitual e reescritura de grafos. Contudo, n~ao hÂa tÂecnica algÂebrica que apresente refactorings como transformaÂc~oes que preservam o comportamento, com prova deste fato. Nossa principal contribuiÂc~ao constitui-se na apresentaÂc~ao de refactorings como transformaÂc~oes de programas escritos em rool (ReÂnement object-oriented Language), uma linguagem baseada em Java, com classes, controle de visibilidade, ligaÂc~ao din^amica, e recurs~ao. A linguagem rool permite que raciocinemos sobre programas orientados a objetos e especiÂcaÂc~oes, pois a mesma une estas construÂc~oes como no cÂalculo de reÂnamentos de Morgan. A sem^antica de rool Âe baseada em weakest preconditions. Um conjunto de leis de programaÂc~ao estÂa disponÂÂvel tanto para os comandos imperativos de rool quanto para construtores relacionados Âa orientaÂc~ao a objetos. A prova, na sem^antica de rool, de que tais leis s~ao corretas, Âe tambÂem uma contribuiÂc~ao do presente trabalho. Apresentamos refactorings como regras algÂebricas de reÂnamento envolvendo programas. A prova da preservaÂc~ao do comportamento Âe realizada pela aplicaÂc~ao de leis de programaÂc~ao a um lado da regra a Âm de obtermos o lado oposto. NÂos generalizamos a tÂecnica padr~ao de reÂnamento de dados a Âm de lidar com hierarquia de classes. Neste trabalho tambÂem apresentamos como obter um sistema estruturado segundo um padr~ao de projeto, por meio da aplicaÂc~ao de regras de refactoring. Padr~oes de projeto constituem-se num objetivo natural para a realizaÂc~ao de transformaÂc~oes por meio da aplicaÂc~ao de refactorings. Trabalhos presentes na literatura sobre padr~oes de projeto que prop~oem a formalizaÂc~ao dos mesmos, em geral, concentram-se em suas descriÂc~oes formais, n~ao na transformaÂc~ao de um sistema com vistas a estruturÂa-lo de acordo com padr~oes de projeto. TambÂem apresentamos a transformaÂc~ao de uma aplicaÂc~ao monolÂÂtica para uma aplicaÂc~ao estruturada segundo um padr~ao arquitetural

ASSUNTO(S)

refactoring - software mudanÃas na estrutura insoftware â transformaÃÃo de programas programaÃÃo orientada a objetos â reestruturaÃÃo refinamento formal ciencia da computacao

Documentos Relacionados