Benício Ávila Freitas Lourenço De Brito
Orientador : João Frederico Roldan Viana
 Introdução
 Breve Histórico
 Paradigma Orientado a objeto
 AspectJ e seus principais elementos
 Principais usos da POA
 Os métodos de programação convencionais estão
limitados pela sua própria “filosofia” de atuação.
 Alguns problemas graves, tais como o
espalhamento de código, em conjunto com as
limitações humanas, tornam o código confuso e
muito difícil de manter, alterar ou melhorar.
 O espalhamento de código pode ser resultante da
implementação de várias funcionalidades tais
como logging, profiling, etc.
 Para tentar dar resposta a estes problemas
apareceu a Programação Orientada a Aspectos.
 Na evolução dos paradigmas de desenvolvimento de software é
visto a constante busca de separações de interesses bem
definidos.
 O termo separação de interesses foi criado pelo cientista Edsger
Dijkstra em 1974, com o objetivo de orientar que todo sistema
deveria ser separado em partes onde cada parte seria uma
funcionalidade do sistema.
 Todo sistema de software lida com diferentes interesses, sejam
eles dados, operações, ou outros requisitos do sistema.
 O ideal seria que a parte do programa dedicada a satisfazer a
um determinado interesse estivesse concentrada em uma
única localidade física, separada de outros interesses, para
que o interesse possa ser estudado e compreendido com
facilidade.
Fonte: Tekinerdogan (2001)
Desenvolvimento Estruturado
 Difundida a técnica de separação de interesses se orientado através
de módulos.
 Cada módulo corresponde a uma funcionalidade do sistema.
 Nesse período que surgiram os principais conceitos de
modularização como baixo acoplamento e alta coesão.
 Com isso o problema de modularização com respeito a
funcionalidades foi resolvido porém interesses relativos a dados
ficavam distribuídos em vários desses módulos,dai surgiu um
novo paradigma chamado de programação orientado a objetos
(POO).
Desenvolvimento Orientado a Objeto
 Modularização deveria acontecer tanto em relação a dados
como em relação a funcionalidades do sistema.
 A POO mudou a forma de desenvolvimento utilizando
conceitos de abstração do mundo real e com isso surgiram
as classes, objetos e etc.
 Porém a POO não resolveu todas as deficiências, ainda
continuou com o problema de espalhamento de código
devido a interesses transversais que não são modularizados.
Fonte: Torsten (2008)
 O trabalho inicial que levou a programação
orientada a aspecto foi feito em universidade
de várias partes do mundo.
 Os primeiros colaboradores foram Cristina
Lopes e Gregor Kiczales do Palo Alto Research
Center (PARC), uma subsidiária da Xerox
Corporation.
 Gregor criou em 1996 o termo POA
(programação orientando a aspecto).
 No final dos anos 90 foi o responsável por
liderar a equipe na Xerox na criação do
AspectJ, que foi uma das primeiras
implementações das práticas de POA.
 Atualmente o projeto foi transferido para a
comunidade de código aberto eclipse.org,
que deu continuidade ao trabalho de suporte
e melhorias para o projeto.
 Suprir necessidades que a orientação objeto
não é capaz de resolver sozinha, como
espalhamento de código.
 Interesses entrecortantes são separados em
seus módulos, as partes do programa que
lidam com as regras de negócio não ficam
poluídas com códigos periféricos
 Isso gera uma modularização melhor e assim
diminui o alto acoplamento entre códigos.
 É introduzida uma nova forma de modularização, o
aspecto.
 Com essa estratégia é implementado o crosscuting
concerne em aspectos
 O termo crosscuting concerne é utilizado
para definir quando um código participa de
vários módulos de código.
 Atravessam códigos com outras
funcionalidades.
 Com essa separação é possível tirar esses
códigos de dentro dos módulos principais
das aplicações.
 Pensando em termos abstratos, a orientação
a aspectos introduz uma terceira dimensão
de decomposição.
 Além de decompor o sistema em objetos
(dados) e métodos (funções), cada objeto e
função é decomposto de acordo com o
interesse que está sendo servido e agrupado
cada interesse em um módulo distinto, ou
aspecto
Fonte: Tekinerdogan (2001)
Fonte: Torsten (2008)
 Decomposição aspectual (Aspectual
decomposition).
 Implementação de interesses (Concern
implementation).
 Recomposição Aspectual (Aspectual
recomposition).
 Identificar os requisitos principais do sistema
 Identificar os interesses transversais
 Procura-se separar a lógica principal de
negocio, e o resto serão as preocupações ao
nível de sistema.
 implementação de cada preocupação do
sistema de maneira independente(lógicas de
autorização, lógica comercial e etc.)
 Para parte central de um módulo pode-se
utilizar técnicas procedurais ou de orientação
a objetos.
 Nessa etapa são criadas as regras de como
recompor o sistema
 Nessa fase acontece a criação de unidades ou
os aspectos
 O resultado dessa fase é a integração, também
conhecido como weaving (tecelagem), dos
módulos com os aspectos de acordo com a
necessidade de cada sistema.
Fonte: RAMNIVAS (2008)
Fonte: Yasser (2004)
 Diminuição de responsabilidade em módulos
do sistema.
 Menor nível de acoplamento.
 Grande reutilização de código.
 Redução de custos de modificação.
 Mito que a POA veio para substituir a POO.
 Uma verdade é que para utilizar POA em um
projeto é necessário um grande esforço.
 Uma verdade é que difícil seguir a lógicas de
desenvolvimento de uma aplicação orientada
a aspecto
 Desenvolver orientado a aspecto é preciso de
um compilador específico.
 AspectJ com compilador AJC
 AJC que realiza a transformação de um
programa escrito em Aspectj em bytecodes
Java.
 Podendo ser executado em qualquer JVM.
 IDE Eclipse Helios
 Plugin AJDT( ferramentas adicionadas ao
Eclipse que facilitam desde a criação do
projeto até criação dos programas orientados
a aspecto)
 Tutorial presente na monografia
 Implementação da especificação POA
 Implementação baseada em Java
 Existem outras implementações baseadas em
outras linguagens como AspectC para
linguagem C e Pythius para Python
 Aspectos
 Advice ou conselho
 Pontos de corte (pointcuts)
 Pontos de junção (Join Points)
 Introduções
 a unidade modular principal em AspectJ
 aspecto pode agrupar introduções, pontos de
corte e advice.
 assemelha bastante com uma classe e pode
ter tudo que uma classe tem como variáveis,
métodos e restrições de acesso.
 Principais elementos no AspectJ são pointcuts
(pontos de corte) e advice (Conselho)
Fonte: Elaborado pelo autor
 Qualquer ponto em que o AspectJ possa
identificar.
 Aspectos podem ser associados a pontos de
junção e executados antes, depois e até
mesmo ao invés deles
Tipos :
 Entrada e saídas de métodos
 Tratamentos de exceções e erros
 Acessos a construtores
 Variáveis
 Objetos
Métodos:
 Na chamada de métodos são os pontos
indicativos de onde no código-fonte o
método é chamado.
 o ponto de execução de métodos é o corpo
dos métodos propriamente dito.
Construtores:
 Execução
◦ São os próprios códigos do construtor
 Chamada :
◦ Sempre que um objeto é instanciado
 Construção sintática de forma que agrupa um
conjunto de pontos de junção
Fonte: Elaborado pelo autor
 Caracteres Especiais:
◦ No momento da descrição da assinatura, podem-se
usar alguns caracteres especiais para incluir mais
de um ponto de junção no pointcut.
Caractere Significado
* Qualquer sequência de caracteres que
não contém pontos.
.. Qualquer sequência de caracteres,
incluindo também os que contêm
pontos.
+ Qualquer subclasse de uma classe
Operador Significado Exemplo Explicação do
exemplo
! Negação !Funcionário Qualquer classe
exceto Funcionário
|| “ou” lógico Funcionário ||
Cliente
Classe Funcionário
ou classe Cliente
&& “e” lógico Cloneable &&
Runnable
Classes que
implementam ambas
as interfaces
Cloneable e
Runnable.
Categoria do Ponto de junção Sintaxe do pointcut
Chamada de método ou construtor call(AssinaturaDoMétodo)
Inicialização de classe staticinitialization(Classe)
Leitura de dado de classe get(AssinaturaDoCampo)
Escrita de dado de classe set(AssinaturaDoCampo)
Execução de método ou construtor execution(AssinaturaDoMétodo)
Tratamento de exceção handler(Exceção)
 Demonstra o que um aspecto deve realizar
 Qual comportamento o aspecto deve ter.
Tipos:
◦ 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
Fonte: Elaborado pelo autor
Tipos Função
After() : pontoDeCorte() Executa depois do ponto de junção,
independente de qual foi o retorno.
After() returning : pontoDeCorte() Executa de um ponto de junção caso
ele tiver finalizado normalmente, ou
seja, sem exceções.
After() throwing :
pontoDeCorte()
Executa um ponto de junção caso tiver
saído com uma exceção.
Fonte: Elaborado pelo autor
Fonte: Elaborado pelo autor
 Adicionar novos membros
◦ Dados
◦ Métodos
◦ Classes
 Logging, Tracing e Profiling
 Controle de Regras Arquiteturais
 Otimização com Polling e Caching
 Acesso a Recursos Compartilhados Em Sistemas
Concorrentes
 Autenticação e Autorização
 Acessos Transacionais
Obrigado pela atenção!

Programação Oritentada a Aspecto

  • 1.
    Benício Ávila FreitasLourenço De Brito Orientador : João Frederico Roldan Viana
  • 2.
     Introdução  BreveHistórico  Paradigma Orientado a objeto  AspectJ e seus principais elementos  Principais usos da POA
  • 3.
     Os métodosde programação convencionais estão limitados pela sua própria “filosofia” de atuação.  Alguns problemas graves, tais como o espalhamento de código, em conjunto com as limitações humanas, tornam o código confuso e muito difícil de manter, alterar ou melhorar.  O espalhamento de código pode ser resultante da implementação de várias funcionalidades tais como logging, profiling, etc.  Para tentar dar resposta a estes problemas apareceu a Programação Orientada a Aspectos.
  • 4.
     Na evoluçãodos paradigmas de desenvolvimento de software é visto a constante busca de separações de interesses bem definidos.  O termo separação de interesses foi criado pelo cientista Edsger Dijkstra em 1974, com o objetivo de orientar que todo sistema deveria ser separado em partes onde cada parte seria uma funcionalidade do sistema.  Todo sistema de software lida com diferentes interesses, sejam eles dados, operações, ou outros requisitos do sistema.
  • 5.
     O idealseria que a parte do programa dedicada a satisfazer a um determinado interesse estivesse concentrada em uma única localidade física, separada de outros interesses, para que o interesse possa ser estudado e compreendido com facilidade. Fonte: Tekinerdogan (2001)
  • 6.
    Desenvolvimento Estruturado  Difundidaa técnica de separação de interesses se orientado através de módulos.  Cada módulo corresponde a uma funcionalidade do sistema.  Nesse período que surgiram os principais conceitos de modularização como baixo acoplamento e alta coesão.  Com isso o problema de modularização com respeito a funcionalidades foi resolvido porém interesses relativos a dados ficavam distribuídos em vários desses módulos,dai surgiu um novo paradigma chamado de programação orientado a objetos (POO).
  • 7.
    Desenvolvimento Orientado aObjeto  Modularização deveria acontecer tanto em relação a dados como em relação a funcionalidades do sistema.  A POO mudou a forma de desenvolvimento utilizando conceitos de abstração do mundo real e com isso surgiram as classes, objetos e etc.  Porém a POO não resolveu todas as deficiências, ainda continuou com o problema de espalhamento de código devido a interesses transversais que não são modularizados.
  • 8.
  • 9.
     O trabalhoinicial que levou a programação orientada a aspecto foi feito em universidade de várias partes do mundo.  Os primeiros colaboradores foram Cristina Lopes e Gregor Kiczales do Palo Alto Research Center (PARC), uma subsidiária da Xerox Corporation.
  • 10.
     Gregor criouem 1996 o termo POA (programação orientando a aspecto).  No final dos anos 90 foi o responsável por liderar a equipe na Xerox na criação do AspectJ, que foi uma das primeiras implementações das práticas de POA.
  • 11.
     Atualmente oprojeto foi transferido para a comunidade de código aberto eclipse.org, que deu continuidade ao trabalho de suporte e melhorias para o projeto.
  • 12.
     Suprir necessidadesque a orientação objeto não é capaz de resolver sozinha, como espalhamento de código.  Interesses entrecortantes são separados em seus módulos, as partes do programa que lidam com as regras de negócio não ficam poluídas com códigos periféricos
  • 13.
     Isso gerauma modularização melhor e assim diminui o alto acoplamento entre códigos.  É introduzida uma nova forma de modularização, o aspecto.  Com essa estratégia é implementado o crosscuting concerne em aspectos
  • 14.
     O termocrosscuting concerne é utilizado para definir quando um código participa de vários módulos de código.  Atravessam códigos com outras funcionalidades.  Com essa separação é possível tirar esses códigos de dentro dos módulos principais das aplicações.
  • 15.
     Pensando emtermos abstratos, a orientação a aspectos introduz uma terceira dimensão de decomposição.  Além de decompor o sistema em objetos (dados) e métodos (funções), cada objeto e função é decomposto de acordo com o interesse que está sendo servido e agrupado cada interesse em um módulo distinto, ou aspecto
  • 16.
  • 17.
  • 18.
     Decomposição aspectual(Aspectual decomposition).  Implementação de interesses (Concern implementation).  Recomposição Aspectual (Aspectual recomposition).
  • 19.
     Identificar osrequisitos principais do sistema  Identificar os interesses transversais  Procura-se separar a lógica principal de negocio, e o resto serão as preocupações ao nível de sistema.
  • 20.
     implementação decada preocupação do sistema de maneira independente(lógicas de autorização, lógica comercial e etc.)  Para parte central de um módulo pode-se utilizar técnicas procedurais ou de orientação a objetos.
  • 21.
     Nessa etapasão criadas as regras de como recompor o sistema  Nessa fase acontece a criação de unidades ou os aspectos  O resultado dessa fase é a integração, também conhecido como weaving (tecelagem), dos módulos com os aspectos de acordo com a necessidade de cada sistema.
  • 22.
  • 23.
  • 24.
     Diminuição deresponsabilidade em módulos do sistema.  Menor nível de acoplamento.  Grande reutilização de código.  Redução de custos de modificação.
  • 25.
     Mito quea POA veio para substituir a POO.  Uma verdade é que para utilizar POA em um projeto é necessário um grande esforço.  Uma verdade é que difícil seguir a lógicas de desenvolvimento de uma aplicação orientada a aspecto
  • 26.
     Desenvolver orientadoa aspecto é preciso de um compilador específico.  AspectJ com compilador AJC  AJC que realiza a transformação de um programa escrito em Aspectj em bytecodes Java.  Podendo ser executado em qualquer JVM.
  • 27.
     IDE EclipseHelios  Plugin AJDT( ferramentas adicionadas ao Eclipse que facilitam desde a criação do projeto até criação dos programas orientados a aspecto)  Tutorial presente na monografia
  • 28.
     Implementação daespecificação POA  Implementação baseada em Java  Existem outras implementações baseadas em outras linguagens como AspectC para linguagem C e Pythius para Python
  • 29.
     Aspectos  Adviceou conselho  Pontos de corte (pointcuts)  Pontos de junção (Join Points)  Introduções
  • 30.
     a unidademodular principal em AspectJ  aspecto pode agrupar introduções, pontos de corte e advice.  assemelha bastante com uma classe e pode ter tudo que uma classe tem como variáveis, métodos e restrições de acesso.
  • 31.
     Principais elementosno AspectJ são pointcuts (pontos de corte) e advice (Conselho) Fonte: Elaborado pelo autor
  • 32.
     Qualquer pontoem que o AspectJ possa identificar.  Aspectos podem ser associados a pontos de junção e executados antes, depois e até mesmo ao invés deles
  • 33.
    Tipos :  Entradae saídas de métodos  Tratamentos de exceções e erros  Acessos a construtores  Variáveis  Objetos
  • 34.
    Métodos:  Na chamadade métodos são os pontos indicativos de onde no código-fonte o método é chamado.  o ponto de execução de métodos é o corpo dos métodos propriamente dito.
  • 35.
    Construtores:  Execução ◦ Sãoos próprios códigos do construtor  Chamada : ◦ Sempre que um objeto é instanciado
  • 36.
     Construção sintáticade forma que agrupa um conjunto de pontos de junção Fonte: Elaborado pelo autor
  • 37.
     Caracteres Especiais: ◦No momento da descrição da assinatura, podem-se usar alguns caracteres especiais para incluir mais de um ponto de junção no pointcut.
  • 38.
    Caractere Significado * Qualquersequência de caracteres que não contém pontos. .. Qualquer sequência de caracteres, incluindo também os que contêm pontos. + Qualquer subclasse de uma classe
  • 39.
    Operador Significado ExemploExplicação do exemplo ! Negação !Funcionário Qualquer classe exceto Funcionário || “ou” lógico Funcionário || Cliente Classe Funcionário ou classe Cliente && “e” lógico Cloneable && Runnable Classes que implementam ambas as interfaces Cloneable e Runnable.
  • 40.
    Categoria do Pontode junção Sintaxe do pointcut Chamada de método ou construtor call(AssinaturaDoMétodo) Inicialização de classe staticinitialization(Classe) Leitura de dado de classe get(AssinaturaDoCampo) Escrita de dado de classe set(AssinaturaDoCampo) Execução de método ou construtor execution(AssinaturaDoMétodo) Tratamento de exceção handler(Exceção)
  • 41.
     Demonstra oque um aspecto deve realizar  Qual comportamento o aspecto deve ter. Tipos: ◦ 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
  • 42.
  • 43.
    Tipos Função After() :pontoDeCorte() Executa depois do ponto de junção, independente de qual foi o retorno. After() returning : pontoDeCorte() Executa de um ponto de junção caso ele tiver finalizado normalmente, ou seja, sem exceções. After() throwing : pontoDeCorte() Executa um ponto de junção caso tiver saído com uma exceção.
  • 44.
  • 45.
  • 46.
     Adicionar novosmembros ◦ Dados ◦ Métodos ◦ Classes
  • 48.
     Logging, Tracinge Profiling  Controle de Regras Arquiteturais  Otimização com Polling e Caching  Acesso a Recursos Compartilhados Em Sistemas Concorrentes  Autenticação e Autorização  Acessos Transacionais
  • 50.