Os dispositivos computacionais estÃo se tornando ubÃquos.

Com um celular, atualmente, podemos acessar e manipular informaÃÃao praticamente em qualquer lugar e a qualquer instante.

Neste cenÃrio de computaÃÃo ubÃqua, tem-se exigido que tais sistemas sejam adaptativos, ou seja, tenham a capacidade de se adaptar em decorrÃncia de mudanÃas no contexto em que estÃo inseridos.

à importante destacar, porÃm, que a adaptabilidade adiciona certa complexidade ao desenvolvimento de aplicaÃÃes.

Um dos problemas à que a implementaÃÃo de comportamentos adaptativos em muitos casos se entrelaÃa com outras preocupaÃÃes da aplicaÃÃo, como apresentaÃÃo, negÃcio e dados, levando a problemas de legibilidade que podem prejudicar a manutenabilidade do cÃdigo.

A programaÃÃo orientada a aspectos pode ser usada para facilitar a resoluÃÃo de problemas relacionados a cÃdigo entrelaÂcado, e dar suporte ao desenvolvimento de programas adaptativos, e ao mesmo tempo adaptÃveis (fÃceis de modificar) com bons nÃveis de qualidade e produtividade.

Essa dissertaÃÃo mostra como podemos usar aspectos, em especial em AspectJ, para estruturar aplicaÃÃes adaptativas, minimizando dessa forma o entrelaÃamento de cÃdigo.

AspectJ Ã uma linguagem orientada a aspectos, de propÃsito geral, e que estende a linguagem Java.

Ela à voltada à separaÃÃo de preocupaÃÃes.

Em nosso trabalho ela à utilizada para promover a separaÃÃo da preocupaÃÃo âadaptabilidadeâ, obtendo-se assim uma implementaÃÃo modular.

AtravÃs do uso dessa linguagem, identificamos boas prÃticas para a estruturaÃÃo de aplicaÃÃes adaptativas, as quais foram resumidas em um padrÃo denominado Adaptability Aspects.

Escolhemos a plataforma Java 2 Micro Edition para implementar vÃrias preocupaÃÃes relativas a adaptabilidade, principalmente pelo fato de ser uma tecnologia destinada a dispositivos ubÃquos e com recursos limitados.

AlÃm de AspectJ, analisamos tambÃm uma outra abordagem para a estruturaÃÃo de aplicaÃÃes adaptativas: o uso do estilo arquitetural denominado âAdaptive Object- Modelsâ.

Verificamos a partir dessa anÃlise que ele poderia ser combinado com o nosso padrÃo, e portanto, beneficiar-se com o uso de aspectos.

Dessa forma, poderia-se oferecer suporte a um conjunto maior de adaptaÃÃes e ao mesmo tempo obter-se uma estruturaÃÃo no cÃdigo mais fÃcil de compreender.

Por fim, avaliamos o impacto de AspectJ, atravÃs do uso do padrÃo Adaptability Aspects, para implementar alguns requisitos de adaptabilidade em aplicaÃÃes J2ME.

Comparamos nossa implementaÃÃo com uma soluÃÃo em que a implementaÃÃo destes requisitos nÃo à tÃo modular e com uma outra soluÃÃo utilizando padrÃes de projeto puramente orientados a objeto na qual se buscava tal modularidade.

Alguns dos aspectos comparados foram tempo de execuÃÃo, memÃria utilizada, tamanho da aplicaÃÃo e de seu cÃdigo.

AlÃm de medir tais fatores, descrevemos os ganhos que a programaÃÃo orientada a aspectos pode trazer para a estruturaÃÃo de aplicaÃÃes adaptativas visando obter qualidade em termos de reuso e facilidade de manutenÃÃo