SlideShare uma empresa Scribd logo
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
Programação Oritentada a Aspecto
 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
Programação Oritentada a Aspecto
Obrigado pela atenção!

Mais conteúdo relacionado

PPTX
Apresentação - POA
PDF
Programação Orientada a Aspectos
PDF
Egenharia de Software Orientado a Aspectos
PDF
Apostila uml
PPT
Artigo Transp Sw
PDF
Metodologia orientado a objetos
PDF
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Apresentação - POA
Programação Orientada a Aspectos
Egenharia de Software Orientado a Aspectos
Apostila uml
Artigo Transp Sw
Metodologia orientado a objetos
Design Pattern MVC – Arquitetura de Software Coesa e Flexível

Mais procurados (17)

PPS
Componentes
ODP
A Linguagem UML
PPT
Padrões de design orientado a objetos
PPTX
Aula poo x pe
PDF
Análise de sistemas oo 1
PPT
Análise e Modelagem com UML
PDF
Programação orientada a aspectos
PDF
Engenharia de Software II - Atividade: Diagramas da UML
PPTX
Aula diagrama de classes
PPT
Diagrama de implantação
PDF
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
PPTX
Arquitetura de Software
PDF
Introdução à linguagem UML
PDF
Orientação a Objetos no Delphi - Por onde começar (I)
PDF
Java programação orientada a objetos
PPT
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
PPTX
Uml Diagramas Estruturais
Componentes
A Linguagem UML
Padrões de design orientado a objetos
Aula poo x pe
Análise de sistemas oo 1
Análise e Modelagem com UML
Programação orientada a aspectos
Engenharia de Software II - Atividade: Diagramas da UML
Aula diagrama de classes
Diagrama de implantação
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Arquitetura de Software
Introdução à linguagem UML
Orientação a Objetos no Delphi - Por onde começar (I)
Java programação orientada a objetos
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Uml Diagramas Estruturais
Anúncio

Semelhante a Programação Oritentada a Aspecto (20)

PPTX
Orientacao aspectos
PPT
An Aspect-Oriented Infrastructure for Design by Contract in Java
PDF
Programação Orientada a Aspectos
PPT
Aop Aspect J 1.5.4
PDF
Desenvolvimento de software orientado a aspectos
PPT
Conceitos de Orientação A Objeto
PDF
Intro oca,ocp 6 & 7, oo basics
PDF
Aula 01 introdução aoo
PPTX
Análise Orientada a Objetos - resumo.pptx
PDF
Orientação a Aspectos em PHP
PDF
Programação Orientada a Aspectos
PPT
2.1 introdução a oo
PDF
02_revisao_OO.pdf
PPT
Apresentação programação orientada à objetos
PPT
Curso : Introdução Orientação a Objetos
PDF
3294 lógica de programação
PPTX
Aula01-IntroducaoOO.pptx
PDF
Poo apostila visual c
PPTX
3.1 orientação objetos
PPTX
Programação orientada a objetos
Orientacao aspectos
An Aspect-Oriented Infrastructure for Design by Contract in Java
Programação Orientada a Aspectos
Aop Aspect J 1.5.4
Desenvolvimento de software orientado a aspectos
Conceitos de Orientação A Objeto
Intro oca,ocp 6 & 7, oo basics
Aula 01 introdução aoo
Análise Orientada a Objetos - resumo.pptx
Orientação a Aspectos em PHP
Programação Orientada a Aspectos
2.1 introdução a oo
02_revisao_OO.pdf
Apresentação programação orientada à objetos
Curso : Introdução Orientação a Objetos
3294 lógica de programação
Aula01-IntroducaoOO.pptx
Poo apostila visual c
3.1 orientação objetos
Programação orientada a objetos
Anúncio

Programação Oritentada a Aspecto

  • 1. Benício Ávila Freitas Lourenço De Brito Orientador : João Frederico Roldan Viana
  • 2.  Introdução  Breve Histórico  Paradigma Orientado a objeto  AspectJ e seus principais elementos  Principais usos da POA
  • 3.  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.
  • 4.  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.
  • 5.  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)
  • 6. 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).
  • 7. 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.
  • 9.  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.
  • 10.  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.
  • 11.  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.
  • 12.  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
  • 13.  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
  • 14.  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.
  • 15.  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
  • 18.  Decomposição aspectual (Aspectual decomposition).  Implementação de interesses (Concern implementation).  Recomposição Aspectual (Aspectual recomposition).
  • 19.  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.
  • 20.  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.
  • 21.  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.
  • 24.  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.
  • 25.  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
  • 26.  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.
  • 27.  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
  • 28.  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
  • 29.  Aspectos  Advice ou conselho  Pontos de corte (pointcuts)  Pontos de junção (Join Points)  Introduções
  • 30.  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.
  • 31.  Principais elementos no AspectJ são pointcuts (pontos de corte) e advice (Conselho) Fonte: Elaborado pelo autor
  • 32.  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
  • 33. Tipos :  Entrada e saídas de métodos  Tratamentos de exceções e erros  Acessos a construtores  Variáveis  Objetos
  • 34. 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.
  • 35. Construtores:  Execução ◦ São os próprios códigos do construtor  Chamada : ◦ Sempre que um objeto é instanciado
  • 36.  Construção sintática de 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 * 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
  • 39. 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.
  • 40. 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)
  • 41.  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
  • 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.
  • 46.  Adicionar novos membros ◦ Dados ◦ Métodos ◦ Classes
  • 48.  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