You are on page 1of 42

PROGRAMAO ORIENTADA A ASPECTOS - ( POA )

TSPI TAP Joo Ricardo Claro

Programao Orientada a Aspectos ( POA )

Idia
O paradigma POA permite que programadores consigam organizar e separar o cdigo conforme a sua importncia para a aplicao. Com isso surge o conceito (separation of concerns) separao de interesses ou preocupaes.

Programao Orientada a Aspectos ( POA )

Histria
Criada no ano de 1997, em Palo Alto, nos laboratrios da Xerox, por Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier e John Irwin.

Programao Orientada a Aspectos ( POA )

O que so interesses?
So as caractersticas relevantes de uma aplicao. Pode ser dividido em uma srie de aspectos que representam os requisitos. Os aspectos podem ser agrupados em:
Funcionais: que formam a lgica de negcio. Ortogonais ou transversais: elementos que prestam suporte aos interesses funcionais.

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Motivao
O paradigma POA prope evitar dois problemas existentes sem o seu uso:
(Tangled Code) emaranhado; (Spread Code) espalhamento.

Programao Orientada a Aspectos ( POA )

Separao do Sistema
Componentes: facilmente encapsulado, por exemplo: objeto, mtodo, procedimento. O componente geralmente uma unidade funcional do sistema. Aspectos: propriedades que afetam o desempenho ou a semntica dos componentes, por exemplo: sincronizao de objetos concorrentes, manipulao de erros, etc.

Programao Orientada a Aspectos ( POA )

Composio

Linguagem de componentes: utilizada para implementar as preocupaes funcionais, ou seja, as funcionalidades bsicas da aplicao. Linguagem de aspectos: usada na implementao das preocupaes sistmicas, permite que o programador crie estruturas que descrevam o comportamento dos aspectos e definam em que situaes eles ocorrem. Programas escritos em linguagem de componentes: onde as preocupaes funcionais da aplicao so implementadas atravs de componentes.

Programao Orientada a Aspectos ( POA )

Composio
Programas escritos em linguagem de aspectos: deve atender s preocupaes sistmicas. Combinador de aspectos (aspect weaver): combina os programas escritos em linguagem de componentes com os escritos em linguagem de aspectos, essa atividade chamada de combinao aspectual.

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Caractersticas
Reflexo computacional: parte do cdigo gerado destinado a modificar caractersticas do prprio programa. Compiladores: destinados orientao a aspectos no geram um programa compilado e executvel, e sim um novo cdigo. Na primeira compilao so acrescidos elementos ao cdigo para dar suporte s novas abstraes. O cdigo resultante precisa ser recompilado gerando ento o produto final.

Programao Orientada a Aspectos ( POA )

Aspect Weaver
Responsvel por coordenar a combinao de aspectos e componentes. Ele recebe programas de componentes e de aspectos como entrada e gera um programa em linguagem de componentes como sada. Ocorre um problema chamado de Obliviousness.

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Combinao Aspectual
Esttica: no h necessidade de que os aspectos existam em tempo de compilao e execuo. Previne que um nvel adicional de abstrao cause um impacto negativo no desempenho do sistema. Dinmica: necessrio que os aspectos existam tanto em tempo de compilao quanto em tempo de execuo. Utilizando uma interface reflexiva, o combinador de aspectos pode adicionar, adaptar e remover aspectos em tempo de execuo.

Programao Orientada a Aspectos ( POA )

Conceitos
Pontos de Juno (Join points): so pontos especficos no fluxo de execuo de um programa, por exemplo, a ocorrncia de uma exceo, uma chamada a um mtodo, dentre outros. Possibilita inserir novos comportamentos e desviar o fluxo do programa. Todo ponto de juno est associado a um contexto, por exemplo, a chamada para um mtodo possui um objeto chamador, objeto alvo e os argumentos do mtodo disponvel como contexto.

Programao Orientada a Aspectos ( POA )

Conceitos
Pontos de Atuao (Point cuts): declara os pontos onde se deseja desviar a execuo de um programa para inserir outro comportamento. So usados para definir nomes para um ou mais pontos de juno, como uma espcie de regra que especifica aes que sero atribudas aos pontos de juno.

Programao Orientada a Aspectos ( POA )

Conceitos
Adendos (Advice): fazem parte da implementao de um aspecto e so executados em pontos bem especficos do programa principal (pontos de juno). So compostos pelo ponto de atuao e pelo cdigo que implementa o comportamento que ser executado quando ocorrer o ponto de juno definido pelo ponto de atuao.

Programao Orientada a Aspectos ( POA )

Conceitos
Adendos (Advice): um adendo associado a um ponto de atuao utilizando-se trs palavras reservadas denominadas:
Antes (before); Durante (around); Depois (after).

Programao Orientada a Aspectos ( POA )

Conceitos

Adendos (Advice): o adendo composto por trs partes: Declarao do ponto de atuao: indica sobre qual ponto de atuao o comportamento implementado no adendo ter efeito. Declarao do adendo: contm as palavras reservadas: before, after ou around. Assim como os mtodos, tambm pode possuir parmetros, porm no possui identificador prprio. Corpo do adendo: atua exatamente como o corpo de um mtodo, contendo o cdigo a ser executado. Tambm pode efetuar chamadas a outros mtodos.

Programao Orientada a Aspectos ( POA )

Conceitos
Aspectos: o aspecto o nvel de abstrao provido pela orientao a aspectos, que tem o objetivo de modularizar as partes do sistema referentes s preocupaes sistmicas, j que estas no so claramente modularizadas utilizando-se outros paradigmas. Pode-se considerar o aspecto parecido com uma classe.

Programao Orientada a Aspectos ( POA )

Conceitos
Aspectos: um programa orientado a aspectos usado com orientao a objetos tem como unidade principal o par aspecto-objeto, pois os objetos no deixam de existir, visto que a Orientao a Aspectos apenas um paradigma complementar. Nos objetos so implementadas as preocupaes funcionais e nos aspectos so tratadas as preocupaes sistmicas.

Programao Orientada a Aspectos ( POA )

Conceitos
Aspectos: O aspecto composto por duas partes principais: uma estrutura de point cuts (conjunto de pontos de juno declarados) e os adendos (comportamentos a serem inseridos no fluxo de execuo).

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Programao Orientada a Aspectos ( POA )

Ferramentas POA para JAVA


AspectJ: uma extenso direta da orientao a aspectos para a linguagem de programao Java. O AspectJ dividido em duas partes: a linguagem de especificao (define a linguagem na qual o cdigo escrito) e a linguagem de implementao.

Programao Orientada a Aspectos ( POA )

Ferramentas POA para JAVA

AspectJ: a partir da sua verso 5, foi acrescentado suporte ao estilo de programao baseado em anotao, tambm chamado de @AspectJ. Esse estilo faz uso das anotaes (Annotations) introduzidas na verso 5 da linguagem Java. As annotations fazem parte da linguagem Java e podem ser usadas para expressar meta-dados, podendo ser aplicadas para declarar tipos (classe, interface, etc), construtores, mtodos, campos, parmetros e variveis. No estilo @AspectJ, os aspectos so declarados como classes do Java, usando a anotao @Aspect para identificla como um aspecto.

Programao Orientada a Aspectos ( POA )

Ferramentas POA para JAVA


Spring AOP: um framework para POA que possibilita a implementao de aspectos customizados, complementando o uso da orientao a objetos com POA. O Spring AOP executado em Java puro, no necessitando de um processo especial de compilao. No Spring AOP pode-se optar entre dois estilos de programao: configurao XML Spring ou @AspectJ.

Programao Orientada a Aspectos ( POA )

Ferramentas POA para JAVA


JAC (Java Aspect Components): um projeto que consiste em desenvolver uma camada de aplicao Orientada a Aspectos. Este framework permite construir aspectos dinmicos e distribudos. Na filosofia do JAC, importante destacar que no necessrio programar aspectos para usar as caractersticas da Orientao a Aspectos. O JAC oferece um conjunto de aspectos com mtodos de fcil configurao.

Programao Orientada a Aspectos ( POA )

Ferramentas POA para JAVA

JAC (Java Aspect Components): H dois nveis de programao orientada a aspectos com JAC: Nvel de programao: onde pode-se programar novos aspectos. Neste nvel, os programadores podem criar novos aspectos para implementar as preocupaes sistmicas. Nvel de configurao: onde aspectos j existentes podem ser customizados para funcionar com aplicaes existentes. Este nvel suportado por uma linguagem de configurao com uma sintaxe genrica que permite que o programador chame mtodos de configurao em aspectos existentes.

Programao Orientada a Aspectos ( POA )

Benefcios

Reduo da quantidade de linhas programadas: o componente original no fica inchado com as linhas de cdigo referentes a outros componentes. Facilidade de manuteno: como o entrelaamento e o espalhamento de cdigo so evitados, as modificaes tornam-se mais simples. Aumento da reusabilidade de cdigo: como as classes ficam limpas, sem chamadas desnecessrias, torna-se fcil o reuso por no ser mais necessrio desintegrar o componente de um sistema para depois reintegr-lo a outro.

Programao Orientada a Aspectos ( POA )

Benefcios

Maior coeso e menor acoplamento entre os objetos: a coeso obtida, pois cada componente
implementado realiza uma preocupao bem definida e a reduo de acoplamento ocorre, pois a POA possibilita uma maior independncia entre os componentes. O objetivo final da POA reduzir a complexidade no desenvolvimento de software, por meio do uso da Separao de Preocupaes, permitindo que as diversas preocupaes possam ser modularizadas independentemente de serem funcionais ou sistmicas.

Programao Orientada a Aspectos ( POA )

Questes
1 Exemplifique um cdigo sem POA e outro com POA. 2 O que um designador, e quais so eles na POA? 3 Exemplifique a assinatura de cada designador.

Programao Orientada a Aspectos Resposta ( POA ) Questo 1

Programao Orientada a Aspectos Resposta ( POA ) Questo 1

Programao Orientada a Aspectos Resposta ( POA ) Questo 1

Programao Orientada a Aspectos Resposta ( POA ) Questo 1

Programao Orientada a Aspectos Resposta ( POA ) Questo 2


Um designador um elemento encontrado no ponto de atuao que identifica o tipo de comportamento que um ponto de juno deve ter para que possa ser capturado.

Programao Orientada a Aspectos Resposta ( POA ) Questo 2


Designador
Execution Call Initialization

Descrio
Corresponde execuo de um mtodo ou de um construtor Corresponde chamada para um mtodo ou para um construtor Corresponde inicializao de um objeto, representada pela execuo do primeiro construtor para uma classe Corresponde manipulao das excesses Corresponde referncia para um atributo de uma classe Corresponde definio de um atributo de um classe Retorna o objeto associado com o ponto de juno em particular ou limita o escopo de um ponto de juno utilizando um tipo de classe Retorna o objeto alvo de um ponto de juno ou limita o escopo do mesmo Expe os argumentos para o ponto de juno ou limita o escopo de um ponto de atuao

Designador
Cflow

Descrio
Retorna os pontos de juno na execuo do fluxo de outro ponto de atuao Retorna os pontos de juno na execuo do fluxo de outro ponto de atuao, exceto o ponto corrente Corresponde inicializao dos elementos estticos de um objeto Corresponde aos pontos contidos em um mtodo ou construtor Corresponde aos pontos de juno contidos em um tipo especfico Permite que uma condio dinmica faa parte de um ponto de atuao Corresponde ao adendo (advice) do ponto de juno Corresponde pr-inicializao de um ponto de juno

Cflowbelow

Staticinitialization Withincode Within If Adviceexecution Preinitialization

Handler Get Set This

Target Args

Programao Orientada a Aspectos Resposta ( POA ) Questo 3

Programao Orientada a Aspectos ( POA )

Perguntas?

You might also like