[en] FROM OBJECTS TO AGENTS: AN ASPECT ORIENTED APPROACH - ALESSANDRO FABRICIO GARCIA (2004)
[pt] Agentes de software incorporam várias propriedades específicas, como autonomia, adaptação, interação, aprendizagem e mobilidade. A inclusão dessas propriedades de agência é uma das maiores fontes de complexidade na construção de sistemas multiagentes. Dificilmente elas são modularizadas com abstrações e mecanismos da engenharia de software orientada a objetos. À medida que a complexidade da arquitetura interna dos agentes aumenta, essas propriedades tendem a se espalhar através dos vários módulos ou objetos do sistema. O espalhamento é observado desde fases preliminares de desenvolvimento, como a fase de definição arquitetural. O uso de abstrações e mecanismos existentes conduz ao projeto e à implementação de sistemas multiagentes que são difíceis de manter e reutilizar. Este trabalho apresenta uma abordagem orientada a aspectos para o desenvolvimento de sistemas baseados em agentes. A abordagem provê suporte para modularização e composição das propriedades de agência por meio de abstrações e mecanismos do paradigma orientado a aspectos. Além disso, tais propriedades são incorporadas de forma transparente à funcionalidade básica do sistema de software, desde a fase de definição arquitetural. A abordagem compreende três componentes: (i) um método arquitetural, (ii) uma linguagem de padrões e (iii) um framework para avaliação quantitativa. O método e a linguagem apresentam um conjunto de soluções orientadas a aspectos para a definição arquitetural, projeto e implementação de agentes de software. O framework define um conjunto de métricas e um modelo de qualidade que permite a avaliação empírica da nossa abordagem em termos de reusabilidade e manutenibilidade. Estudos experimentais qualitativos e quantitativos foram realizados para avaliar nossa proposta em diferentes domínios de aplicação. Os resultados empíricos concluíram que nossa abordagem permite a construção de sistemas baseados em agentes com modularização superior, menor acomplamento, menos linhas de código e menor complexidade interna dos componentes.