Top Banner
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 da Fonseca (rlf)
45

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.

Apr 07, 2016

Download

Documents

Luiza Santa Ana
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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.

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 da Fonseca (rlf)

Page 2: 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.

Agenda

• BNF/API de OA1• Ambientes de Execução e Compilação• Extensões da Linguagem OA1

1. Acrescentar Join Points para leitura/escrita de atributos2. Introdução de atributos e métodos3. Implementação do operador not em PointcutExpressao4. Implementação de cflow e cflowbelow5. Implementação de within e withincode6. Uso de Matching na definição de Pointcuts7. Advice com pointcut anônimo8. Inclusão de objeto thisJoinPoint

• Conclusões• Trabalhos Futuros

Page 3: 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.

BNF/API de OA1

Page 4: 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.

Ambientes de Execução e Compilação

Page 5: 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.

Ambiente de Execução

• Componentes herdados de LOO1– uma pilha de mapeamentos de identificadores

(incluindo this) em valores (incluindo referências).– um mapeamento de referências em objetos.– a referência para a próxima célula a ser alocada.– um mapeamento de identificadores em definições de

classes.– listas de valores de entrada e saída.

• Componentes adicionais– Gerenciador de aspectos.– Pilha de interceptáveis (join points).

Page 6: 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.

Ambiente de Execução

• Gerenciador de Aspectos– Mapeamento de identificador de pointcut em

pointcut– Mapeamento de identificador de pointcut em

um grupo de advices

Page 7: 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.

Ambiente de Compilação

• Componentes herdados de LOO1– uma pilha de mapeamentos de identificadores

em tipos.– um mapeamento de identificadores em

definições de classes.– listas de valores de entrada.

Page 8: 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.

Extensão da Linguagem OA1

Page 9: 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.

Extensão da linguagem OA1

Propostas1. Acrescentar Join Points para leitura/escrita de

atributos2. Introdução de atributos e métodos3. Implementação do operador not em

PointcutExpressao4. Implementação de cflow e cflowbelow5. Implementação de within e withincode6. Uso de Matching na definição de Pointcuts7. Inclusão de objeto thisJoinPoint8. Modificar advice para usar PointcutExpressao

ao invés de um simples Id (advice com pointcut anônimo)

Page 10: 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.

classe Ponto {int x = 0, int y = 0;proc setX(int x) { this.x := x },proc setY(int y) { this.y := y},proc mover(int offsetX, int offsetY) {

this.x := this.x + offsetX;this.y := this.y + offsetY

},proc printX() { write(“x:” ++ this.x) },proc printY() { write(“y:” ++ this.y) },

proc print() { printX(); printY() }}

Extensão da linguagem OA1

Page 11: 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.

Extensão da linguagem OA1

1. Introdução dos Join Points (get e set)– get: Captura leitura de um atributo– set: Captura modificação de um atributo

aspect PontoLog {pointcut leitura: get(Ponto.x),pointcut escrita: set(Ponto.x);

after : leitura { write(“leitura de Ponto.x”) },after : escrita { write(“escrita em Ponto.x”) }

};

Page 12: 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.

Extensão da linguagem OA1

2. Introdução de atributos e métodosaspect PontoLog {

proc Ponto.moverX(int offsetX) {this.x := this.x + offsetX

},proc Ponto.moverY(int offsetY) {

this.y := this.y + offsetY}

}

Page 13: 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.

Extensão da linguagem OA1

3. Implementação do operador not em PointcutExpressao

• Negação de qualquer PointcutExpressao.

Page 14: 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.

Extensão da linguagem OA1

4. Implementação de cflow e cflowbellow – cflow(Pointcut): intercepta qualquer join

point no fluxo de controle de qualquer join point P interceptado por Pointcut, incluindo P.

aspect PontoLog { pointcut noFluxoDePrint: cflow(Ponto.print()); before : noFluxoDePrint {

write("JP no fluxo de controle de print()")}

};

Page 15: 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.

Extensão da linguagem OA1

– cflowbelow(Pointcut): intercepta qualquer join point no fluxo de controle de qualquer join point P interceptado por Pointcut, sem incluir P.

aspect PontoLog { pointcut noFluxoDePrint: cflowbelow(Ponto.print()); before : noFluxoDePrint {

write("JP no fluxo de controle abaixo de print()")}

};

Page 16: 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.

Extensão da linguagem OA1

• Pilha / Cache de Join PointsPilha de Join Points Cache de Join Points

Page 17: 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.

Extensão da linguagem OA1

1. Chamada à Ponto.print()

Ponto.print()

Pilha de Join Points

Ponto.print() = 1

Cache de Join Points

Page 18: 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.

Extensão da linguagem OA1

2. Execução do Advice de PontoLog

Ponto.print()

Pilha de Join Points

Ponto.print() = 1

Cache de Join Points

PontoLog

PontoLog = 1

Page 19: 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.

Extensão da linguagem OA1

3. Fim da execução do Advice

Ponto.print()

Pilha de Join Points

Ponto.print() = 1

Cache de Join Points

Page 20: 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.

Extensão da linguagem OA1

4. Chamada a Ponto.printX()

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

Page 21: 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.

Extensão da linguagem OA1

5. Execução do Advice de PontoLog

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

PontoLog

PontoLog = 1

Page 22: 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.

Extensão da linguagem OA1

6. Fim da execução do Advice

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

Page 23: 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.

Extensão da linguagem OA1

7. Acesso a Ponto.x

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

Ponto.x

Ponto.x = 1

Page 24: 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.

Extensão da linguagem OA1

8. Execução do Advice de PontoLog

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

Ponto.x

Ponto.x = 1PontoLog

PontoLog = 1

Page 25: 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.

Extensão da linguagem OA1

9. Fim da execução do Advice

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

Ponto.x

Ponto.x = 1

Page 26: 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.

Extensão da linguagem OA1

10. Remoção de Acesso a Ponto.x

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()

Ponto.print() = 1

Page 27: 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.

Extensão da linguagem OA1

11. Remoção de Chamada a Ponto.printX()

Ponto.print()

Pilha de Join Points Cache de Join Points

Ponto.print() = 1

Page 28: 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.

Extensão da linguagem OA1

12. Chamada à Ponto.printY()– Executa de forma similar à chamada de

Ponto.printX().– Intercepta dois join points: Ponto.printY() e

get(Ponto.y), executando o advice de PontoLog duas vezes.

Page 29: 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.

Extensão da linguagem OA1

13. Remoção de Chamada a Ponto.print()Pilha de Join Points Cache de Join Points

Page 30: 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.

Extensão da linguagem OA1

5. Implementação de within e withincode– within(PadrãoCasamento) : intercepta os

join points nos quais o código em execução é definido na declaração de um dos tipos de PadrãoCasamento.

– withincode(PadrãoCasamentoMetodo) : intercepta cada join point onde o código em execução é definido na declaração do método especificado.

Page 31: 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.

Extensão da linguagem OA1{ aspect PontoLog {

pointcut noFluxoDePrintEForaDePontoLog: cflow(Ponto.print()) and not within(PontoLog),

pointcut withincodePrint: withincode(Ponto.print());

before : noFluxoDePrintEForaDePontoLog {write(“No fluxo de controle de print() e not Within PontoLog”)

},

before : withincodePrint {write("Withincode Ponto.print()")

}}

Page 32: 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.

Extensão da linguagem OA1

• Uso da pilha– Within: Checa o nome da classe/aspecto do join

point que está abaixo do elemento no topo da pilha– Withincode: Checa o join point que está abaixo do

elemento no topo da pilha, que deve ser uma chamada de método e casar com a fornecida

Ponto.print()

Pilha de Join Points

Ponto.printX() = 1

Cache de Join Points

Ponto.printX()Ponto.print() = 1

Page 33: 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.

Extensão da linguagem OA1

6. Uso de Matching na definição de Pointcuts

aspect PontoLog {pointcut movimento:Ponto.se*(*) or

Ponto.mover(..);after : movimento {

write(“O ponto mudou de posicao.")};

Page 34: 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.

Extensão da linguagem OA1

• Exemplos de Matching– get/set/cflow(below)

• get(*.*), get(*.x), get(Ponto.*), get(P*.*), get(*o.*), get(P*o.*), cflow(*.*), cflowbelow(*.x)

– within• within(*), within(P*), within(*to), within(Po*o)

– Chamada de método/withincode/cflow(below)• *.*(int, string), *.*(*), *.*(..), *.*(..,int), *.*(int,..),

*.*(..,int,..)• *.*(..,..,..), *.*(..,..,int,..,..)

Page 35: 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.

Extensão da linguagem OA1

7. Uso de PointcutExpressao na definição de Advice

aspect PontoLog { pointcut setX : Ponto.setX(int);

after : setX or Ponto.setY(*) or Ponto.mover(..) {

write("O ponto mudou de posicao.") } }

Page 36: 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.

Extensão da linguagem OA1

8. Inclusão de objeto thisJoinPoint– Dá acesso a metadados sobre o join

point interceptado durante a execução de um advice.

– Oferece os seguintes atributos:• kind: string com tipo do join point• signature: string com a assinatura do método

Page 37: 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.

Extensão da linguagem OA1

• Uso de thisJoinPoint na definição de Advice

aspect PontoLog {before : Ponto.setX(*) or Ponto.setY(*) {

write(thisJoinPoint.signature); write(thisJoinPoint.kind)

}}

Page 38: 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.

Conclusões

Page 39: 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.

Conclusões

• A introdução do conceito de aspectos tornou a implementação do interpretador relativamente complexa– Se usássemos AspectJ na implementação do

interpretador, seria mais simples• A introdução de aspectos na LOO1 faz com

que expressões tenham efeitos colaterais– Execução dos advices ativados por um pointcut

designators get

Page 40: 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.

Conclusões

• A implementação interpretada exige que para cada comando ou expressão interceptável seja feita a avaliação de todos os pointcuts

• Essa abordagem é bastante lenta, principalmente quando utiliza-se cflow/cflowbelow– O cache de join points implementados ajuda,

mas não no caso de matching

Page 41: 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.

Conclusões

• A utilização de Generics na implementação das pilhas e mapeamentos permitiu– melhor reutilização de código– checagem estática

• Otimização das pilhas para permitir navegação sem desempilhar/empilhar

Page 42: 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.

Trabalhos Futuros

Page 43: 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.

Trabalhos Futuros

• Estender o ambiente de compilação para permitir a verificação estática das declarações de aspectos

• Retirar obrigatoriedade de haver um pointcut e um advice no aspecto

• Permitir declarações de atributos e métodos nos aspectos

Page 44: 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.

Trabalhos Futuros

• Controlar a instanciação de aspectos por cflow (percflow), cflowbelow (percflowbelow), this (perthis), target (pertarget) e única (issingleton)

• Implementação dos poincut designators adviceexecution e if de AspectJ

• Permitir o uso de anotações ao estilo de AspectJ 5

Page 45: 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.

Trabalhos Futuros

• Estender LOO1 com conceitos como: função, herança, array e type casting. – Isso permitiria, implementar outros pointcut

designators• Permitir que um método ou atributo introduzido

em uma classe não seja utilizado apenas dentro do aspecto que realizou a introdução

• Implementar a precedência entre os operadores and e or.