programação oritentada a aspecto

50
Benício Ávila Freitas Lourenço De Brito Orientador : João Frederico Roldan Viana

Upload: benicio-avila

Post on 22-Jan-2018

125 views

Category:

Software


0 download

TRANSCRIPT

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ãolimitados pela sua própria “filosofia” de atuação.

Alguns problemas graves, tais como oespalhamento de código, em conjunto com aslimitações humanas, tornam o código confuso emuito difícil de manter, alterar ou melhorar.

O espalhamento de código pode ser resultante daimplementação de várias funcionalidades taiscomo logging, profiling, etc.

Para tentar dar resposta a estes problemasapareceu a Programação Orientada a Aspectos.

Na evolução dos paradigmas de desenvolvimento de software évisto a constante busca de separações de interesses bemdefinidos.

O termo separação de interesses foi criado pelo cientista EdsgerDijkstra em 1974, com o objetivo de orientar que todo sistemadeveria ser separado em partes onde cada parte seria umafuncionalidade do sistema.

Todo sistema de software lida com diferentes interesses, sejameles dados, operações, ou outros requisitos do sistema.

O ideal seria que a parte do programa dedicada a satisfazer aum determinado interesse estivesse concentrada em umaúnica localidade física, separada de outros interesses, paraque o interesse possa ser estudado e compreendido comfacilidade.

Fonte: Tekinerdogan (2001)

Desenvolvimento Estruturado

Difundida a técnica de separação de interesses se orientado atravésde módulos.

Cada módulo corresponde a uma funcionalidade do sistema.

Nesse período que surgiram os principais conceitos demodularização como baixo acoplamento e alta coesão.

Com isso o problema de modularização com respeito afuncionalidades foi resolvido porém interesses relativos a dadosficavam distribuídos em vários desses módulos,dai surgiu umnovo paradigma chamado de programação orientado a objetos(POO).

Desenvolvimento Orientado a Objeto

Modularização deveria acontecer tanto em relação a dadoscomo em relação a funcionalidades do sistema.

A POO mudou a forma de desenvolvimento utilizandoconceitos de abstração do mundo real e com isso surgiramas classes, objetos e etc.

Porém a POO não resolveu todas as deficiências, aindacontinuou com o problema de espalhamento de códigodevido a interesses transversais que não são modularizados.

Fonte: Torsten (2008)

O trabalho inicial que levou a programaçãoorientada a aspecto foi feito em universidadede várias partes do mundo.

Os primeiros colaboradores foram CristinaLopes e Gregor Kiczales do Palo Alto ResearchCenter (PARC), uma subsidiária da XeroxCorporation.

Gregor criou em 1996 o termo POA(programação orientando a aspecto).

No final dos anos 90 foi o responsável porliderar a equipe na Xerox na criação doAspectJ, que foi uma das primeirasimplementações das práticas de POA.

Atualmente o projeto foi transferido para acomunidade de código aberto eclipse.org,que deu continuidade ao trabalho de suportee 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 assimdiminui 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 comorecompor o sistema

Nessa fase acontece a criação de unidades ouos aspectos

O resultado dessa fase é a integração, tambémconhecido como weaving (tecelagem), dosmódulos com os aspectos de acordo com anecessidade 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 bytecodesJava.

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 decorte e advice.

assemelha bastante com uma classe e podeter 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 pontosindicativos de onde no código-fonte ométodo é chamado.

o ponto de execução de métodos é o corpodos 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!