Upload
ruben-blenicio-tavares-silva
View
67
Download
1
Embed Size (px)
Citation preview
Programação Orientada a AspectosA L UNO : R UB E N B L E NICIOCUR SO : E NG E NHA R IA DE SO FT WA R ECA DE IR A : PR OJ E TO DE TA L HA DO DE SO FT WA R EPR OFESSOR : CAMILO ALMENDR A
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.
Aspectos versus componentes
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.
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.
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.
Implementação de Aspectos
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.
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:
o Código entrelaçado: regras de negócio misturadas com códigos de distribuição;
o Código espalhado: várias classes implementando uma funcionalidade;
o Dificuldade 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.
Exemplo de aspecto
Linguagem de AspectosA 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.
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.
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.
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.
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.
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.
O Aspecto
A linguagem AspectJ é uma extensão orientada a aspectos, de propósito geral da linguagem Java.
O AspectJ - Pointcuts
O AspectJ - Advices
Exemplo de código AspectJ
Exemplo de Código AspectJ
Referências
• Artigo: PROGRAMAÇÃO ORIENTADA A ASPECTOS - Uma Visão Geral. Alexandre Henrique Vieira Soares, Anderson de Rezende Rocha, Flávio Luís Alves, Júlio César Alves.
• Material da UFPE: http://www.cin.ufpe.br/~scbs/talp1/