Resumo do Projeto
As Leis de Refinamento par Programação Imperativa estão bem estabelecidas e são bem úteis para guiar o desenvolvimento de software. Embora a Programação Orientada a Objetos esteja sendo usada em grande escala, as Leis de Programação Orientada a Objetos não estão bem estabelecidas, apenas algumas leis estão descritas informalmente na literatura de orientação a objetos.
Leis que justificam a prática de alguns refinamentos de classes, que são normalmente feitos apenas por intuição ou experiência dos programadores que conhecem bem os conceitos de programação orientada a objetos, são extremamente úteis para a evolução de softwares. A restruturação das classes aplicando estas leis trariam uma maior modularidade aos programas e, consequentemente, reuso e extensibilidade.
A formalização destas leis é essencial para determinar quando estas leis devem ser aplicadas, e para indicar precisamente as modificações no código resultantes da aplicação das leis.
O objetivo principal deste trabalho de iniciação científica foi descobrir, investigar e validar leis de refinamento para programação orientada a objetos, mais especificamente para a Linguagem Java. Para formalizar e validar tais leis da linguagem de programação precisamos, primeiramente, formalizar uma representação para os construtores da linguagem, esta representação deve estar de acordo com a estrutura sintática da Linguagem Java. Após ter formalizado a sintaxe da linguagem, precisamos formalizar as regras de refinamento, de modo a expressá-las de forma simples e concisa.
Este projeto visa guiar, justificar e documentar regras de orientação a objetos informais que introduzem fatores de qualidades aos programas. Focalizando leis que suportam a prática de evolução de software, tais como, padrões de análise e projeto. Mais especificamente, estas regras iram ajudar os programadores a transformar programas mal escritos em softwares confiáveis, reusáveis e extensíveis.