Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Engenharia de SoftwareOrientada a Aspectos
Dyego Ítallo Silva Ferreira Marcos José FerreiraWeverson Fraques França
03 de Janeiro de 2013
1/36
Engenharia de Software Avançar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Roteiro1 Introdução
HistóriaPOA em outras linguagensMotivação
2 Programação Orientada a AspectosGerenciamento de interesses com POADesenvolvimento com POABenefícios esperados
3 AspectJInstalação do AspectJJoinpointsPointcutsAdivicesAspectos versus Classes
4 Modelagem de Aspectos em UML2/362/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
História
A Programação Orientada a Aspectos (POA) foicriada por Gregor Kiczales (1997) quando era ocientista da Xerox PARC (1996 – 2002)Os desenvolvedores da Xerox PARC criaram alinguagem AspectJA linguagem AspectJ é usada até hoje e é a maispopular linguaguem de POAA linguagem AspectJ é usada com Java
3/363/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
POA em outras linguagens
Linguagem AspectoJava AspectJC++ AspectC++C AspectC
Python Aspyct AOPNET AspectNET
JavaScript AjaxpectPHP PHPaspectRuby AspectRLua AspectLuaPerl The Aspect Module
4/364/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Motivação
Sistema de banco: Imagine que um banco, pediu paraque fosse feito software que gerencie todasas transações bancárias.
1 Quais os principais interesses?DepositoTransferênciaSaqueTEDDOC. . .
2 Quais os interesses secundários?Auditoria;Autorização;Persistência;. . .
5/365/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Motivação
Classificamos os interesses do software em:Concerns – Interesses primários (Núcleo do sistema)Crosscutting Concerns – Interesses transversais,que abrangem vários módulos do sistema.
6/366/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POO
Implementações OO acoplam Concerns com osCrosscutting ConcernsQuando são adicionadas ou removidasfuncionalidades, na maior parte dos casos, émodificado o núcleo do sistemaMuitas propriedades importantes espalham-se porvários módulos e misturam-se com outraspropriedades de maneira intrusiva
LimitaçãoEsses problemas dificultam a reutilização e a manutençãodos componentes do sistema.
7/367/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POO
Implementações OO acoplam Concerns com osCrosscutting ConcernsQuando são adicionadas ou removidasfuncionalidades, na maior parte dos casos, émodificado o núcleo do sistemaMuitas propriedades importantes espalham-se porvários módulos e misturam-se com outraspropriedades de maneira intrusiva
LimitaçãoEsses problemas dificultam a reutilização e a manutençãodos componentes do sistema.
7/367/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Sistema bancário: Implementar o métodoTranferenciaContas usando POO.
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor) {origem.debitar(valor);destino.creditar(valor);}
8/368/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Sistema bancário: Implementar o métodoTranferenciaContas usando POO.
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor) {origem.debitar(valor);destino.creditar(valor);}
8/368/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Verificar se o usuário possui saldo suficiente.
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor) {if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}origem.debitar(valor);destino.creditar(valor);}
9/369/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Verificar se o usuário possui saldo suficiente.
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor) {if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}origem.debitar(valor);destino.creditar(valor);}
9/369/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Verificar se o usuário possui permissão para realizara transação
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}origem.debitar(valor);destino.creditar(valor);}
10/3610/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Verificar se o usuário possui permissão para realizara transação
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}origem.debitar(valor);destino.creditar(valor);}
10/3610/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Verificar se o valor do dinheiro é negativo
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (valor < 0) {
throw new TransferenciaNegativaException();}if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}origem.debitar(valor);destino.creditar(valor);}
11/3611/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Verificar se o valor do dinheiro é negativo
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (valor < 0) {
throw new TransferenciaNegativaException();}if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}origem.debitar(valor);destino.creditar(valor);}
11/3611/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Previnir perda de dados
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (valor < 0) {
throw new TransferenciaNegativaException();}if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}
DatabaseTransacao dt = new DatabaseTransacao();
try {origem.debitar(valor);destino.creditar(valor);dt.enviar(origem, destino);
}catch(Exception e) {dt.reverter();
}}
12/3612/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Previnir perda de dadosImplementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (valor < 0) {
throw new TransferenciaNegativaException();}if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}
DatabaseTransacao dt = new DatabaseTransacao();
try {origem.debitar(valor);destino.creditar(valor);dt.enviar(origem, destino);
}catch(Exception e) {dt.reverter();
}}
12/3612/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Adicionando ao log de dados da aplicação
Implementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (valor < 0) {
throw new TransferenciaNegativaException();}if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}
DatabaseTransacao dt = new DatabaseTransacao();
try {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/3613/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOExemplo prático
Adicionando ao log de dados da aplicaçãoImplementação do método Trasferência de Contas
public void transferir(Conta origem, Conta destino, int valor){if (valor < 0) {
throw new TransferenciaNegativaException();}if (!getUsuario().hasPermissao(OP_TRANSF)){
throw new PermissaoException();}if (origem.getSaldo() < valor) {
throw new SaldoInsuficienteException();}
DatabaseTransacao dt = new DatabaseTransacao();
try {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/3613/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutençãoCódigo de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegância
O código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutençãoCódigo de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidade
O código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutençãoCódigo de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutençãoCódigo de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundante
Código de difícil manutençãoCódigo de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutenção
Código de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutençãoCódigo de difícil compreensão
Código de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Problemas da POOO que podemos extrair desse exemplo?
O código perdeu elegânciaO código perdeu simplicidadeO código da regra do negócio foi voltado paraoutros objetivos (misturado)
VerificaçõesSegurançaLog de dadosPersistência de dados
Código redundanteCódigo de difícil manutençãoCódigo de difícil compreensãoCódigo de difícil reutilização
14/3614/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Causa dos problemas da POO
Figura: [Lincoln, 2009] Projeto antes dos requisitostransversais
15/3615/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Causa dos problemas da POO
Figura: [Lincoln, 2009] Projeto depois dos requisitostransversais
16/3616/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Causa dos problemas da POO
Figura: [Lincoln, 2009] Problema multidimensinal
17/3617/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Programação Orientada a Aspectos
A programação Orientada a Aspectos (POA) é umanova metodologia que:
Separa os interesses, responsábilidades e requisistos(Concerns) de um sistemaA modularização dos Aspectos produz umaarquitetura fácil de projetar, implementar e manter
POO X POAA POA não veio para substituir a POO, e sim paracomplementá-la, pois a POA usada sozinha não trazbenefícios para o projeto de software.
18/3618/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Programação Orientada a Aspectos
A programação Orientada a Aspectos (POA) é umanova metodologia que:
Separa os interesses, responsábilidades e requisistos(Concerns) de um sistemaA modularização dos Aspectos produz umaarquitetura fácil de projetar, implementar e manter
POO X POAA POA não veio para substituir a POO, e sim paracomplementá-la, pois a POA usada sozinha não trazbenefícios para o projeto de software.
18/3618/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Gerenciamento de interesses (Concerns)
Um Concern é um requisito específico de um sistema.Existem dois tipos de Concern, são eles:
1 Core Concerns – são os requisitos dasfuncionalidades centrais de um módulo (núcleo)
2 Crosscutting Concerns – são os requistos dasfuncionalidades periférias do sistemas, onde, sãousados em diversos módulos do sistema
Em um projeto desenvolvido com POA, o engenheirodeve se preocupar durante todo o projeto com aseparação de interesses (separation of concerns).Os interesses transversais são encapsulados pelosaspectos.
19/3619/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Programação Orientada a AspectosDesenvolvimento com POA
Identificar concernsImplementar
Classes para o negócioAspectos para crosscutting concernsClasses de negócio não ficam cientes da existênciados Aspectos
Combinar concerns (weaver)Identificar crosscutting e core concerns
20/3620/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Desenvolvimento com POA
Classes – encapsulam os requisitos do sistemaAspectos – encapsulam os requisitos transversaisWeaver – acoplam os apectos e classes em umprograma
Figura: [Lincoln, 2009] Funcionamento da POA
21/3621/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Benefícios esperados
Boa modularidadeFácil desenvolvimentoFácil manutençãoFácil reutilização
Software “plug and play”;
22/3622/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJ
É uma extensão java para programar orientado aaspectosÉ um weaver para java
Pré-processadorFácil de aprender e implementar
23/3623/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Instalação do AspectJ
Para instalar o AspectJ é necessário ter a máquinavirtual Java (JDK), o ambiente de desenvolvimento(Eclipse) e o plugin para o Eclipse (AJDT);
JDK – http://www.oracle.com/technetwork/java/javase/downloads/index.html
AJDT – http://download.eclipse.org/technology/ajdt/30/update
Eclipse – http://download.eclipse.org/downloald/index.html
24/3624/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJ
1 Crosscutting estático – Modifica classes, interfacee aspectos sem modificar o comportamento doprograma.
2 Crosscutting dinâmico – Adiciona comportamentodinamicamente ao programa através de uma regraque determina a execução de uma ação.
25/3625/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJWildcards
* – sequência de caracteres sem pontos.. – sequência de caracteres+ – subclasse da classe em questão
26/3626/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJExemplo de Wildcards
pointcut finds(): call (* find*(..))findCliente();findClienteByName();findClienteByCpf();findClienteByTelefone().
27/3627/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJJoinpoints
São pontos em que os apectos interceptam as classescallexecutioninitializationpreinitializationstaticinitializationhandlergetsetargsadviceexecutionthistarget
28/3628/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectjPointcuts
São um conjunto de joinpointsDetectam quais joinpoints devem ser interceptadosPodem ter ações booleanas (!, e ||) e argumentos
Estruturapointcut nomePointcut(ListaParametros):«expressao»;
Exemplo de pointcut
pointcut traced(Person p) : target(p) &&call(public * set*(..)) ||call(public * get*(..));
29/3629/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectjPointcuts
São um conjunto de joinpointsDetectam quais joinpoints devem ser interceptadosPodem ter ações booleanas (!, e ||) e argumentosEstrutura
pointcut nomePointcut(ListaParametros):«expressao»;
Exemplo de pointcut
pointcut traced(Person p) : target(p) &&call(public * set*(..)) ||call(public * get*(..));
29/3629/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectjPointcuts
São um conjunto de joinpointsDetectam quais joinpoints devem ser interceptadosPodem ter ações booleanas (!, e ||) e argumentosEstrutura
pointcut nomePointcut(ListaParametros):«expressao»;
Exemplo de pointcut
pointcut traced(Person p) : target(p) &&call(public * set*(..)) ||call(public * get*(..));
29/3629/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJAdivices
São partes de códigos associados a pointcutsTipos
beforeafteraround
FormatipoAdvice(ListaParametros) :ListaPointCut()corpoExemplos
before(param) : pointcut(param) ...after(param) : pointcut(param) ...
30/3630/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJAdivices
São partes de códigos associados a pointcutsTipos
beforeafteraround
FormatipoAdvice(ListaParametros) :ListaPointCut()corpoExemplos
before(param) : pointcut(param) ...after(param) : pointcut(param) ...
30/3630/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJthisJoinPoint
É similar ao this do Java.Disponibiliza informações do joinpoint que estásendo usado.
Exemplo:thisJoinPoint.toString()thisJoinPoint.getArgs()
31/3631/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJthisJoinPoint
É similar ao this do Java.Disponibiliza informações do joinpoint que estásendo usado.Exemplo:
thisJoinPoint.toString()thisJoinPoint.getArgs()
31/3631/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJReuso
Da mesma forma como nas classes
Reúso
public abstract aspect AspectoMae {protected abstract pointcut PointCut_um();
// advice}
public aspect AspectoFilho extends AspectoMae{protected pointcut PointCut_um(): call(* set*(..));
}
32/3632/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJReuso
Da mesma forma como nas classesReúso
public abstract aspect AspectoMae {protected abstract pointcut PointCut_um();
// advice}
public aspect AspectoFilho extends AspectoMae{protected pointcut PointCut_um(): call(* set*(..));
}
32/3632/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJAspectos versus Classes
1 Apectos e classes são similares:Tem um tipoTrabalha com herançaSão abstrados ou concretosPodem conter atributos e métodos
2 Aspectos são diferentes das classes:Não tem construtor nem destrutorNão são criados com newPodem conter pointcuts e advices
33/3633/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
AspectJAspectos versus Classes
1 Apectos e classes são similares:Tem um tipoTrabalha com herançaSão abstrados ou concretosPodem conter atributos e métodos
2 Aspectos são diferentes das classes:Não tem construtor nem destrutorNão são criados com newPodem conter pointcuts e advices
33/3633/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Modelagem de Aspectos em UMLDiagrama de classes
pointcutadviceintroduction
Figura: Representação de um Aspecto em UML
34/3634/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Modelagem de Aspectos em UMLDiagrama de classes
pointcutadviceintroduction
Figura: Representação de um Aspecto em UML
34/3634/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Modelagem de Aspectos em UMLDiagrama de sequência
pointcuts – devem ser representados como atoresdo sistema. No caso de um pointcut se chamarteste. O ator é determinado como pointcut(teste)advices – de acordo com sua forma de execuçãoantes (before) ou depois (after) de um pointcut,devem estabelecer uma ligação com o mesmo, edeste ponto a diante definir a sequências dasoperações a serem executadasintroductions – podem ser executados normalmentea partir da inclusão de uma classe estática.
35/3635/36
Engenharia de Software AvançarVoltar
Engenharia de Software
Dyego Ítallo, MarcosJosé, Weverson França
IntroduçãoHistória
POA em outras linguagens
Motivação
Programação Orientadaa AspectosGerenciamento de interesses comPOA
Desenvolvimento com POA
Benefícios esperados
AspectJInstalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes
Modelagem deAspectos em UML
Referências
S.ROCHA, Lincloln. Introdução a poa e aspectj.Fortaleza: Ufc, 2009.GOMES, Edeyson Andrade. Programação orientadaa aspectos. Campinas: Edeyson, 2007.RESENDE, Antônio Maria Pereira de; SILVA,Claudiney Calixto da. Programação orientada aaspectos em java. Rio de Janeiro: Brasport, 2005.
36/3636/36
Engenharia de Software Voltar