Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise,...

34
Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline Vasconcelos [email protected]

Transcript of Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise,...

Page 1: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

Programação Orientada a AspectosProgramação Orientada a Aspectos

Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação

Professora: Aline Vasconcelos

[email protected]

Page 2: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

2

Programação Orientada a Aspectos

O que é AOP???? Algo Novo??!! AOP: Aspect Oriented Programming

(Programação Orientada a Aspectos)

Técnica que permite separar os interesses transversais (crosscutting concerns) dos interesses-base de um sistema, fazendo com que o software se torne mais inteligível, e, conseqüentemente, facilitando a sua Manutenção e Reutilização (Kiczales et al., 1997).

Minimiza impacto das Manutenções, evitando o espalhamento de código. Diminui riscos de efeitos colaterias (side effects) durante as mudanças.

Page 3: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

3

Boa modularidade

Código do Apache

Page 4: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

4

Boa modularidade

Código do Apache

Parse XML

Page 5: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

5

Boa modularidade

Código do Apache

Parse XML

Busca de Padrões de URLs

Page 6: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

6

Falta de modularidade

Código do Apache

Parse XML

Busca de Padrões de URLs

Log

Page 7: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

7

Mais falta de modularidade

Código do Apache

Parse XML

Busca de Padrões de URLs

Log

Segurança

Page 8: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

8

O que temos aqui?

Falta de Modularidade Código Espalhado Código Redundante

If (user not authorized) {

error (“Mensagem de erro 1”);

}

Page 9: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

9

Custo de Código Espalhado

Código Redundante Mesmo pedaço de código em vários lugares

Dificuldade de Entendimento Dificuldade de Manutenção

Necessidade de encontrar todo o código espalhado (ou embaraçado)

... e verificar que em todos os pontos as alterações foram feitas corretamente

... e ter certeza de não fazer besteira por acidente

… Riscos de Efeitos Colaterais em Manutenções!!!

Page 10: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

10

Qual é a idéia da AOP?

●A Ortogonalidade é inerente a sistemas complexos

●Criar uma estrutura natural para a modularização deste tipo de código

●Como?

●Com suporte de linguagens e ferramentas

Page 11: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

11

O que são Aspectos?

Classificamos códigos ortogonais como Preocupações Ortogonais

Ou PO Ou Crosscutting concerns

E chamamos de Aspectos(Aspects) as PO’s bem modularizadas

E AOP a programação orientada a modularização das Pos.

Page 12: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

12

Características da AOP Non-disruptive technology:

É possível continuar usando OOP É possível utilizar com sistemas já

existentes Não modifica o código fonte

Não é difícil de aprender(?) Bom suporte de ferramentas Integração com várias IDE's

Page 13: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

13

Aplicações

Log Persistência Distribuição Otimização Segurança Design Patterns Regras de Negócio!

Page 14: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

14

Implementações Mais conhecidas:

AspectJComposition FiltersHyper/JDemeterJ

Nem tanto, mas interessantes:Jmangler(outro)

Page 15: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

15

Integração

Page 16: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

16

------------------

AspectJ (http://eclipse.org/aspectj/)

Uma extensão da linguagem JavaJava para o tratamento de AspectosAspectos.

ajcajc: compilador e weaver de bytecode Java.

Processo de weaving: -------------------

ASPECTOS

Application Jar File

WEAVING

Aplicação + Aspectos

Page 17: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

17

AspectJ: Alguns Conceitos

Join Points: pontos bem definidos no fluxo de controle do programa onde o aspecto pode inserir o código ortogonal.

Pointcuts: conjunto de join points onde o código será inserido.

Advices: código que é executado quando um join point é alcançado no fluxo de controle do programa.

Aspects: unidade de modularidade para requisitos ortogonais. Comportam-se como classes Java, mas podem incluir também as construções do AspectJ.

Page 18: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

18

AspectJ: Alguns Conceitos

Exemplos de JoinPoints: Method Calls

Method Executions

Object Instantiations

Constructor Executions

Field References

Handler Executions

Page 19: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

19

AspectJ: Alguns Conceitos

Exemplos de Pointcuts:

call (signature)

execution (signature)

get (signature) e set (signature)

exception handler

Etc. For a complete list, take a look at:

http://www.eclipse.org/aspectj/doc/released/progguide/quick.html#quick-pointcuts

Page 20: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

20

AspectJ

Uma aplicação Exemplo:

Page 21: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

21

AspectJ: Exemplos de Pointcuts

call(void Point.setX(int)) – toda chamada de método para “void setX(int)” em objetos do tipo Point serão interceptadas pelo aspecto.

call(void Point.setX(int)) || call(void Point.setY(int))

Toda chamada de método para “void setX(int)” em objetos do tipo Point e chamadas de método para “void setY(int)” serão interceptadas pelo aspecto.

call(void FigureElement.setXY(int,int)) || call(void Point.setX(int)) || call(void Point.setY(int)) || call(void Line.setP1(Point)) || call(void Line.setP2(Point));

Page 22: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

22

AspectJ

Uma aplicação Exemplo:

Page 23: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

23

AspectJ: Exemplos de Pointcuts

pointcut move():

call(void FigureElement.setXY(int,int)) call(void FigureElement.setXY(int,int)) || ||

call(void Point.setX(int)) || call(void Point.setX(int)) ||

call(void Point.setY(int)) || call(void Point.setY(int)) ||

call(void Line.setP1(Point)) || call(void Line.setP1(Point)) ||

call(void Line.setP2(Point)); call(void Line.setP2(Point));

Page 24: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

24

AspectJ: Exemplos de Pointcuts

É possível especificar pointcuts utilizando “wildcards”, ou seja, especificando propriedades de métodos:

call(void Figure.make*(..))

call(public * Figure.* (..)) É possível especificar pointcuts com base no fluxo

de execução:

cflow(move())

Page 25: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

25

AspectJ: Advices

BeforeBefore: é executado quando um join point é alcançado, porém antes que o programa prossiga com o join point. Por exemplo, para o join point “method call”, o advice é executado antes que o método comece a rodar, logo que os seus argumentos são avaliados.

After:After: é executado depois que o programa finaliza a execução do join point. Por exemplo, para o join point “method call”, o advice é executado depois que o método é executado, mas antes que o controle retorne ao chamador. Existem 3 tipos: After Returning, After After Returning, After Throwing, After.Throwing, After.

Page 26: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

26

AspectJ: Advices Exemplos

before(): move() { System.out.println("about to move"); }

after() returning: move() { System.out.println("just successfully moved"); }

around() - Around advice em um join point é executado assim que o join point é alcançado, e tem o controle a respeito de quando o programa deve prosseguir com o join point.

Page 27: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

27

AspectJ: Advices Exemplos

around(): move() { System.out.println("about to move");

proceed();System.out.println(“object

moved"); }

Page 28: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

28

AspectJ: Expondo Contexto em Pointcuts

Valores expostos por um Pointcut em seu Joinpoint podem ser usados no código do Advice:

Existem 3 Pointcuts primitivos que são usados para publicar estes valores:

This: objeto atualmente sendo executado.

Target: objeto alvo de uma chamada, por exemplo.

Args: argumentos de uma chamada de método.

Page 29: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

29

AspectJ: Expondo Contexto em Pointcuts

pointcut setXY(FigureElement fe, int x, int y):pointcut setXY(FigureElement fe, int x, int y): call(void FigureElement.setXY(int, int)) && target(fe) && args(x, y);

after(FigureElement fe, int x, int y) returning:after(FigureElement fe, int x, int y) returning: SetXY(fe, x, y)SetXY(fe, x, y) { System.out.println(fe + " moved to (" + x + ", " + y + ")."); }

ADVICE!ADVICE!

Page 30: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

30

AspectJ: Programando Aspectos

aspect Loggingaspect Logging { private OutputStream logStream = System.err;

pointcut move():pointcut move():

call(void FigureElement.setXY(int,int)) || call(void Point.setX(int)) ||

call(void Point.setY(int)) || call(void Line.setP1(Point)) || call(void Line.setP2(Point));

before(): move()before(): move() { logStream.println("about to move"); } }

Page 31: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

31

Vantangens x Desvantagens

Vantagens da AOP:Vantagens da AOP: Boa Modularidade. Separação de Requisitos Funcionais e

Não-Funcionais no Código. Evita espalhamento de código e

efeitos colaterais em Manutenções. Suporte tecnológico. etc.

Page 32: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

32

Vantangens x Desvantagens

Desvantagens da AOP:Desvantagens da AOP: A Composição de Aspectos não é um problema

simples. Aprendizado de uma nova tecnologia. Necessidade de se tratar os Aspectos desde o

início do Ciclo de Vida. Impacto no processo de compilação. Impacto nos processos de testes e depuração

da aplicação. Onde está o erro??? Manutenção e Evolução da Aplicação envolverá

a manutenção e evolução dos Aspectos.

Page 33: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

33

Referências

AspectJ - http://www.aspectj.org HyperJ - http://www.alphaworks.ibm.com/tech/hyperj DJ – http://www.ccs.neu.edu/research/demeter/DJ/ Composition Filters –

http://trese.cs.utwente.nl/composition_filters/

Page 34: Programação Orientada a Aspectos Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline.

34

QUESTÕES DE PESQUISA

AOP x Triggers and Stored Procedures x ….. to represent Business Rules. X Other approaches to represent crosscutting concerns.

How is testing and debugging the application with Aspects? How it evolves?