AspectJ. AspectJ. Extensões de AspectJ. Pontos de Junção. Exemplos de Pontos de Junção. Modelo de Pontos de Junção

Documentos relacionados
Agenda da Aula. Desenvolvimento de Software Orientado a Aspectos. Aspectos... Motivação. Um pouco de história. Programação Estruturada

2 Desenvolvimento de Software Orientado a Aspectos

By Gian Ricardo Berkenbrock & Eduardo Dockhorn da Costa

Seminário de aspectos: conceitos, características e exemplos

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

9 Classes Abstractas e Interfaces

Linguagem de Programação II Implementação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Idiomas de Programação

DCC / ICEx / UFMG. Membros de Classes. Eduardo Figueiredo.

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Minicurso do Simpósio Brasileiro de Engenharia de Software - SBES Sérgio Soares

Classes e Objetos. Sintaxe de classe em Java

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

AspectJ - Programação Orientada a Aspectos em Java. Sérgio Soares Centro de Informática Universidade Federal de Pernambuco

POO e suas Limitações Introdução POA AspectJ: Conceitos Básicos. Objetivo da Programação? Introdução à OO Introdução à POO

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

AspectJ. Silvio do Lago Pereira. Doutorando em Ciência da Computação

Instituto de Informática Estrutura de Dados II

JBoss AOP para quem já conhece AspectJ

Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Java para Desktop. Programação Orientada à Objetos 2 JSE

Programação Orientada a Aspectos

Orientação a Objetos e Java

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE)

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Aspectos para Construção de Aplicações Distribuídas

Linguagem de Programação. Diagrama de classes

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Palavras Reservadas da Linguagem Java

Implementando um Projeto. Programação em Java. Do Projeto para Implementação. Classe Pública em Java. Corpo de Classes e Métodos. Convenção de Nomes

Threads. O que é uma Thread? Paralelismo

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Classe Abstrata e Interface

Tratamento de Exceções

Programação Orientada a Objetos II

Programação Java (nível intermediário) 4. Polimorfismo

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

4 Diretrizes para o Projeto e Implementação de Frameworks usando Orientação a Aspectos

Análise de Programação

Estrutura de Dados Funções e Procedimentos

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Algoritmos I Aula 13 Linguagem de Programação Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Avoiding code pitfalls in Aspect-Oriented Programming


Linguagem de Programação IV Introdução

Programação por Objectos. Java

Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Avoiding Code Pitfalls in Aspect-Oriented Programming

ESQUEMA AULA PRÁTICA 1

ESQUEMA AULA PRÁTICA 1

Tela Principal do ArgoUML. ArgoUML: Diagrama de Casos de Uso. Elementos do diagrama. Criar um novo diagrama. Elementos do diagrama

!!!!! " #!!!! $ +!!!!!! *!! * -! %!! - %.! % - "!! ) $ $ / - %!!0$ 1 - '& 2( - *! * *!0$ - '&.( - *! #

COMPORTAMENTOS - Observações

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Herança e Polimorfismo

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Tipos, Literais, Operadores

Tipos, Literais, Operadores

4 Desenvolvimento de Software Orientado a Aspectos

Linguagem de Programação II Importando Classes/Pacotes

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Java Deployment Course

Relacionamentos entre objetos

Linguagem de Programação II Implementação

Introdução à Programação. Encapsulamento e Herança

Programação Orientada por Objectos 2007/2008

Strings e Arrays POO

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

Programação por Objectos. Java

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Programação por Objectos. Java

Linguagem de Programação III

4 Conceito de Herança

Programação Orientada a Objetos II

Teste de Programas Orientados a Aspectos: Uma Abordagem Estrutural para AspectJ

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Interfaces POO. Prof. Marcio Delamaro

Transcrição:

DCC / ICEx / UFMG AspectJ AspectJ Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Linguagem orientada a aspectos mais madura e difundida Extensão simples da linguagem Java Gera arquivos.class compatíveis com a máquina virtual Java (JVM) Possui bom suporte de ferramenta AspectJ Development Tools (AJDT) Integrado a plataforma Eclipse Extensões de AspectJ Pontos de Junção Pontos de Corte Pontos de Junção Adendos Declarações Intertipo Modelo de Pontos de Junção Define como e onde será feita a junção entre classes e aspectos Exemplos Chamada a métodos e construtores Execução de métodos e construtores Instanciação de objetos Acesso e atualização de dados, etc. Exemplos de Pontos de Junção Chamadas ao método creditar da classe Conta call(void Conta.creditar(double)) Acessos para leitura do atributo numero na classe Conta get(string Conta.numero)

Quantificação Podemos usar coringas para indicar mais pontos de junção Maior expressividade Tipos de coringas * denota qualquer tipo e qualquer quantidade de caractere + denota qualquer subclasse da classe.. denota qualquer quantidade de parâmetros Exemplos de Quantificação Todas as chamadas a qualquer método da classe Cliente que tenham apenas um parâmetro e retorne void call(void Cliente.*(*)) Todas as chamadas a métodos começando com set e qualquer quantidade de parâmetros na classe Conta call(* Conta.set*(..)) Outros Exemplos Chamadas a qualquer método set* da classe Conta e suas subclasses call(* Conta+.set*(..)) Acessos de leitura de qualquer atributo da classe Cliente com tipo String get(string Cliente.*) Acessos de escrita a qualquer atributo de qualquer classe (de todo o sistema) set(* *.*) Ponto de Corte Ponto de Corte Um ponto de corte é um conjunto de pontos de junção Meio de identificar pontos de junção Pontos de junção podem ser compostos usando operadores lógicos && (and) intercepta um ponto quando ambas as condições são satisfeitas (or) intercepta um ponto quando uma das condições é satisfeita! (not) intercepta todos os pontos que não estão negados na condição Exemplos de Composição Chamadas à métodos set das classes Cliente ou Conta (anônimos) call(* Cliente.set*(*)) call(* Conta.set*(*)) Ou equivalente (nomeados) pointcut setcliente() : call(* Cliente.set*(*)) pointcut setconta() : call(* Conta.set*(*)) pointcut sets() : setcliente() setconta()

Voltando ao exemplo de Logging Definindo Pontos de Corte Palavra reservada que identifica um ponto de corte Queremos separar o código em vermelho que implementa logging Definindo Pontos de Corte Exemplos de Contas Todas as chamadas ao método creditar de todas as classes de nome começando com Conta Todas as chamadas ao método debitar de todas as classes de nome começando com Conta Adendo Adendo Especifica o código que será executado quando um ponto de corte for atingido O adendo pode ser executado Antes do ponto de corte (before) Depois do ponto de corte (after) Antes e depois do ponto de corte (around)

Definindo um Adendo Variações do Adendo After After returning É interceptado quando o método retorna normalmente sua execução O código do adendo será executado após cada chamada ao método creditar After throwing É interceptado quando o método retorna uma situação excepcional (exception) Exemplos de adendo After Expondo o Contexto Pontos de corte podem expor alguns valores para a execução do adendo args() parâmetros de chamadas de métodos target() objeto que recebe a chamada do método ou acesso ao atributo this() objeto que efetua a chamada ao método ou acesso ao atributo Exemplo de Uso (target) Exemplo de Uso (args) Conta que recebeu a chamada Valor do crédito (parâmetro de creditar) Imprime o número da conta Imprime o valor creditado

Adendo do tipo Around Substitui o ponto de junção interceptado proceed() permite executar o ponto interceptado Declaração Intertipo Declarações Intertipo Ponto de corte e adendo afetam o comportamento dinâmico do sistema AspectJ também fornece mecanismos para alterar a estrutura estática Tipos de declarações intertipo Introduzir membros (métodos, atributos e construtores) Modificar a hierarquia de herança Exemplos: Introduzir Membros private float Conta.chequeEspecial; Introduz um novo atributo chamado chequeespecial do tipo float na classe Conta Introduz um novo método main na classe Conta Exemplos: Modificar a Herança A classe Conta passa a estender ContaAbstrata Exemplos de Aspectos A classe Conta passa a implementar a interface Serializable declare parents banco.entidades.* implements Serializable; Toda classe e interface do pacote banco.entidades passa a estender/implementar Serializable

Aspecto O aspecto Logging Entidade modular semelhante a uma classe Além de métodos e atributos, reúne também pontos de corte, adendos e declarações intertipo Um aspecto pode interceptar uma ou várias classes do sistema Tem como objetivo implementar um interesse transversal Classes implementam os interesses centrais Outro Exemplo (Java) Aspecto Logging: Opção 1 public class ATM { Código da classe ATM que possui código relacionado a Logging private int displaymainmenu() { screen.displaymessageline( "\nmain menu:" ); screen.displaymessageline( "1 - View my balance" ); screen.displaymessageline( "2 - Withdraw cash" ); screen.displaymessageline( "3 - Deposit funds" ); screen.displaymessageline( "4 - Exit\n" ); screen.displaymessage( "Enter a choice: " ); int option = keypad.getinput(); Logger.log("User option: " + option); return option; public aspect Logging { public pointcut displaymainmenupc() : call (private int ATM.displayMainMenu()); after() returning (int option): displaymainmenupc() { Logger.log("User option: " + option); Código parcial do aspecto Logging O aspecto Logging pega o retorno da chamada ao método displaymainmenu O que fazer com esta classe? Aspecto Logging: Opção 2 public class Logger { private static Vector<String> logs = new Vector<String>(); public static void log(string text) { logs.add(text); Código da classe Logger public static void printlog() { for (int i=0; i<logs.size(); i++) System.out.println( logs.get(i) ); Este código pode ser movido para o aspecto Logging, certo? public aspect Logging { private Vector<String> logs = new Vector<String>(); private static final int LOG = 0; public void log(string text) { O código da classe Logger foi logs.add(text); movido para o aspecto Logging public pointcut displaymainmenupc() : call (private int ATM.displayMainMenu()); after() returning (int option): displaymainmenupc() { log("user option: " + option); Código parcial do aspecto Logging

Aspecto Logging: Opção 3 Bibliografia Principal public aspect Logging extends Logger { public pointcut displaymainmenupc() : call (private int ATM.displayMainMenu()); after() returning (int option): displaymainmenupc() { log("user option: " + option); Código parcial do aspecto Logging Aspectos podem herdar de outra classe ou de outro aspecto. R. LADDAD. AspectJ in Action, 2ª Ed. 2010. Part 1 Understanding AOP and AspectJ Sergio Soares. Programação Orientada a Aspectos com AspectJ. Minicurso CBSoft 2010.