Professora: Aline Vasconcelos

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Experiments with Clustering as a Software Remodularization Method Nicolas Anquetil and Timothy C. Lethbridge University of Ottawa, Canada WCRE 1999:
Raphael Gatti Thomás Bryan
Desenvolvimento de Software Orientado por Aspectos Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues.
Rational Unified Process
Aspect Oriented Software Development - AOSD 1 Elaborado por: Bruno Nunes nº 3202 Pedro Casqueiro nº 2163.
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
Interação entre objetos
João Carlos Porto Orientadora: Prof.ª Dr.ª Junia Coutinho Anacleto 26/03/2010 Projeto de interceo.
Orientação a Objetos: Encapsulamento e Classificação
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA APLICADA DISCIPLINA DE SISTEMA ORIENTADOS A OBJETOS PROGRAMAÇÃO ORIENTADA.
Modularização de interesses ortogonais
Projeto Arquitetural de Software Orientado a Aspectos
Programação Orientada a Aspectos
Processo de Reengenharia Prático Pós- Graduação Pós- Graduação Karolyne Almeida Siqueira Michael Caldas da Silva.
Refactoring de Programas Java
April 05 Prof. Ismael H. F. Santos - 1 Modulo II CheckStyle Professor Ismael H F Santos –
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
Aula 10 Manipulação de Exceções
O que é 5(S)? ? 5(S) É a prática de hábitos que permitem mudanças nas relações... É a base de qualquer programa de qualidade. 1.
Carlos Alberto de Freitas Pereira Júnior
Composição e Geração de Aplicações usando Aspectos
PROGRAMAÇÃO ORIENTADA A ASPECTOS EM JAVA Introdução a conceitos teóricos e práticos Adriano G. do Prado José Eduardo M. Lemos José Fernando da S. Cruz.
Como o AspectJ tece o código
Programação Baseada em Objectos Desenho de TAD
Visão Geral do Desenvolvimento de Sistemas e Papéis no Desenvolvimento de Software Marcely Dias
Gerenciamento do Escopo
Classes e objetos Arrays e Sobrecarga
Classes e objetos Modelagem
Herança P. O. O. Prof. Ângela e Grace.
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação Orientada a Objetos
Análise de Casos de Uso Alexandre Motnteiro.
Uma visão geral Grupo: Alexandre Henrique Vieira Soares
Desenvolvimento de Projetos e Aplicações Web
Engenharia de Requisitos
José Roberto Blaschek Gerência do Escopo José Roberto Blaschek.
Programação Orientada a Objetos com Java
Aluno: Mário Monteiro Orientador: Sérgio Soares 1.
Fundamentos de Engenharia de SW
Object Oriented Software Construction (MEYER, Bertrand)
1 António Arnaut Duarte. 2 Sumário: primeiros passos;primeiros passos formatar fundo;formatar fundo configurar apresentação;configurar apresentação animação.
P ROGRAMAÇÃO ORIENTADA A ASPECTOS Equipe: Leandro Oliveira Anusio Menezes.
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Conceitos.
GAPH Integração de Hardware do Usuário ao CoreConnect Leandro Heleno Möller e Leonel Pablo Tedesco Prototipação Rápida e Computação.
Programação Orientada a Aspectos
Desenvolvimento de Sistemas Orientados a Aspectos
Desenvolvimento de Sistemas Orientados a Aspectos
Salas de Matemática.
Entendendo as definições de classe
Projeto de Banco de Dados
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Os métodos equals() e hashCode()
Técnicas e Projeto de Sistemas
Aspect Oriented Programming (AOP)
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
Listas Simplesmente Encadeadas
Tratamento de Exceções
Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br.
Contagem Sequencial do Estoque
Java Kickstart, day 2 Semelhanças com linguagem C.
Linguagem orientada a Aspectos 2 Luiz Carlos d’Oleron Tiago Vinícius.
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.
Discussing Aspects of AOP Alunos: Ezequiel Jonacir Mazza João Andrei Cetenareski Curso: Mestrado em Informática Aplicada Disciplina: Orientação a Objetos.
Equipe Equipe: Ana Carolina M. Pilatti Igor de Souza Paiva Igor de Souza Paiva Rafael Stubs Parpinelli Rafael Stubs Parpinelli Vera Lúcia Marchiori Vera.
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1.
Introdução a AOP + SpringAOP Jobson Ronan
Transcrição da apresentação:

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 apires@iff.edu.br

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.

Boa modularidade Código do Apache

Boa modularidade Código do Apache Parse XML

Boa modularidade Código do Apache Parse XML Busca de Padrões de URLs

Falta de modularidade Código do Apache Parse XML Busca de Padrões de URLs Log

Mais falta de modularidade Código do Apache Parse XML Busca de Padrões de URLs Log Segurança

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

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!!!

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

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.

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

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

Implementações Mais conhecidas: AspectJ Composition Filters Hyper/J DemeterJ Nem tanto, mas interessantes: Jmangler (outro)

Integração

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

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.

AspectJ: Alguns Conceitos Exemplos de JoinPoints: Method Calls Method Executions Object Instantiations Constructor Executions Field References Handler Executions

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

AspectJ Uma aplicação Exemplo:

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));

AspectJ Uma aplicação Exemplo:

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));

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())

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.

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.

AspectJ: Advices Exemplos around(): move() { System.out.println("about to move"); proceed(); System.out.println(“object moved"); }

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.

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!

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"); }

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.

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.

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/

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?