Este documento resume um trabalho sobre engenharia de software utilizando programação orientada a aspectos. Ele apresenta a história da POA, sua implementação em diferentes linguagens de programação, os problemas da programação orientada a objetos em separar preocupações primárias de secundárias, e exemplos práticos ilustrando como a POA pode resolver esses problemas.
1. Engenharia de Software
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens Engenharia de Software
Motivação
Programação Orientada Orientada a Aspectos
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
Dyego Ítallo Silva Ferreira Marcos José Ferreira
AspectJ
Instalação do AspectJ
Weverson Fraques França
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de 03 de Janeiro de 2013
Aspectos em UML
1/36
Engenharia de Software Avançar
2. Engenharia de Software
Roteiro
Dyego Ítallo, Marcos
José, Weverson França
1 Introdução
Introdução História
História
POA em outras linguagens
POA em outras linguagens
Motivação
Motivação
Programação Orientada
a Aspectos 2 Programação Orientada a Aspectos
Gerenciamento de interesses com
POA Gerenciamento de interesses com POA
Desenvolvimento com POA
Benefícios esperados Desenvolvimento com POA
AspectJ Benefícios esperados
Instalação do AspectJ
Joinpoints 3 AspectJ
Pointcuts
Adivices Instalação do AspectJ
Aspectos versus Classes
Modelagem de
Joinpoints
Aspectos em UML Pointcuts
Adivices
Aspectos versus Classes
4 Modelagem de Aspectos em UML
2/36
Engenharia de Software Voltar Avançar
3. Engenharia de Software
História
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
A Programação Orientada a Aspectos (POA) foi
Programação Orientada
a Aspectos criada por Gregor Kiczales (1997) quando era o
Gerenciamento de interesses com
POA cientista da Xerox PARC (1996 – 2002)
Desenvolvimento com POA
Benefícios esperados Os desenvolvedores da Xerox PARC criaram a
AspectJ
Instalação do AspectJ
linguagem AspectJ
Joinpoints
Pointcuts
A linguagem AspectJ é usada até hoje e é a mais
Adivices
Aspectos versus Classes
popular linguaguem de POA
Modelagem de A linguagem AspectJ é usada com Java
Aspectos em UML
3/36
Engenharia de Software Voltar Avançar
4. Engenharia de Software
POA em outras linguagens
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Linguagem Aspecto
Motivação
Java AspectJ
Programação Orientada
a Aspectos C++ AspectC++
Gerenciamento de interesses com
POA C AspectC
Desenvolvimento com POA
Benefícios esperados Python Aspyct AOP
AspectJ NET AspectNET
Instalação do AspectJ
Joinpoints JavaScript Ajaxpect
Pointcuts
Adivices
PHP PHPaspect
Aspectos versus Classes
Ruby AspectR
Modelagem de
Aspectos em UML Lua AspectLua
Perl The Aspect Module
4/36
Engenharia de Software Voltar Avançar
5. Engenharia de Software
Motivação
Dyego Ítallo, Marcos
José, Weverson França
Introdução Sistema de banco: Imagine que um banco, pediu para
História
POA em outras linguagens
que fosse feito software que gerencie todas
Motivação as transações bancárias.
Programação Orientada 1 Quais os principais interesses?
a Aspectos
Gerenciamento de interesses com
POA Deposito
Desenvolvimento com POA
Benefícios esperados
Transferência
AspectJ
Saque
Instalação do AspectJ TED
Joinpoints
Pointcuts
DOC
Adivices ...
Aspectos versus Classes
Modelagem de
2 Quais os interesses secundários?
Aspectos em UML
Auditoria;
Autorização;
Persistência;
...
5/36
Engenharia de Software Voltar Avançar
6. Engenharia de Software
Motivação
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
Classificamos os interesses do software em:
POA
Desenvolvimento com POA
Benefícios esperados
Concerns – Interesses primários (Núcleo do sistema)
AspectJ Crosscutting Concerns – Interesses transversais,
Instalação do AspectJ
Joinpoints
que abrangem vários módulos do sistema.
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
6/36
Engenharia de Software Voltar Avançar
7. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
Implementações OO acoplam Concerns com os
POA em outras linguagens
Motivação
Crosscutting Concerns
Programação Orientada Quando são adicionadas ou removidas
a Aspectos
Gerenciamento de interesses com funcionalidades, na maior parte dos casos, é
POA
Desenvolvimento com POA modificado o núcleo do sistema
Benefícios esperados
AspectJ Muitas propriedades importantes espalham-se por
Instalação do AspectJ
Joinpoints
vários módulos e misturam-se com outras
Pointcuts
Adivices
propriedades de maneira intrusiva
Aspectos versus Classes
Modelagem de
Aspectos em UML
7/36
Engenharia de Software Voltar Avançar
8. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
Implementações OO acoplam Concerns com os
POA em outras linguagens
Motivação
Crosscutting Concerns
Programação Orientada Quando são adicionadas ou removidas
a Aspectos
Gerenciamento de interesses com funcionalidades, na maior parte dos casos, é
POA
Desenvolvimento com POA modificado o núcleo do sistema
Benefícios esperados
AspectJ Muitas propriedades importantes espalham-se por
Instalação do AspectJ
Joinpoints
vários módulos e misturam-se com outras
Pointcuts
Adivices
propriedades de maneira intrusiva
Aspectos versus Classes
Modelagem de
Aspectos em UML
Limitação
Esses problemas dificultam a reutilização e a manutenção
dos componentes do sistema.
7/36
Engenharia de Software Voltar Avançar
9. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos Sistema bancário: Implementar o método
Gerenciamento de interesses com
POA TranferenciaContas usando POO.
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
8/36
Engenharia de Software Voltar Avançar
10. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos Sistema bancário: Implementar o método
Gerenciamento de interesses com
POA TranferenciaContas usando POO.
Desenvolvimento com POA
Benefícios esperados
Implementação do método Trasferência de Contas
AspectJ
Instalação do AspectJ
Joinpoints public void transferir(Conta origem, Conta destino, int valor) {
Pointcuts origem.debitar(valor);
Adivices destino.creditar(valor);
Aspectos versus Classes }
Modelagem de
Aspectos em UML
8/36
Engenharia de Software Voltar Avançar
11. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos Verificar se o usuário possui saldo suficiente.
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
9/36
Engenharia de Software Voltar Avançar
12. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos Verificar se o usuário possui saldo suficiente.
Gerenciamento de interesses com
POA
Desenvolvimento com POA Implementação do método Trasferência de Contas
Benefícios esperados
AspectJ public void transferir(Conta origem, Conta destino, int valor) {
Instalação do AspectJ if (origem.getSaldo() < valor) {
Joinpoints throw new SaldoInsuficienteException();
Pointcuts }
Adivices origem.debitar(valor);
Aspectos versus Classes destino.creditar(valor);
}
Modelagem de
Aspectos em UML
9/36
Engenharia de Software Voltar Avançar
13. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação
Verificar se o usuário possui permissão para realizar
Programação Orientada
a Aspectos
a transação
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
10/36
Engenharia de Software Voltar Avançar
14. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação
Verificar se o usuário possui permissão para realizar
Programação Orientada
a Aspectos
a transação
Gerenciamento de interesses com
POA
Desenvolvimento com POA Implementação do método Trasferência de Contas
Benefícios esperados
AspectJ public void transferir(Conta origem, Conta destino, int valor){
Instalação do AspectJ if (!getUsuario().hasPermissao(OP_TRANSF)){
Joinpoints throw new PermissaoException();
Pointcuts }
Adivices if (origem.getSaldo() < valor) {
Aspectos versus Classes
throw new SaldoInsuficienteException();
}
Modelagem de origem.debitar(valor);
Aspectos em UML destino.creditar(valor);
}
10/36
Engenharia de Software Voltar Avançar
15. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação Verificar se o valor do dinheiro é negativo
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
11/36
Engenharia de Software Voltar Avançar
16. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
POA em outras linguagens
Motivação Verificar se o valor do dinheiro é negativo
Programação Orientada
a Aspectos
Implementação do método Trasferência de Contas
Gerenciamento de interesses com
POA
Desenvolvimento com POA
public void transferir(Conta origem, Conta destino, int valor){
Benefícios esperados
if (valor < 0) {
AspectJ throw new TransferenciaNegativaException();
}
Instalação do AspectJ
if (!getUsuario().hasPermissao(OP_TRANSF)){
Joinpoints
throw new PermissaoException();
Pointcuts
}
Adivices
if (origem.getSaldo() < valor) {
Aspectos versus Classes
throw new SaldoInsuficienteException();
Modelagem de }
Aspectos em UML origem.debitar(valor);
destino.creditar(valor);
}
11/36
Engenharia de Software Voltar Avançar
17. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
Previnir perda de dados
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
12/36
Engenharia de Software Voltar Avançar
18. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
Previnir perda de dados
POA em outras linguagens
Motivação Implementação do método Trasferência de Contas
Programação Orientada
a Aspectos public void transferir(Conta origem, Conta destino, int valor){
Gerenciamento de interesses com
if (valor < 0) {
POA throw new TransferenciaNegativaException();
Desenvolvimento com POA }
Benefícios esperados if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();
AspectJ }
Instalação do AspectJ if (origem.getSaldo() < valor) {
Joinpoints throw new SaldoInsuficienteException();
Pointcuts }
Adivices
Aspectos versus Classes DatabaseTransacao dt = new DatabaseTransacao();
Modelagem de try {
Aspectos em UML origem.debitar(valor);
destino.creditar(valor);
dt.enviar(origem, destino);
}catch(Exception e) {
dt.reverter();
}
}
12/36
Engenharia de Software Voltar Avançar
19. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
Adicionando ao log de dados da aplicação
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
13/36
Engenharia de Software Voltar Avançar
20. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França Exemplo prático
Introdução
História
Adicionando ao log de dados da aplicação
POA em outras linguagens
Motivação Implementação do método Trasferência de Contas
Programação Orientada
a Aspectos public void transferir(Conta origem, Conta destino, int valor){
Gerenciamento de interesses com
if (valor < 0) {
POA throw new TransferenciaNegativaException();
Desenvolvimento com POA }
Benefícios esperados if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();
AspectJ }
Instalação do AspectJ if (origem.getSaldo() < valor) {
Joinpoints throw new SaldoInsuficienteException();
Pointcuts }
Adivices
Aspectos versus Classes DatabaseTransacao dt = new DatabaseTransacao();
Modelagem de try {
Aspectos em UML origem.debitar(valor);
destino.creditar(valor);
dt.enviar(origem, destino);
logger.logOperacao(OP_TRANSF, origem, destino, valor);
}catch(Exception e) {
dt.reverter();
logger.logErro(OP_TRANSF, e.getMenssage);
}
} 13/36
Engenharia de Software Voltar Avançar
21. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
14/36
Engenharia de Software Voltar Avançar
22. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
14/36
Engenharia de Software Voltar Avançar
23. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
O código perdeu simplicidade
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
14/36
Engenharia de Software Voltar Avançar
24. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
O código perdeu simplicidade
Programação Orientada
a Aspectos O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados Verificações
AspectJ Segurança
Instalação do AspectJ
Joinpoints
Log de dados
Pointcuts Persistência de dados
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
14/36
Engenharia de Software Voltar Avançar
25. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
O código perdeu simplicidade
Programação Orientada
a Aspectos O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados Verificações
AspectJ Segurança
Instalação do AspectJ
Joinpoints
Log de dados
Pointcuts Persistência de dados
Adivices
Aspectos versus Classes
Código redundante
Modelagem de
Aspectos em UML
14/36
Engenharia de Software Voltar Avançar
26. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
O código perdeu simplicidade
Programação Orientada
a Aspectos O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados Verificações
AspectJ Segurança
Instalação do AspectJ
Joinpoints
Log de dados
Pointcuts Persistência de dados
Adivices
Aspectos versus Classes
Código redundante
Modelagem de
Aspectos em UML Código de difícil manutenção
14/36
Engenharia de Software Voltar Avançar
27. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
O código perdeu simplicidade
Programação Orientada
a Aspectos O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados Verificações
AspectJ Segurança
Instalação do AspectJ
Joinpoints
Log de dados
Pointcuts Persistência de dados
Adivices
Aspectos versus Classes
Código redundante
Modelagem de
Aspectos em UML Código de difícil manutenção
Código de difícil compreensão
14/36
Engenharia de Software Voltar Avançar
28. Engenharia de Software
Problemas da POO
Dyego Ítallo, Marcos
José, Weverson França O que podemos extrair desse exemplo?
Introdução
História
POA em outras linguagens
O código perdeu elegância
Motivação
O código perdeu simplicidade
Programação Orientada
a Aspectos O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados Verificações
AspectJ Segurança
Instalação do AspectJ
Joinpoints
Log de dados
Pointcuts Persistência de dados
Adivices
Aspectos versus Classes
Código redundante
Modelagem de
Aspectos em UML Código de difícil manutenção
Código de difícil compreensão
Código de difícil reutilização
14/36
Engenharia de Software Voltar Avançar
29. Engenharia de Software
Causa dos problemas da POO
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Figura: [Lincoln, 2009] Projeto antes dos requisitos
Aspectos em UML transversais
15/36
Engenharia de Software Voltar Avançar
30. Engenharia de Software
Causa dos problemas da POO
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
Figura: [Lincoln, 2009] Projeto depois dos requisitos
transversais
16/36
Engenharia de Software Voltar Avançar
31. Engenharia de Software
Causa dos problemas da POO
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
Figura: [Lincoln, 2009] Problema multidimensinal
17/36
Engenharia de Software Voltar Avançar
32. Engenharia de Software
Programação Orientada a Aspectos
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História A programação Orientada a Aspectos (POA) é uma
POA em outras linguagens
Motivação nova metodologia que:
Programação Orientada
a Aspectos
Separa os interesses, responsábilidades e requisistos
Gerenciamento de interesses com
POA
(Concerns) de um sistema
Desenvolvimento com POA
Benefícios esperados A modularização dos Aspectos produz uma
AspectJ arquitetura fácil de projetar, implementar e manter
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
18/36
Engenharia de Software Voltar Avançar
33. Engenharia de Software
Programação Orientada a Aspectos
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História A programação Orientada a Aspectos (POA) é uma
POA em outras linguagens
Motivação nova metodologia que:
Programação Orientada
a Aspectos
Separa os interesses, responsábilidades e requisistos
Gerenciamento de interesses com
POA
(Concerns) de um sistema
Desenvolvimento com POA
Benefícios esperados A modularização dos Aspectos produz uma
AspectJ arquitetura fácil de projetar, implementar e manter
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
POO X POA
Aspectos versus Classes
A POA não veio para substituir a POO, e sim para
Modelagem de
Aspectos em UML complementá-la, pois a POA usada sozinha não traz
benefícios para o projeto de software.
18/36
Engenharia de Software Voltar Avançar
34. Engenharia de Software
Gerenciamento de interesses (Concerns)
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
Um Concern é um requisito específico de um sistema.
POA em outras linguagens Existem dois tipos de Concern, são eles:
Motivação
Programação Orientada 1 Core Concerns – são os requisitos das
a Aspectos
Gerenciamento de interesses com
funcionalidades centrais de um módulo (núcleo)
POA
Desenvolvimento com POA
Benefícios esperados
2 Crosscutting Concerns – são os requistos das
AspectJ
funcionalidades periférias do sistemas, onde, são
Instalação do AspectJ
Joinpoints
usados em diversos módulos do sistema
Pointcuts
Adivices
Em um projeto desenvolvido com POA, o engenheiro
Aspectos versus Classes
deve se preocupar durante todo o projeto com a
Modelagem de
Aspectos em UML separação de interesses (separation of concerns).
Os interesses transversais são encapsulados pelos
aspectos.
19/36
Engenharia de Software Voltar Avançar
35. Engenharia de Software
Programação Orientada a Aspectos
Dyego Ítallo, Marcos
José, Weverson França Desenvolvimento com POA
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Identificar concerns
Gerenciamento de interesses com
POA Implementar
Desenvolvimento com POA
Benefícios esperados
Classes para o negócio
AspectJ Aspectos para crosscutting concerns
Instalação do AspectJ Classes de negócio não ficam cientes da existência
Joinpoints
Pointcuts dos Aspectos
Adivices
Aspectos versus Classes Combinar concerns (weaver)
Modelagem de Identificar crosscutting e core concerns
Aspectos em UML
20/36
Engenharia de Software Voltar Avançar
36. Engenharia de Software
Desenvolvimento com POA
Dyego Ítallo, Marcos
José, Weverson França
Introdução
Classes – encapsulam os requisitos do sistema
História
POA em outras linguagens Aspectos – encapsulam os requisitos transversais
Motivação
Programação Orientada
Weaver – acoplam os apectos e classes em um
a Aspectos programa
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
Figura: [Lincoln, 2009] Funcionamento da POA
21/36
Engenharia de Software Voltar Avançar
37. Engenharia de Software
Benefícios esperados
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos Boa modularidade
Gerenciamento de interesses com
POA
Desenvolvimento com POA Fácil desenvolvimento
Benefícios esperados
AspectJ
Fácil manutenção
Instalação do AspectJ
Joinpoints
Fácil reutilização
Pointcuts
Software “plug and play”;
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
22/36
Engenharia de Software Voltar Avançar
38. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
É uma extensão java para programar orientado a
POA
Desenvolvimento com POA
aspectos
Benefícios esperados
É um weaver para java
AspectJ
Instalação do AspectJ Pré-processador
Joinpoints
Pointcuts Fácil de aprender e implementar
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
23/36
Engenharia de Software Voltar Avançar
39. Engenharia de Software
Instalação do AspectJ
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Para instalar o AspectJ é necessário ter a máquina
Programação Orientada virtual Java (JDK), o ambiente de desenvolvimento
a Aspectos
Gerenciamento de interesses com
(Eclipse) e o plugin para o Eclipse (AJDT);
POA
Desenvolvimento com POA JDK – http://www.oracle.com/technetwork/
Benefícios esperados
AspectJ
java/javase/downloads/index.html
Instalação do AspectJ
Joinpoints
AJDT – http://download.eclipse.org/
Pointcuts
Adivices
technology/ajdt/30/update
Aspectos versus Classes
Eclipse – http://download.eclipse.org/
Modelagem de
Aspectos em UML downloald/index.html
24/36
Engenharia de Software Voltar Avançar
40. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
1 Crosscutting estático – Modifica classes, interface
Gerenciamento de interesses com
POA e aspectos sem modificar o comportamento do
Desenvolvimento com POA
Benefícios esperados
programa.
AspectJ
Instalação do AspectJ
2 Crosscutting dinâmico – Adiciona comportamento
Joinpoints dinamicamente ao programa através de uma regra
Pointcuts
Adivices que determina a execução de uma ação.
Aspectos versus Classes
Modelagem de
Aspectos em UML
25/36
Engenharia de Software Voltar Avançar
41. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Wildcards
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA * – sequência de caracteres sem pontos
Benefícios esperados
AspectJ .. – sequência de caracteres
Instalação do AspectJ
Joinpoints + – subclasse da classe em questão
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
26/36
Engenharia de Software Voltar Avançar
42. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Exemplo de Wildcards
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA pointcut finds(): call (* find*(..))
Desenvolvimento com POA
Benefícios esperados findCliente();
AspectJ findClienteByName();
Instalação do AspectJ
Joinpoints
findClienteByCpf();
Pointcuts findClienteByTelefone().
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
27/36
Engenharia de Software Voltar Avançar
43. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Joinpoints
Introdução São pontos em que os apectos interceptam as classes
História
POA em outras linguagens call
Motivação
Programação Orientada
execution
a Aspectos
Gerenciamento de interesses com
initialization
POA
Desenvolvimento com POA preinitialization
Benefícios esperados
AspectJ
staticinitialization
Instalação do AspectJ
Joinpoints
handler
Pointcuts
Adivices
get
Aspectos versus Classes
set
Modelagem de
Aspectos em UML args
adviceexecution
this
target
28/36
Engenharia de Software Voltar Avançar
44. Engenharia de Software
Aspectj
Dyego Ítallo, Marcos
José, Weverson França Pointcuts
Introdução
História
POA em outras linguagens
Motivação
São um conjunto de joinpoints
Programação Orientada Detectam quais joinpoints devem ser interceptados
a Aspectos
Gerenciamento de interesses com
POA
Podem ter ações booleanas (!, e ||) e argumentos
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
29/36
Engenharia de Software Voltar Avançar
45. Engenharia de Software
Aspectj
Dyego Ítallo, Marcos
José, Weverson França Pointcuts
Introdução
História
POA em outras linguagens
Motivação
São um conjunto de joinpoints
Programação Orientada Detectam quais joinpoints devem ser interceptados
a Aspectos
Gerenciamento de interesses com
POA
Podem ter ações booleanas (!, e ||) e argumentos
Desenvolvimento com POA
Benefícios esperados Estrutura
AspectJ
Instalação do AspectJ
pointcut nomePointcut(ListaParametros):
Joinpoints «expressao»;
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
29/36
Engenharia de Software Voltar Avançar
46. Engenharia de Software
Aspectj
Dyego Ítallo, Marcos
José, Weverson França Pointcuts
Introdução
História
POA em outras linguagens
Motivação
São um conjunto de joinpoints
Programação Orientada Detectam quais joinpoints devem ser interceptados
a Aspectos
Gerenciamento de interesses com
POA
Podem ter ações booleanas (!, e ||) e argumentos
Desenvolvimento com POA
Benefícios esperados Estrutura
AspectJ
Instalação do AspectJ
pointcut nomePointcut(ListaParametros):
Joinpoints «expressao»;
Pointcuts
Adivices
Aspectos versus Classes
Exemplo de pointcut
Modelagem de
Aspectos em UML pointcut traced(Person p) : target(p) &&
call(public * set*(..)) ||
call(public * get*(..));
29/36
Engenharia de Software Voltar Avançar
47. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Adivices
Introdução
História
POA em outras linguagens
Motivação
São partes de códigos associados a pointcuts
Programação Orientada Tipos
a Aspectos
Gerenciamento de interesses com before
POA
Desenvolvimento com POA after
Benefícios esperados
around
AspectJ
Instalação do AspectJ Forma
Joinpoints
Pointcuts
tipoAdvice(ListaParametros) :
Adivices
Aspectos versus Classes
ListaPointCut()corpo
Modelagem de
Exemplos
Aspectos em UML
30/36
Engenharia de Software Voltar Avançar
48. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Adivices
Introdução
História
POA em outras linguagens
Motivação
São partes de códigos associados a pointcuts
Programação Orientada Tipos
a Aspectos
Gerenciamento de interesses com before
POA
Desenvolvimento com POA after
Benefícios esperados
around
AspectJ
Instalação do AspectJ Forma
Joinpoints
Pointcuts
tipoAdvice(ListaParametros) :
Adivices
Aspectos versus Classes
ListaPointCut()corpo
Modelagem de
Exemplos
Aspectos em UML
before(param) : pointcut(param) ...
after(param) : pointcut(param) ...
30/36
Engenharia de Software Voltar Avançar
49. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França thisJoinPoint
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
É similar ao this do Java.
POA
Desenvolvimento com POA Disponibiliza informações do joinpoint que está
Benefícios esperados
AspectJ
sendo usado.
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
31/36
Engenharia de Software Voltar Avançar
50. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França thisJoinPoint
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
a Aspectos
Gerenciamento de interesses com
É similar ao this do Java.
POA
Desenvolvimento com POA Disponibiliza informações do joinpoint que está
Benefícios esperados
AspectJ
sendo usado.
Instalação do AspectJ
Joinpoints
Exemplo:
Pointcuts
Adivices
thisJoinPoint.toString()
Aspectos versus Classes thisJoinPoint.getArgs()
Modelagem de
Aspectos em UML
31/36
Engenharia de Software Voltar Avançar
51. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Reuso
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
Da mesma forma como nas classes
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
32/36
Engenharia de Software Voltar Avançar
52. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Reuso
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
Da mesma forma como nas classes
a Aspectos
Reúso
Gerenciamento de interesses com
POA
Desenvolvimento com POA
public abstract aspect AspectoMae {
Benefícios esperados
protected abstract pointcut PointCut_um();
AspectJ
// advice
Instalação do AspectJ
}
Joinpoints
Pointcuts
public aspect AspectoFilho extends AspectoMae{
Adivices
protected pointcut PointCut_um(): call(* set*(..));
Aspectos versus Classes
Modelagem de }
Aspectos em UML
32/36
Engenharia de Software Voltar Avançar
53. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Aspectos versus Classes
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
1 Apectos e classes são similares:
a Aspectos
Gerenciamento de interesses com
Tem um tipo
POA
Desenvolvimento com POA
Trabalha com herança
Benefícios esperados
São abstrados ou concretos
AspectJ Podem conter atributos e métodos
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
33/36
Engenharia de Software Voltar Avançar
54. Engenharia de Software
AspectJ
Dyego Ítallo, Marcos
José, Weverson França Aspectos versus Classes
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada
1 Apectos e classes são similares:
a Aspectos
Gerenciamento de interesses com
Tem um tipo
POA
Desenvolvimento com POA
Trabalha com herança
Benefícios esperados
São abstrados ou concretos
AspectJ Podem conter atributos e métodos
Instalação do AspectJ
Joinpoints
Pointcuts
2 Aspectos são diferentes das classes:
Adivices Não tem construtor nem destrutor
Aspectos versus Classes
Não são criados com new
Modelagem de
Aspectos em UML Podem conter pointcuts e advices
33/36
Engenharia de Software Voltar Avançar
55. Engenharia de Software
Modelagem de Aspectos em UML
Dyego Ítallo, Marcos
José, Weverson França Diagrama de classes
Introdução
História
pointcut
POA em outras linguagens
Motivação
advice
Programação Orientada introduction
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
34/36
Engenharia de Software Voltar Avançar
56. Engenharia de Software
Modelagem de Aspectos em UML
Dyego Ítallo, Marcos
José, Weverson França Diagrama de classes
Introdução
História
pointcut
POA em outras linguagens
Motivação
advice
Programação Orientada introduction
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem de
Aspectos em UML
Figura: Representação de um Aspecto em UML
34/36
Engenharia de Software Voltar Avançar
57. Engenharia de Software
Modelagem de Aspectos em UML
Dyego Ítallo, Marcos
José, Weverson França Diagrama de sequência
Introdução
História
POA em outras linguagens
Motivação pointcuts – devem ser representados como atores
Programação Orientada
a Aspectos
do sistema. No caso de um pointcut se chamar
Gerenciamento de interesses com
POA
teste. O ator é determinado como pointcut(teste)
Desenvolvimento com POA
Benefícios esperados advices – de acordo com sua forma de execução
AspectJ antes (before) ou depois (after) de um pointcut,
Instalação do AspectJ
Joinpoints devem estabelecer uma ligação com o mesmo, e
Pointcuts
Adivices deste ponto a diante definir a sequências das
Aspectos versus Classes
operações a serem executadas
Modelagem de
Aspectos em UML introductions – podem ser executados normalmente
a partir da inclusão de uma classe estática.
35/36
Engenharia de Software Voltar Avançar
58. Engenharia de Software
Referências
Dyego Ítallo, Marcos
José, Weverson França
Introdução
História
POA em outras linguagens
Motivação
Programação Orientada S.ROCHA, Lincloln. Introdução a poa e aspectj.
a Aspectos
Gerenciamento de interesses com
Fortaleza: Ufc, 2009.
POA
Desenvolvimento com POA GOMES, Edeyson Andrade. Programação orientada
Benefícios esperados
AspectJ
a aspectos. Campinas: Edeyson, 2007.
Instalação do AspectJ
Joinpoints
RESENDE, Antônio Maria Pereira de; SILVA,
Pointcuts
Adivices
Claudiney Calixto da. Programação orientada a
Aspectos versus Classes
aspectos em java. Rio de Janeiro: Brasport, 2005.
Modelagem de
Aspectos em UML
36/36
Engenharia de Software Voltar