MAC 413/5715 - Tópicos de Programação Orientada a Objetos

Trabalho de Programação Orientada a Aspectos

O trabalho, a ser feito em equipe de até quatro pessoas, consiste na aplicação de orientação a aspectos a um software já existente. A equipe tomará uma série de decisões: Cada equipe deve entregar três coisas:

Exemplo de trabalho na modalidade 1: aspectização das classes que fazem empacotamento/desempacotamento de dados no JacORB

Este exemplo de trabalho de refatoramento orientado a aspectos é colocado aqui apenas como uma sugestão voltada para as pessoas que conhecem bem o JacORB. Ele é um exemplo bastante específico, pois é fortemente vinculado ao JacORB. Para outros exemplos (bem mais gerais) de refatoramento orientado a aspectos, veja este artigo e sua continuação.

Todos os dados transmitidos/recebidos pelo JacORB devem ser empacotados/desempacotados segundo as regras da Common Data Representation (CDR) padronizada por CORBA. Duas classes fazem esse serviço: org.jacorb.orb.CDROutputStream, cuja responsabilidade é empacotar dados e escrevê-los no stream de saída, e org.jacorb.orb.CDRInputStream, cuja responsabilidade é ler dados do stream de entrada e desempacotar esses dados. A primeira dessas classes tem métodos de escrita para múltiplos tipos de dados CORBA: write_boolean, write_char, write_string, etc. A segunda classe tem os correspondentes métodos de leitura.

Certas regras da CDR correspondem logicamente a "aspectos" que intercruzam vários métodos das classes CDROutputStream e CDRInputStream. Uma dessas regras diz respeito ao alinhamento dos dados empacotados. O CDR especifica que números de 32 bits (longs ou floats) devem sempre começar num endereço (relativo ao início do buffer de escrita ou leitura) que é múltiplo de 4, que números de 64 bits (longlongs ou doubles) devem sempre começar num endereço múltiplo de 8, etc. O código que implementa essas restrições de alinhamento intercruza vários métodos das classes CDROutputStream e CDRInputStream. Ele poderia ser extraído dessas classes e substituído por um aspecto que lida com alinhamento.

Outra regra diz respeito ao "chunking" de seqüências de dados que representam objetos passados por valor. Tais seqüências podem ser divididas em pedaços ("chunks"), os quais podem ser transmitidos/recebidos individualmente. Cada "chunk" tem um cabeçalho que informa o tamanho do pedaço. O código que lida com esses "chunks" intercruza muitos métodos da classe CDRInputStream. (Digamos que algúem chamou read_long, mas o long a ser lido está bem no início de um "chunk". O método read_long precisa estar preparado para encontrar um "chunk header" antes do long.) Esse código poderia ser extraído da classe CDRInputStream e substituído por um aspecto que trata do "chunking".


Terminologia Orientada a Aspectos em Português

Página de MAC 5715
Página do Reverbel
Página do Fabio
Página do DCC