Aspect-Oriented Programming AOP Comentários Sérgio Crespo
Separation of Concerns O princípio de Separation of Concerns já é utilizado por engenheiros de software para o gerenciar a complexidade de sistemas de software. Concern o que é? Segundo o Webster(dicionário): s. negócio, assunto, interesse, incumbência, solicitude, cuidado, inquietação, preocupação. Vt. Pertencer, dizer respeito a, preocupar, afligir, interessar, relacionar-se.
Separation of Concerns Separation of Concerns??? É um conceito central em engenharia de software. Ele trata da habilidade de identificar, encapsular e manipular assuntos relavantes de um software para um objetivo particular. Este conceito permite que softwares possam ser organizados e decompostos em assuntos gerenciáveis e de fácil manipulação.
OOP - revisão UFBA Departameto de Ciência da Computação junho 2003
OOP - Limitações
OOP - Limitações UFBA Departameto de Ciência da Computação junho 2003
OOP - Limitações UFBA Departameto de Ciência da Computação junho 2003
OOP - Limitações UFBA Departameto de Ciência da Computação junho 2003
OOP - Limitações UFBA Departameto de Ciência da Computação junho 2003
OOP - Limitações UFBA Departameto de Ciência da Computação junho 2003
OOP - Limitações Solução usando Padrões! UFBA Departameto de Ciência da Computação junho 2003
AOP: Definição Aspect Oriented Programming é uma nova técnica de programação que oferece uma linguagem explicita para suporte a modularização de decisões de design que atalha (cross-cut) as funcionalidades de um programa.
Programming Aspect Oriented Programming é uma nova técnica de programação que oferece uma linguagem explicita para suporte a modularização de decisões de design que atalha (cross-cut) as funcionalidades de um programa. Como isso se reflete em PROGRAMAS???
Programming Representação no mundo binário Objetos São uma boa alternativa para facilitar separation of concerns. Eles nos permitem utilizar o conceito de encapsulamento de unidades de funcionalidades em várias níveis, de simples estruturas de dados a GUI até servidores de rede, dentro de classes bem definidas! MAS objetos são limitados em suas habilidades para modularizar concerns que não estejam localizados dentro de classes!
AOP - Motivação
AOP - Motivação
AOP Motivação Por exemplo, considere uma aplicação bancária escrita em Java que possui um método que simplesmente transfere um valor de uma conta para outra:
AOP Motivação Porém, numa aplicação bancária construída para o mundo real, este método de transferência está longe do adequado. É necessário incluir verificações de segurança, que determinam se o usuário possui autorização para realizar a operação. É preciso também "envolver" a operação em uma transação para prevenir perda de dados. Finalmente, é preciso fazer o log dos dados da aplicação. Uma versão simplificada que contém estes novos objetivos (concerns) é mostrada a seguir:
AOP Motivação
AOP Motivação
Programming O que é um Aspect? É uma nova unidade de software, que aparece para oferecer melhor manipulação e atalhos de concerns. Assim como objetos, Aspects podem tanto ser utilizados nas etapas de design bem como de implementação. Design: permite se pensar mais facilmente em definir composição e ou atalhos sobre concerns. Implementação: AOP Languages permite implementar mais facilmente os atalhos definidos no design.
Programming Um Aspect NÃO está presente dentro de uma classe! Logo um Aspect oferece mais semântica a uma classe presente em um design. Um Aspect modulariza o código para um determinado concern e descreve como o código do concern deve ser integrado ou entrelaçado no código do sistema de software.
Programming O que AOP pode realizar? Capturar o histórico, depurar e oferecer instrumentos de suporte para sistemas complexos por meio de pequenos ou poucos Aspects, em vez de multiplos fragmentos de códigos macarronicos dentro de classes. Capturar recursos que podem ser compartilhados em algoritmos envolvendo várias classes por meio de um simples Aspect. Capturar erros de manipulação de protocolos etc..
Programming Sistema de software Design Aspects Aspects Aspects
Crosscutting A AOP permite ao programador separar os interesses comuns do sistema (que fogem a típica divisão de classes). Esses comportamentos não se encaixam naturalmente dentro de um modulo de um programa. Esse tipo de comportamento é conhecido como um comportamento que crosscutting (atravessa) o sistema Na OOP a unidade natural de modularização é a classe, e um comportamento do tipo crosscutting está espalhado em varias classes
Crosscutting UFBA Departameto de Ciência da Computação junho 2003
Aplicações da AOP Logging, tracing e profiling Garantir o cumprimento de regras arquiteturais Otimização: pooling e caching Acesso a recursos compartilhados em sistemas concorrentes Autenticação e autorização Acesso transacional
Benefícios da programação orientada a aspectos Menos responsabilidades em cada parte - Como interesses entrecortantes são separados em seus próprios módulos, as partes do programa que lidam com a lógica de negócios não ficam poluídas com código que lida com interesses periféricos. Melhor modularização - Como os módulos em AOP não se chamam diretamente, há uma redução no nível de acomplamento. Evolução facilitada - Novos aspectos podem ser acrescentados facilmente sem necessidade de alterar o código existente Mais possibilidades de reutilização - Como o código não mistura interesses, aumentam-se as possibilidades de se reutilizar módulos em sistemas diferentes. http://www.aspectos.org/courses/aulasaop/curso_poa.html#aula11
AOP Elementos Básicos Um ponto de junção é qualquer ponto identificável durante a execução de um programa. Aspectos podem ser associados a pontos de junção e executados antes, depois, ou ao invés deles. Existem diversos pontos de junção reconhecidos pelo AspectJ: Chamada de métodos Execução de métodos Construtores Acesso aos campos Tratamento de exceções Inicialização de classes http://www.aspectos.org/courses/aulasaop/curso_poa.html#aula11
AOP Elementos Básicos Pontos de corte (pointcuts) Um ponto de corte (pointcut) é uma construção sintática para se agrupar um conjunto de pontos de junção. Sua sintaxe básica é a seguinte (ilustrada com um exemplo): public pointcut nome() : call (void Receita.print()) A primeira parte é a declaração de restrição de acesso nesse caso, public, mas pointcuts podem ser private ou protected. A palavra chave pointcut denota que estamos declarando um ponto de corte. Todo pointcut tem um nome qualquer, e pode receber parâmetros nesse caso, o pointcut não recebe parâmetros. Depois dos dois pontos (:) obrigatórios vem o tipo dos pontos de junção agrupados pelo pointcut nesse caso temos um pointcut do tipo call, que indica uma chamada de método. Finalmente vem a assinatura do pointcut, uma especificação dos pontos de junção aos quais o pointcut se refere. http://www.aspectos.org/courses/aulasaop/curso_poa.html#aula11
AOP Elementos Básicos Pontos de corte (pointcuts) http://www.aspectos.org/courses/aulasaop/curso_poa.html#aula11
AOP Elementos Básicos Advice Advice é uma estrutura que denota o que um aspecto deve fazer, ou seja, qual o comportamento do aspecto. Em termos mais formais, o advice designa a semântica comportamental do aspecto. Todo advice está associado a um pointcut, que define pontos de junção. Há três tipos de advice: before: executa antes do ponto de junção after: executa depois do ponto de junção around: executa "em volta" do ponto de junção; esse tipo de advice serve para substituir a execução do ponto de junção pela execução do advice, ou executar parte do advice antes do ponto de junção e outra parte depois. UFBA Departameto de Ciência da Computação junho 2003
Relembrando Ponto de junção: um ponto de junção (join point) é qualquer ponto identificável durante a execução de um programa (Chamada de métodos, Execução de métodos, Construtores, Acesso aos campos,tratamento de exceções, Inicialização de classes) Pontos de corte: Um ponto de corte (pointcut) é uma construção sintática para se agrupar um conjunto de pontos de junção. Advice: é uma estrutura que denota o que um aspecto deve fazer, ou seja, qual o comportamento do aspecto. Em termos mais formais, o advice designa a semântica comportamental do aspecto. Todo advice está associado a um pointcut, que define pontos de junção. advice é definido de maneira similar ao método. Porém, o advice nunca é invocado explicitamente. Ele é invocado somente quando um pointcut ligado a ele tem resultado igual a true (verdadeiro)
Exemplo UFBA Departameto de Ciência da Computação junho 2003
Exemplo UFBA Departameto de Ciência da Computação junho 2003
Arquiteturas Orientadas a AOP
Arquiteturas Orientadas a AOP Uma Arquitetura de Software é composta por um conjunto de aspectos Neste caso,um aspecto é um componente composto e o join point é um conector! Ponto de junção: um ponto de junção (join point) é qualquer ponto identificável durante a execução de um programa (Chamada de métodos, Execução de métodos, Construtores, Acesso aos campos,tratamento de exceções, Inicialização de classes)
Arquiteturas Orientadas a AOP
Ferramentas - Ambientes
AspectJ AspectJ é uma linguagem de aspecto, ela é uma extensão da linguagem Java. Conta com um montador (Weaver) para unir o programa de componente com o programa de aspecto.
AspectJ
AspectJ - Site
AOSD - Site
AOP: temas correlatos Subject Oriented Programming Meta-Programação Programação Adaptativa http://www.research.ibm.com/sop http://www.ccs.neu.edu/research/demeter Filter Composition http://wwwtrese.cs.utwente.nl
AOP: Referências http://www.parc.xerox.com/csl/projects/aop http://aspectj.org/servlets/ajsite http://www.ccs.neu.edu/home/lieber/connection-to-aop.html Site do software AspectJ que extende Java para suportar o conceito de Aspects. Connections between Demeter/Adaptive Programming and Aspect-Oriented Programming (AOP) http://www.cs.ubc.ca/labs/se/papers/1999/tse-eval.html Evaluating Emerging Software Development Technologies Lessons Learned from Assessing Aspect-oriented Programming
AOP: Artigos interessantes Atlas: A Case Study in Building a Web-Based Learning Environment using Aspect-oriented Programmaning Mik Kerrsten and Gail C. Murphy Aspect-Oriented Programming Gregor Kiczales, john Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, John Irwin An Initial Assessment of Aspect-oriented Programming Robert J. Walker, Elisa L.A. baniassad and Gail Murphy FAQ e Overview do site da xerox http://www.parc.xerox.com/csl/projects/aop