Modularização de interesses ortogonais

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Programação Orientada a Objetos*
Programação Orientada a Objetos*
Paulo Marques Hernâni Pedroso
Reflexão Marco Antonio Arquiteto de Software Novembro/2007.
Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Orientação a Objetos: Modificador Final para Métodos e Classes
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA APLICADA DISCIPLINA DE SISTEMA ORIENTADOS A OBJETOS PROGRAMAÇÃO ORIENTADA.
Programação Básica em Java
Projeto Arquitetural de Software Orientado a Aspectos
Professora: Aline Vasconcelos
Programação Orientada a Aspectos
Polimorfismo e Classes Abstratas Profa
Programação Concorrente
Wagner Santos C. de Jesus
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
PROGRAMAÇÃO ORIENTADA A ASPECTOS EM JAVA Introdução a conceitos teóricos e práticos Adriano G. do Prado José Eduardo M. Lemos José Fernando da S. Cruz.
Como o AspectJ tece o código
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
Bruno Rafael de Oliveira Rodrigues. Tratadores de Excessões A exceção é uma indicação de que um erro ou problema aconteceu durante a execução de uma aplicação.
Tipos Agregados Homogêneos e Listas
Programação Orientada a Objetos com Java
Aula prática 13 Orientação a Objetos – C++ Parte 1
A NÁLISE Q UANTITATIVA DA I MPLEMENTAÇÃO DE T RATAMENTO DE E XCEÇÕES NA L INGUAGEM P TOLEMY Aluno: Cleivson Arruda Orientador: Fernando Castor T RABALHO.
Singleton e Adapter Professor: Nazareno Andrade
P ROGRAMAÇÃO ORIENTADA A ASPECTOS Equipe: Leandro Oliveira Anusio Menezes.
Programação Orientada a Aspectos
Desenvolvimento de Sistemas Orientados a Aspectos
Desenvolvimento de Sistemas Orientados a Aspectos
Interfaces.
Programação I Aula 2 (Métodos)
Chamada Remota de Procedimentos
Desenvolvimento de Aplicações CORBA
Classes, Objetos, Atributos e Métodos JAVA
Linguagens de Programação II Aula 04 – Entendendo Classes
Aspect Oriented Programming (AOP)
Professora Lucélia Oliveira
Orientação a Objetos Parte I
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Prof. Roberto Rosa Aula 8.  A partir de agora vamos aprender como ver qual é o erro que está acontecendo em nosso projeto. Para.
Linguagem II Exceções.
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Orientação a Objetos Parte II
Tratamento de Exceções
Programação Orientada a Objetos - Java
Programação Orientada à Objetos
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Classes Abstratas e Interface
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Linguagem orientada a Aspectos 2 Luiz Carlos d’Oleron Tiago Vinícius.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Projeto de PLP (2005.1) Extensão da Linguagem OA1 (2003.1) Alunos: Alberto Costa Neto (acn) Manoel Messias da Silva Menezes Júnior (mmsmj) Rafael Leão.
Factory.
Equipe Equipe: Ana Carolina M. Pilatti Igor de Souza Paiva Igor de Souza Paiva Rafael Stubs Parpinelli Rafael Stubs Parpinelli Vera Lúcia Marchiori Vera.
Capítulo 15 – Tratamento de Exceções
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1.
Introdução a AOP + SpringAOP Jobson Ronan
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Modularização de interesses ortogonais AspectJ Modularização de interesses ortogonais Heliomar Kann da Rocha Santos

Sumário Introdução Aplicação Conclusão O que é POA História Terminologias Construções Modelagem Aplicação Controle Transacional Execução de Buscas genéricas em DAO Padrões de projeto com aspectj Auditoria e log de eventos Outras aplicações Tratamento de Exceções Declaração de erros e warnings Implementação default de interfaces Conclusão Conclusão e trabalhos futuros

Introdução – O que é POA

Introdução – Composição POA Linguagem de componentes: Java, C++.. Programas escritos em linguagem de componentes Linguagem de aspectos: AspectJ.. Programas escritos em linguagem de aspectos Combinador de aspectos: aspect weaver

Introdução - História Criada em 1997 Xerox Palo Alto Research Center PARC Atualmente é um projeto Eclipse Modularização de interesses difíceis em POO

Introdução - Terminologia Interesses Ortogonais

Introdução - Terminologia Interesses Ortogonais Interesses

Introdução - Construções Aspect Abstração criada para conter o código de interesses ortogonais em um local separado Semelhança com o “class”, porém não é instanciável Composto por : Join Points Pointcuts Advices,

Introdução - Construções Join Points (Ponto de Junção) Pontos bem definidos do código Chamadas a métodos, construtores Execuções de métodos Inicialização e pré-inicialização de Classes Atribuições

Introdução - Construções Pointcut (Ponto de atuação) Delimita pontos de junção aos quais algum aspecto provavelmente será aplicado Estrutura pointcut nomePointcut(ListaParametros) : ListaDesignadores Ex.: pointcut construtores() : call(* *.new(..)); pointcut construtores2() : construtores() && !within(Pessoa) ;

Introdução - Construções Pointcut (Ponto de atuação) Designadores de pointcut call(Assinatura) – métodos e construtores execution(Assinatura) – métodos e construtores within(Padrão Tipo) – Classe ou tipo em tempo de compilação withincode(Padrão Tipo) – Interno a um método em tempo de compilação args(Padrão Tipo) – Argumentos descritos em “Padrão Tipo”

Introdução - Construções Pointcut (Ponto de atuação) Designadores de pointcut target(Padrão Tipo) – Objeto na qual se encontra a implementação do ponto de junção em tempo de execução Ex: pointcut abc() : execution(* getPessoa*(..)) && target(PessoaService) this(Padrão Tipo) - Objeto na qual se encontra o ponto de junção em tempo de execução Ex: pointcut abc() : execution(* getPessoa*(..)) && this(PessoaService) || this(FuncionarioService)

Introdução - Construções Wildcards (Caracteres curingas) “*” Qualquer seqüência de caracteres não contendo pontos “..” Qualquer seqüência de caracteres, inclusive contendo pontos “+” Qualquer subclasse da classe em questão

Introdução - Construções Pointcuts genéricos call (* set*(..)) execution(public * Pessoa.*(..)) call(* dao..*(..)) call(PessoaDAO+.new(..))

Introdução - Construções Advices (Adendos) Três tipos: Before Mais simples After After - Sempre depois do ponto de junção After Returning – Somente se o método não lançar exceções After Throwing – Somente se o método ter lançado uma exceção Around (entorno de) Mais poderoso Pode escolher entre executar o método original Execução do método através da construção proceed()

Introdução - Construções Advices (Adendos) Estrutura tipoAdvice(ListaParametros) : ListaPointCut(){corpo} Ex1: before() : call( String *.toString()){ imprime(“Antes de entrar no método toString”); } Ex2: pointcut metodosToString() : call(String *.toString()); String around() : metodosToString() { return proceed().toUpperCase(); }

Introdução - Modelagem

Aplicação - Controle Transacional Transação Controle Transacional

Aplicação - Controle Transacional Controle de Transação com Proxy

Aplicação - Controle Transacional Controle de Transação com AspectJ

Aplicação - Controle Transacional Controle de Transação com AspectJ pointcut transacao(): (@Transacional * *.*(..)); before() : transacao(){ JPAUtil.beginTransaction(); } after()returning : transacao() { JPAUtil.commitTransaction(); JPAUtil.closeEntityManager(); after() throwing : transacao() { JPAUtil.rollbackTransaction();

Aplicação – Buscas Genéricas Anotações Criadas @MetodoRecuperaLista @MetodoRecuperaUltimo @MetodoRecuperaPrimeiro @MetodoRecuperaConjunto @MetodoResultadoUnico

Aplicação – Buscas Genéricas Buscas genéricas com Proxy

Aplicação – Buscas Genéricas Buscas genéricas com AspectJ

Aplicação – Buscas Genéricas Mudanças Necessárias DAOImpl deixa de ser Abstrata public Pessoa getByLogin(String login) { throw new MetodoInterceptadoException( "Esse método deve ser implementado via aspecto"); }

Aplicação – Buscas Genéricas pointcut buscaLista(JPADaoGenerico dao) : call(@MetodoRecuperaLista * *.*(..)) && target(dao); Object around(JPADaoGenerico dao): buscaLista(dao){ Signature sig = thisJoinPointStaticPart.getSignature(); Method metodo = ((MethodSignature)sig).getMethod(); return dao.buscaLista( metodo, thisJoinPoint.getArgs(), metodo.getAnnotation( MetodoRecuperaLista.class) .namedQuery()); }

Aplicação – Padrão de Projeto Singleton Anotação criada - @Singleton ... private Map singletons = new Hashtable(); Object around() : call( (@Singleton+ *).new(..) ) { Class singleton = thisJoinPoint.getSignature().getDeclaringType(); if(singletons.get(singleton)==null){ singletons.put(singleton, proceed()); } return singletons.get(singleton);

Aplicação – Padrão de Projeto … @Singleton public class PessoaService { public PessoaService(){ }

Aplicação – Auditoria e Log de Eventos … pointcut services(): execution (public * br.uff.iduff2.service..*.*(..)) && !execution(* ..service.controletransacao..*.*(..)) && !execution(List br.uff.iduff2.service..*.*(..)) &&!execution(* IdentificacaoService.autenticar(..)); pointcut autenticar(): execution(* IdentificacaoService.autenticar(..));

Aplicação – Outras aplicações Tratamento de Exceções 1________________________________________________________ before(): handler(RuntimeException){ System.out.println("Exceção="+thisJoinPoint.getArgs()[0]); } 2________________________________________________________ declare soft : InterruptedException : withincode(* Principal.main(..)); 3________________________________________________________ after() throwing(Throwable t) throws InfraestruturaException: execution(* dao..*.*(..)){ throw new InfraestruturaException(t);

Aplicação – Outras aplicações Declaração de erros e warnings Erros declare error: call( java.util.*.new(..) ): "Não é permitido instanciar objetos da biblioteca [java.util] "; Warnings declare warning: call( dao..*.new(..) ) && !within(service..*): "Essa construção deve ocorrer em um Server";

Aplicação – Conclusão Simplicidade Evitar uso excessivo Necessidade de manutenção Competitividade Trabalhos futuros Plugin perfeitamente integrado com IDEs Identificação de interesses ortogonais com IA

Dúvidas?