Home

"AOP enables clean modularization of crosscutting concerns, such as error checking and handling, synchronization, context-sensitive behavior, performance optimizations, monitoring and logging, debugging support, and multi-object protocols"

Projeto apresentado como parte da avaliação da disciplina Paradigmas de Linguagens de Computação do curso de Pós-Graduação em Ciências da computação do Centro de Informática da Universidade Federal de Pernambuco.

Sobre o projeto

A Programação Orientada a Objetos (POO) define-se como o paradigma que possibilita uma melhoria na abstração de dados nos sistemas, bem como sua modularização, característica cada vez mais desejável nos softwares atuais. Embora a POO forneça diversas vantagens, a crescente complexidade dos sistemas criou a necessidade de implementações que os tornassem realmente modulares. Com esse intuito, surgiu o paradigma da Programação Orientada a Aspectos (POA). A POA estende a POO permitindo que código emaranhado seja evitado através da separação ortogonal dos conceitos chave e dos outros conceitos que permeavam o código [Kiczales, 1997]. Diversas extensões foram criadas para as linguagens de programação atualmente utilizadas, permitindo a programação orientada a aspectos. Elas incluem desde linguagens funcionais [Andrade, 2005] até orientadas a objetos [Kickzales, 2001]. AspectJ é uma extensão de Java que permite a POA através de transformações de código [Birrer, 2004]. Existem diversas ferramentas open source que podem ser agregadas aos ambientes de desenvolvimento que facilitam a programação utilizando AspectJ. A disciplina de Paradigmas de Linguagens de Programação, do curso de Pós-graduação em Ciência da Computação da Universidade Federal de Pernambuco [PLP, 2006], tem como objetivo propiciar aos alunos o aprendizado de conceitos básicos de linguagens de programação, uma visão geral dos paradigmas de programação e sua possível integração. Para isso, um framework open source codificado em Java foi desenvolvido. Ele contém a implementação de linguagens de programação de vários paradigmas, permitindo execução via interpretação.

O trabalho aqui descrito tem como objetivo reestruturar o framework de linguagens existente utilizando AspectJ. Tal reestruturação permite uma maior modularização do código permitindo a ortogonalização de conceitos que permeiam diversas entidades chave do sistema. Além disso, a realização do trabalho visa também permitir o aprendizado da POA por parte dos alunos que irão participar da implementação. A Figura 1 ilustra o processo de reestruturação do framework utilizando aspectos. Nela ão utilizadas como exemplo as classes ExpSoma e ValorString, que representam a adição de dois valores e um valor do tipo cadeia de caracteres, respectivamente.

Dois conceitos foram identificados como elementos intrusivos ao código, representados na versão atual do framework através dos métodos de avaliação e verificação de tipos. A reestruturação será feita de forma a estabelecer o conceito-chave, a checagem de tipos e a avaliação como conceitos ortogonais, como ilustrado na Figura 2.

Além disso, o framework sofreu alterações em sua estrutura, passando a utilizar o padrão de projeto Visitor ao invés de Interpreter.