1. Programação Orientada a Aspectos
ALUNO: RUBEN BLENICIO
CURSO: ENGENHARIA DE SOFTWARE
CADEIRA: PROJETO DETALHADO DE SOFTWARE
PROFESSOR: CAMILO ALMENDRA
2. Motivação
•Sistemas atuais com unidades de desenvolvimento cada vez menores e mais bem definidas;
•Linguagens de programação provêm a abstração de unidades e sua composição de diversas maneiras;
•Algumas propriedades não se enquadram em um só componente funcional: sincronização, restrições de tempo, concorrência, distribuição de objetos, persistência, etc.
3. Aspectos versuscomponentes
Propriedades do sistema que devem ser implementadas podem ser vistas como um aspecto ou como um componente:
•A propriedade pode ser vista como um componente se puder ser encapsulada em uma unidade funcional(objeto, método, procedimento). Ex: Conta, usuário, mensagem.
•Aspectos normalmente não são unidades funcionais do sistema, mas sim propriedades que estão diluídas em vários módulos do sistema. Ex: Controle de concorrência em uma conta bancária, restrições de entrega de mensagem em um sistema de tempo real.
4. Objetivo da programação orientada a aspectos
Auxiliar o desenvolvedor na tarefa de identificar e separar os componentes dos aspectos do sistema, através de técnicas que possibilitem sua abstração e composição.
5. Implementação de Aspectos
A implementação de um sistema baseado na Orientação a Aspectos é composta de:
•Uma linguagem de componentes;
•Uma ou mais linguagens de aspectos;
•Um combinador de aspectos;
•Um programa na linguagem de componentes;
•Um ou mais programas na linguagem de aspectos.
7. Componentes
•Conceitos da própria linguagem que permitem ao programador implementar as funcionalidades do sistema. Ex: Procedimentos, funções, métodos, classes.
•A Orientação a Aspectos não é restrita à orientação a objetos, ela se adapta ao modelo.
8. Aspectos
•Propriedades do sistema que não são representadas apenas por uma unidade funcional. Normalmente estão espalhadas por várias partes do código. Daí surgem alguns problemas:
oCódigo entrelaçado: regras de negócio misturadas com códigos de distribuição;
oCódigo espalhado: várias classes implementando uma funcionalidade;
oDificuldade de manutenção e reuso.
•Exemplos mais recorrentes: sincronização de objetos concorrentes, distribuição, tratamento de exceções, coordenação de múltiplos objetos, persistência, serialização, atomicidade, replicação, segurança, visualização, logging, tracing, tolerância à falhas, obtenção de métricas, dentre outras.
10. Linguagem de Aspectos
A linguagem de aspectos deve ser clara e precisa o suficiente para suportar a implementação das particularidades do sistema.
Requisitos de uma linguagem de aspectos:
•Sua sintaxe deve ser fortemente relacionada com a da linguagem de componentes;
•A linguagem deve ser projetada para especificar o aspecto com precisão.
•Sua gramática deve possuir elementos que permitam ao combinador compor os programas escritos usando as linguagens de aspectos e componentes.
11. Combinador de Aspectos
A função do combinador de aspectos é processar a linguagem de aspectos e a de componentes, estruturando essas linguagens a fim de produzir a operação desejada.
12. Técnicas de Composição: Filtros
•Filtros é uma técnica de programação orientada a aspectos onde os aspectos são expressos em filtros, de maneira declarativa, juntamente com especificações para a transformação de mensagens.
•Nesta abordagem as mensagens que chegam a um objeto são avaliadas e, se necessário, manipuladas pelos filtros que atuam sobre aquele objeto.
13. Linguagens Para Programação de Aspectos
HyperJ, QIDL, AOP/ST, linguagem de sincronização de processos, linguagem detracing, AspectJ, D, COOL, RIDL, IL, D2AL, JST, AspectIX.
14. Pointcuts, Joinpoints e Advices
•Joinpoints são pontos bem definidos na execução de um programa. Ex: Chamadas a métodos, acessos à variáveis.
•Pointcut é uma construção de linguagem que junta um conjunto de joinpoints com base em um critério bem definido.
•Completando a implementação, Advices são trechos de código que são executados antes, depois e durante a ocorrência de um Joinpoint.
15. Vantagens e Desvantagens
•Diminuição do tamanho do código dos componentes;
•Reusabilidade e manutenibilidade do código, visto que está em um só local;
•Não há um meio claro de se definir um aspecto;
•Falta de metodologias.
16. O Aspecto
Alinguagem AspectJéuma extensão orientada a aspectos, de propósito geral da linguagem Java.