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.
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