Вы находитесь на странице: 1из 8

Programao Orientada a Aspectos

Fabiano Gama Paes


1
, Mikael de Souza Fernandes
1

1
Curso de Sistemas de Informao
Universidade Luterana do Brasil (Ulbra) Santa Maria, RS Brasil

fabianopaes@ulbra.br, mikaelfernandes@ulbra.br

Abstract. This article tells a recent paradigm of programming: the Paradigm Oriented
to Aspects. Being explained through concepts of Engineering of Software and
Programming Oriented to Objects. Still it presents the predominant language of such
paradigm, AspecJ, through its properties and one brief implementation.

Resumo. Este artigo relata um recente paradigma de programao: o Paradigma
Orientado a Aspectos. Sendo contextualizado atravs de conceitos de Engenharia de
Software e Programao Orienta a Objetos. Ainda apresenta a linguagem
predominante de tal paradigma, AspecJ, atravs de suas propriedades e uma breve
implementao.

1. Introduo

Com a evoluo das tecnologias o produto software tem se tornado cada vez
mais importante para as organizaes, sendo que atualmente inmeras destas tarefas no
seria possvel a execuo sem a presena de um sistema de informao que automatize
tais tarefas.
Neste mbito a tarefa de desenvolver software torna-se cada vez mais complexa,
problemas maiores so identificados, com isso a Engenharia de Software vem para
propiciar a desenvolvedores um melhor arcabouo na desgastante tarefa de agregar ao
software a maior qualidade possvel.
Para Sommerville (204) Engenharia de Software uma disciplina que se ocupa
de todos os aspectos da produo do software, desde os estgios iniciais de
especificao do sistema at a manuteno desse sistema, depois que ele entrou em
operao, trabalha com ferramentas, mtodos e processos para o desenvolvimento do
software.


Figura 1. Diviso da Engenharia de Software

A figura acima demonstra como a Engenharia de Software uma tecnologia que
podemos dividir em camadas, conforme Pressman (2005) os processos so uma espcie
de adesivo que mantm unidas as camadas de tecnologia e permite o desenvolvimento
racional e oportuno de software, os mtodos constituem a tcnica de como fazer para
construir softwares e por fim, as ferramentas fornecem apoio automatizado ou semi-
automatizado para os processos e mtodos.
Segundo Puga e Riseta (2003), podemos encaixar como principais mtodos
utilizados no desenvolvimento de software paradigmas como: Programao Monoltica,
Programao Imperativa, Programao Orientada a Objetos, sendo que nos ltimos anos
uma nova metodologia vem ganhando importncia no mundo da engenharia de
software, a assim chamada de Programao Orientada a Aspectos (POA).
Sendo assim este artigo destina-se ao um levantamento terico e prtico
buscando um maior conhecimento sobre esta nova forma de se pensar o software, uma
vez que conforme Resende e Silva (2005) a Engenharia de Software no tem ainda um
processo bem definido para a utilizao da programao orientada a aspectos.


2. Mtodos

Neste contexto um dos aspectos mais importantes so os Mtodos da Engenharia
de Software, uma abordagem estruturada para o desenvolvimento de software, cujo
objetivo facilitar a produo de software de alta qualidade, apresentando uma boa
relao custo benefcio (SOMMERVILLE, 2003). Onde inicialmente, na dcada de 70,
era representado pelo Mtodo Estruturado que identifica sistemas de software em
funes; complementando, nas dcadas de 80 e 90, desenvolve-se o Mtodo Orientado a
Objetos que possui significativa atuao at os dias atuais.
Sendo assim, a Engenharia de Software vem evoluindo com o mbito de
propiciar a desenvolvedores uma maior facilidade na analise de requisitos, o que antes
era desenvolvido em forma de procedimentos em funes ganha uma nova maneira de
ser analisado, dividindo-se principalmente em classes, a tabela a seguir demonstra um
comparativo entre os mtodos tradicionais utilizados na programao.

Tabela 1. Paralelo entre os tipos de programao


medida que aumenta a complexidade dos sistemas de software surge a
necessidade de melhores tcnicas de programao objetivando organizar e apoiar o
processo de desenvolvimento de software, logo o paradigma Orientada a Aspectos vem
sendo estudado no meio acadmico, o qual tornou-se a maior fonte referente ao assunto,
atravs de pesquisas

A programao orientada a aspectos uma metodologia recente e
inovadora no desenvolvimento de software. Nos ltimos anos,
aprimoramentos e a utilizao dessa metodologia esto ocorrendo de
forma crescente, sendo em sua maioria realizados no meio acadmico,
j que ainda no se tornou plena a utilizao no meio empresarial
(XAVIER,2006)


A POA programao orientada a aspectos surgiu da carncia que os
paradigmas atuais apresentam em relao h uma separao adequada dos interesses
comuns, pois atualmente muitas vezes ocorre o entrelaamento entre interesses distintos
no sistema. Este entrelaamento causa dificuldade no desenvolvimento, na manuteno
e no reuso de partes do cdigo-fonte.
Atualmente a programao orientada a objetos a metodologia mais utilizada
para o desenvolvimento de software, caracterizada por enxergar o mundo real como um
conjunto de objetos que interagem entre si (classes) apresentando caractersticas e
comportamento prprio representado pelos seus atributos e mtodos, ainda introduz
novos conceitos importantes na programao como: herana, polimorfismo,
encapsulamento. Sendo assim ela colaborou significativamente em torno da criao de
meios para facilitar a gerao de cdigos principalmente no que se refere a capacidade
de dividir o problema (WINCK & JUNIOR, 2006).
Entretanto, esses novos conceitos no satisfazem todas as necessidades dos
desenvolvedores atuais, a definio do que far parte de uma classe ou de outra tem
dificultado o desenvolvimento Orientado a Objetos, somando-se a isso podemos
acrescentar o fato da herana (compartilhamento de atributos e operaes entre classes
com base em um relacionamento hierrquico) no manter uma coerncia conceitual.
Identificamos assim um maior entrelaamento entre as classes, o qual deveria ser
minimizado. Pois aumenta a complexidade no desenvolvimento de software,
acarretando redundncias, fraca coeso, forte acoplamento e principalmente dificuldade
de compreender, manter e reutilizar cdigos.

Quando abordagens orientadas a objetos so utilizadas para o
desenvolvimento de sistemas complexos, nota-se que os seus
requisitos no so claramente separados em um nvel adequado. Isso
acontece porque existem propriedades que no devem ser
encapsuladas totalmente numa unidade funcional, como uma classe,
pois participam de vrias dimenses do sistema, vrias classes.
(Monteiro, Filipakis, 2004)

Sem o uso de tcnicas apropriadas para a separao de interesses e modularizao
alguns fenmenos so passiveis de observao e podem ser classificados nas seguintes
categorias:
Cdigo entrelaado (code tangling) acontece quando a implementao de um
modulo em um sistema de software interage simultaneamente com vrios
interesses do sistema.
Cdigo espalhado (code scattering) acontece quando um interesse
implementado em mltiplos mdulos. Desde que interesses transversais
(crossuting concerns) por definio so espelhados por vrios mdulos, logo sua
implementao tambm se espalha por todos estes mdulos.

Para solucionar essas carncias encontradas nos paradigmas atuais a POA
introduz um conceito diferenciado dos demais paradigmas, pois atravs dela que
podemos separar ou modularizar diferentes interesses em aspectos tais como, por
exemplo: persistncia de dados, interface, segurana, distribuio, auditoria, registros de
logs, controle de concorrncia, tratamento de erros entre outros.
3. Programao Orientada a Aspectos
Desenvolvida inicialmente no ano de 1996 por Gregor Kickzales, enquanto
funcionrio no Xerox Alto Research Center uma proposta para facilitar a
modularizao dos interesses transversais. Assim complementando a Programao
Orientada a Objetos, ela no tem o intuito de ser um novo paradigma autnomo, mas
sim uma nova metodologia que deve aliar-se ao POO.
Para uma implementao bsica orientada a aspectos necessita-se de uma
linguagem para programar os componentes, usualmente Java, uma linguagem para
programar os aspectos (sendo a mais disseminada a AspectJ) e um weaver para
combinar as duas linguagens (ferramenta que tambm faz parte do AspectJ). O weaver
funciona como uma espcie de montador onde so inseridos um programa de
componentes e os programas de aspectos e como sada um programa em uma linguagem
especfica (Java).
A POA apropria-se da idia de que sistemas de software podem se tornar
menores enquanto mais bem desenvolvidos, atravs da separao de funes especficas
em diferentes partes do sistema, denominadas de crooscuting concerns, como j
mencionado anteriormente. Logo, ela representa um cdigo menos complexo, assim,
tornando-o mais simples e principalmente de fcil entendimento, o que sem dvida
colabora significativamente para o projeto e sua manuteno.
Em Programao Orientada a Aspectos alguns conceitos diferentes dos
encontrados nas de mais paradigmas so evidenciados, tais como: aspect, joinpoints,
pointcuts, introductions, advices, caracterizados a seguir.

3.1 Aspectos - aspects

Aspects possuem semelhanas e diferenas com as classes (POO). Como
semelhanas: podem ser estendidos, abstratos ou concretos e possuem um tipo, atributos
e mtodos. Ainda, como diferenas: no possuem um construtor, destrutor e podem
conter pointcuts e advices como atributos.

Um aspecto deve ser visto como um componente que contm uma estrutura de
pointcuts (um conjunto de pontos de juno declarados) que podem
convenientemente executar advices (outra funo que no pertence ao fluxo
normal do programa) (RESENDE & SILVA, 2005).

Conseqentemente pode-se afirmar que atravs dos joinpoints e advices, um
aspecto capaz de encapsular interesses comuns de todo um sistema.


3.2 Pontos de juno joinpoints

Constituem um ponto bem definido no fluxo de execuo de um programa para
controlar o fluxo interrompendo o seu curso natural para insero de novas rotinas ou
funes.

Os pontos de juno compem a base da programao Orientada a Aspectos.
Utilizando-se de joinpoints determinam-se quais os mtodos tero suas
chamadas e/ou execues interceptadas, aplicando-se comparao de assinatura
dos mtodos. Alm das assinaturas pode-se utilizar tambm a finalidade do
mtodo, como , por exemplo, selecionar apenas mtodos gets ou sets, ou
construtores de uma determinada classe (RESENDE & SILVA, 2005)

Todos os pontos de juno possuem um contexto associado, por exemplo, a
chamada para um mtodo possui um objeto chamador, o objeto alvo e os argumentos do
mtodo disponvel como contexto.
Em AspectJ, joinpoints podem ser acessos a mtodos e atributos de uma classe,
ainda eles podem conter outros joinpoints.

3.3 Pontos de corte pointcuts

Os pointcuts correspondem a agrupamentos de jointpoints, sendo que estes
devem basear-se num critrio bem definidos.
Sendo que assemelha-se a membros de classes em Java, eles podem ser
declarados pblicos, privados ou final, mas no podem ser sobrecarregados. Tambm
podem ser declarados abstratos, mas somente dentro de aspectos abstratos, e ainda
podem ser nomeados ou annimos. A declarao de um pointcut nomeado deve seguir a
seguinte sintaxe:

pointcut <Nome> (Argumentos): <corpo>;

O pointcut contm em seu corpo assinaturas e uma construo que pode definir
um conjunto de tipos, denominados como padro tipo (Type Pattern). Estes so
manipuladas por caracteres especiais (conforme ilustrado no quadro abaixo),
denominados coringas (Wildcards), os quais possuem a capacidade de incluir mais um
ponto de juno no pointcut.

Tabela 2. Tipos de caracteres especiais
Caractere Significado
* Qualquer sequncia de caracteres no contendo pontos
(..) Qualquer sequncia de caracteres, inclusive contendo pontos
+ Qualquer subclasse de uma classe.

Somando-se a isso, o pointcut pode ser aninhado com outro pointcut atravs dos
trs operadores lgicos: e, ou e no, correspondendo a &&, || e ! respectivamente.
Ainda na assinatura de um pointcut preciso identificar o momento em que o
mtodo ser capturado. Para isso, so chamados designadores de pointcut (pointcut
designators) (SOARES & BORBA, 2005). Esses designadores podem ser identificados
conforme mostrado no tabela 3.

Tabela 3. Tipos de designadores


3.4 Introdues - introductions

A POA alm de alterar a execuo natural de um sistema, possui a capacidade de
introduzir novos atributos, mtodos construtores a estrutura de uma classe.



3.5 Advices

So trechos de cdigo associados a pointcuts, que injetam um novo
comportamento em todos os joinpoints, representados pelo pointcut, dividindo-se em
vrios tipos que correspondem ao momento de ao do referente ponto de corte
(pointcut), conforme a Tabela 4.

Tabela 4. Tipos de


E por fim, na literatura encontra-se que a programao orientada a aspectos
pode ser dividida fases. Variando quanto ao nmero, sendo conveniente (mais
detalhado) em trs fases: (1) decomposio, (2) implementao e (3) recomposio. A
primeira fase a responsvel pela identificao e classificao dos diversos concerns do
sistema, classificados como crosscuting ou comuns. Na seqncia, (2) implementao,
onde os concerns, conforme sua classificao, so implementados em classes (concerns
comuns) e aspectos (crosscuting concerns). E a ltima fase, a (3) recomposio,
tambm chamada de weaving, onde o sistema baseado nos concerns implementados
recomposto segundo regras pr-definidas.

4. Implementao da Programao Orientada a Aspectos

Para dar forma aos conceitos at ento apresentados implementou-se uma classe
(OlaMundo) e um aspecto (NovoAspecto). Primeiramente a classe, conceito especifico
da Orientao a Objeto, possui apenas como funcionalidade o retorno em tela da
mensagem "Hello Word!" conforme pode-se identificar na figura X.


Figura 2. Classe (POO)

Entretanto, a partir do momento que se aplica os conceitos de POA atravs de
sua implementao, a classe denominada OlaMundo ter seu comportamento ou
alterada..


Figura 3. Aspecto (POA)

Como pode-se observar a declarao de um Aspecto extremamente semelhante
a de uma Classe, neste exemplo verificamos uma aspecto do tipo pblico, o qual possui
seu corpo delimitado por chaves, onde encontra-se as declaraes de pointcut e advices.
O primeiro (pointcut), denominado de pc, determina atravs de um designador (call)
que os joinpoints corresponderam a todos os mtodos Main independentes de
argumentos, logo este aspecto ir ser executado toda vez em que um mtodo Main for
evocado. Aps, encontramos os advices, um before que refere-se ao pointcut acima,
determina a execuo do seguinte trecho de cdigo antes da execuo do referido
joinpoint, e um after sendo executado apos o joinpoint. Logo, a sada em tela ao
executar-se a classe ("Olamundo"), ser, primeiramente do advice before ("Antes do
Main..."), "HelloWorld" e, por fim "Aps o Main", referente ao advice after.

5. Concluso

A POA agrega valores inovadores no desenvolvimento de software, com isso
pode-se afirmar que esta nova forma de programar no corresponde a um novo
paradigma, mas sim um complemento de um paradigma predominante (programao
orientada a objetos).
Dentre seus benefcios, pode-se focar na modularizao do programa, uma vez
que a partir do momento em que ela possui a capacidade de agrupar vrios interesses em
um nico aspecto, dividindo o problema em partes menores, ela vem a colaborar
significativamente no que diz respeito a modularizao de um programa. Pois contribui
diretamente no que diz respeito reduo do espalhamento e o entrelaamento de
cdigo-fonte por vrios componentes, assim, reduzindo a complexidade de tal cdigo-
fonte, tornando-o mais simples e de fcil entendimento, conseqentemente, facilitando
tambm em sua manuteno e reusabilidade.
Para o desenvolvimento orientado aspectos a linguagem AspectJ mais popular,
sendo esta uma adaptao da linguagem Java para permear tal desenvolvimento. Ela
permite funcionalidades poderosas atravs de aes simples, mesmo estando em
processo de amadurecimento, atualmente ela encontra-se em verses bastante robustas.
Por conseguinte, a Programao Orientada a Aspectos vem em uma crescente
ascenso seja no campo de estudo ou de programao propriamente dita, pois sendo
agregada ao Paradigma Orientado a Objetos torna ainda mais eficaz o desenvolvimento
de software.



6. Referncias

Somerville, Ian. (2005) Software engineering, Editora Pearson Addison Wesley, 6
Edio.

Pressman, Roger S. (2005) Engenharia de Software. So Paulo: McGraw-Hill.

Monteiro, Elaine da Silva; Filipakis, Cristina D'ornellas. (2004) Um estudo sobre
modelagem Orientada a Aspectos baseada em AspectJ e UML. In: IV Jornada de
Iniciao Cientfica do Centro Universitrio Luterano de Palmas, Palmas. Anais do
IV Jornada de Iniciao Cientfica do Centro Universitrio Luterano de Palmas.
p.146-148.

Xavier, Rogrio Azambuja; Becker, Alexandre. (2006) Orientao a aspectos: Uma nova
metodologia no desenvolvimento de software. CRICT'2006 -Congresso de iniciao
Cientifica e Tecnolgica realizado na UNIJUI - Ijui/RS.

Resende, Antonio Maria Pereira de; Silva, Claudiney Calixto da. (2005) Programao
Orientada a Aspectos em Java. Rio de Janeiro: Brasport.

Puga, Sandra; Rissetti, Gersib. (2003) Lgica de Programao e Estrutura de Dados. Cap
4. So Paulo: Prentice Hall.

Wink, Diogo Vinicius; Junior, Vicente Goetten.(2005) AspectJ: Programao Orientada a
Aspectos com Java.

SOARES, Srgio; BORBA, Paulo. AspectJ - Programao Orientada a Aspectos em Java.
Disponvel em maio de 2007.
http://twiki.cin.ufpe.br/twiki/pub/SPG/GenteAreaPublications/SBES04_soares.pdf

Вам также может понравиться