Introdução ao Paradigma Orientado a Aspecto
Pontos de Junção (Join Points)
São pontos bem definidos na execução de um
programa, como a execução de um método, a execução
de um construtor, o acesso a um atributo, a
modificação do valor de um atributo, dentre
outros.
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Identificando pontos de junção
Produto
-preco: double
+getPreco(): double
+setPreco(preco: double): void
DVD
DVDBox
-Titulo: String
-contagem: int
-localizacao: String
+getTitulo(): String
+setTitulo(titulo: String): void
+getContagem(): int
+setContagem(contagem: int): void
+getLocalizacao(): String
+setLocalizacao(localizacao: String): void
1..*
-titulo: String
-titulosPacote: Vector
-contagemTotal: int
-localizacao: String
1
+criaDVDBox(nome: String): void
+adicionaDVD(dvd: DVD): void
+getLocalizacao(): String
+setLocalizacao(localizacao: String): void
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Identificando pontos de junção
Import java.util.Vector;
Public class DVDBox extends Produto{
private String titulo;
private Vector titulosPacote;
private int vontagemTotal;
private String localizacao;
public DVDBox(String titulo){
}
this.titulosPacote = new Vector();
this.contagemTotal = 0;
this.titulo = titulo;
}
public void adicionarDVD dvd){
dvd.setStatus(this.localizacao, 1);
titulosPacote.add(dvd);
this.contagemTotal++;
}
public String getTitulo(){
return this.titulo;
}
public void setTitulo(String titulo){
this.titulo=titulo;
}
public String getLocalizacao(){
return this.localizacao;
}
public void setLocalizacao(String l){
this.localizacao = l;
}
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Identificando pontos de junção
Public class ExecutorLojaDVD {
public static void main (String args[]){
DVD dvd1 = new DVD(“ O Senhor dos Anéis – Sociedade do Anel”);
DVD dvd2 = new DVD(“ O Senhor dos Anéis – Torre Gêmeas”);
DVD dvd3 = new DVD(“ O Senhor dos Anéis – O Retorno do Rei”);
DVDBox box = new DVDBox(“ O Senhor dos Anéis – Trilogia Completa”);
box.setTitulo(“O Senhor dos Anéis”);
box.adicionarDVD(dvd1);
box.adicionarDVD(dvd2);
box.adicionarDVD(dvd3);
}
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de Junção DVDBox box = new DVDBox(“Titulo”);
• Chamada do construtor para criar o objeto a partir da
classe DVDBox;
• Recepção da chamada do construtor.
conceitualmente um ponto de junção;
Esse
é
considerado
• Execução do código do construtor invocado;
• Chamada para a construção de um vetor dentro da classe
DVDBox;
• Referente ao recebimento do comando para a criação de um
objeto de vetor no construtor;
• Execução do Objeto de Vetor;
• Definição de valor para o atributo contagemTotal;
• Definição do valor para o atributo título.
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Formas de Pontos de Junção
• Ponto de junção – Chamada de métodos
• Ponto de junção – Chamada para construtor
• Ponto de junção - Execução de chamada de métodos
• Ponto de junção – Acesso a Atributos
• Ponto de junção – Definição de valores para atributos
• Ponto de junção – Tratamento de exceções
• Ponto de junção – Inicialização de classes e objetos
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de junção – Chamada de métodos
Identifica a partir de qualquer chamada para
qualquer método, ainda que a chamada seja
feita por um objeto ou até mesmo por um
método estático, como o método main().
Public static void main(String args[]){
DVDBox box = new DVDBox(“O senhor dos Anéis – Trilogia Completa”);
box.setTitulo(“O Senhor dos Anéis”);
}
Pointcut defineTitulo() : call(public void setTitulo(String) &&
target(box));
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de junção – Chamada para construtor
É definido quando este é chamado durante a
criação de um novo objeto, por meio de
utilização da palavra new.
Public static void main(String args[]){
DVDBox box = new DVDBox(“O senhor dos Anéis – Trilogia Completa”);
}
Pointcut chamadaConstrutor() : call(DVDBox.new(String));
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de junção – Execução de chamada de métodos
É definido quando um método é chamado em um
objeto e o controle é, então, transferido
para o método.
Public static void main(String args[]){
DVDBox box = new DVDBox(“O senhor dos Anéis – Trilogia Completa”);
box.setTitulo(“O Senhor dos Anéis”);
}
Pointcut recepcaoMetodoSetTitulo() :
execution(public void setTitulo(String))
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de junção – Acesso a Atributos
É definido quando um atributo associado a um
objeto é lido.
Pointcut localizacaoget() :
get(public String DVDBox.localizacao);
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de junção – Definição de valores para atributos
É definido quando um atributo, associado a um
objeto, tem o seu valor definido ou mesmo
alterado.
Pointcut localizacaoset() :
set(public String DVDBox.localizacao);
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de junção – Tratamento de exceções
Ocorre quando uma exceção for manipulada em
um bloco catch.
Pointcut handler(IOException);
Ponto de junção – Inicialização de classes e objetos
Pointcut inicializacaoEstatica : staticinicialization(DVDBox);
Pointcut inicializacao : inicialization(DVDBox.new(String));
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Pontos de Atuação (PointCut)
São elementos da Orientação a Aspectos usados para
definir um ponto de junção, como uma espécie de
regra criada pelo programador para especificar
eventos que serão atribuídos a esses pontos.
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Estrutura do ponto de atuação
<pointcut> ::= <tipo de acesso> <nome do
parâmetros> }) : { designador } [ && | || ] };
pointcut>
(
{<lista
de
<tipo de acesso> ::= public | private [abstract]
<nome do pointcut ::= { <identificador> }
<parâmetros> ::= { <identificador> <tipo> }
<designador> ::= [!]Call | execution | target | args | cflow |
cflowbelow | staticinitialization | within | if | adviceexecution |
preinitialization
<identificador> ::= letter { letter | digit }
<tipo> ::= tipos válidos do java
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Designadores do ponto de atuação
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Ponto de atuação
Public class Mensagem{
public void exibeMensagem(){
System.out.println(“Olá Mundo – Versão AspectJ”);
}
public static void main(String args[]){
Mensagem msg = new Mensagem();
msg.exibeMensagem();
}
}
Public aspect AspectoMensagem {
pointcut callExibeMensagem() : call(public void Mensagem.exibeMensagem(..));
before() : callExibeMensagem() {
System.out.println(“Antes da chamada do método exibeMensagem()”);
}
after() : callExibeMensagem() {
System.out.println(“Depois da chamada do método exibeMensagem()”);
}
}
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Adendo (advice)
Contém o código que deverá ser executado quando o
ponto de junção definido no ponto de atuação for
capturado.
Before() : criaMensagem(){
Systema.out.println(“Antes de instanciar Mensagem()”);
}
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Estrutura de um Adendo (advice)
Public aspect TesteRegistroAspecto{
// Parte 1 : especificação do ponto de atuação
public pointcut chamadaRegistro() : call(public void print*(*));
//Parte 2 : declaração do adendo
before() : chamadaRegistro(){
//Parte 3 : corpo do adendo
System.out.print(“Imprimir o Nome de um Livro”);
}
}
Prof. Carlos Eduardo
Introdução ao Paradigma Orientado a Aspecto
Os diferentes Tipos de Adendo (advice)
Tipo de Adendo
before
Descrição
Executa quando o ponto de atuação é
alcançado, mas imediatamente antes da
sua computação
Executa após a computação com sucesso do
after returning
ponto de atuação
after throwing
Executa após a computação sem sucesso do
ponto de atuação
after
Executa após a computação do ponto de
atuação, em qualquer situação
around
Executa quando o ponto de junção é
alcançado e tem total controle sobre a
sua computação.
Prof. Carlos Eduardo
Download

Introdução ao Paradigma Orientado a Aspecto São pontos bem