Sistemas de Informação
A Engenharia de Software busca o aperfeiçoamento dos produtos de software, através de técnicas e métodos para facilitar sua reutilização, manutenção e evolução. Dentre as diversas práticas de desenvolvimento sugeridas, uma das mais consolidadas e eficientes, é a divisão de um sistema em partes para compreensão das fronteiras que definem suas funções. Essa divisão pode ser conhecida também como separação de interesses (separation of concerns). O ideal nessa abordagem seria que toda parte relacionada a um interesse fosse transportada para uma localização física separada das demais, que se relacionam a outros interesses, facilitando seu estudo e compreensão.
O paradigma de orientação a objetos emprega a separação de interesses através dos objetos, seus estados e operações, visando a redução da complexidade no desenvolvimento de software e aumentando sua produtividade. Embora a Orientação a Objetos (OO) dê suporte a essa divisão, ela ainda não é totalmente contemplada, devido aos interesses sistêmicos não serem tratados da forma adequada e muitas vezes se encontrarem espalhados por todo o sistema. Interesses sistêmicos são requisitos que não se aplicam à lógica de negócios como, por exemplo, segurança, desempenho, persistência, integridade de dados e tratamento de erros, dentre outros. Em decorrência disso, os sistemas OO mais complexos tendem a ter forte acoplamento, fraca coesão e grande redundância, o que dificulta sua compreensão, manutenção, evolução e reutilização. Quando um interesse se espalha por todo o sistema e se mistura entre outras funcionalidades, é denominado de interesse transversal, ou crosscutting concern. Como exemplo de interesses transversais pode-se citar logging, segurança, tratamento de