Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Professora: Aline Vasconcelos apires@iff.edu.br
Programação Orientada a Aspectos Pós-Graduação em Análise, Projeto e Gerência de Sistemas de Informação Professora: Aline Vasconcelos
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.
3
Boa modularidade Código do Apache
4
Boa modularidade Código do Apache Parse XML
5
Boa modularidade Código do Apache Parse XML Busca de Padrões de URLs
6
Falta de modularidade Código do Apache Parse XML
Busca de Padrões de URLs Log
7
Mais falta de modularidade
Código do Apache Parse XML Busca de Padrões de URLs Log Segurança
8
O que temos aqui? Falta de Modularidade Código Espalhado
If (user not authorized) { error (“Mensagem de erro 1”); } Falta de Modularidade Código Espalhado Código Redundante
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!!!
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
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.
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
13
Aplicações Log Persistência Distribuição Otimização Segurança
Design Patterns Regras de Negócio!
14
Implementações Mais conhecidas: AspectJ Composition Filters Hyper/J
DemeterJ Nem tanto, mas interessantes: Jmangler (outro)
15
Integração
16
AspectJ (http://eclipse.org/aspectj/)
Uma extensão da linguagem Java para o tratamento de Aspectos. ajc: compilador e weaver de bytecode Java. Processo de weaving: ------ ASPECTOS Application Jar File ------ ----- WEAVING Aplicação + Aspectos
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.
18
AspectJ: Alguns Conceitos
Exemplos de JoinPoints: Method Calls Method Executions Object Instantiations Constructor Executions Field References Handler Executions
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: pointcuts
20
AspectJ Uma aplicação Exemplo:
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));
22
AspectJ Uma aplicação Exemplo:
23
AspectJ: Exemplos de Pointcuts
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));
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())
25
AspectJ: Advices Before: é 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: é 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 Throwing, After.
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.
27
AspectJ: Advices Exemplos
around(): move() { System.out.println("about to move"); proceed(); System.out.println(“object moved"); }
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.
29
AspectJ: Expondo Contexto em Pointcuts
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: SetXY(fe, x, y) { System.out.println(fe + " moved to (" + x + ", " + y + ")."); } ADVICE!
30
AspectJ: Programando Aspectos
aspect Logging { private OutputStream logStream = System.err; 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() { logStream.println("about to move"); }
31
Vantangens x Desvantagens
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.
32
Vantangens x Desvantagens
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.
33
Referências AspectJ - http://www.aspectj.org
HyperJ - DJ – Composition Filters –
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?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.