12.07.2015 Views

Protótipo de um weaver para programação orientada a aspectos em ...

Protótipo de um weaver para programação orientada a aspectos em ...

Protótipo de um weaver para programação orientada a aspectos em ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

AOPDelphi – Protótipo <strong>de</strong> <strong>um</strong> <strong>weaver</strong> <strong>para</strong> programação<strong>orientada</strong> a <strong>aspectos</strong> <strong>em</strong> DelphiEdmar Soares <strong>de</strong> Oliveira, Marcel HugoDepartamento <strong>de</strong> Sist<strong>em</strong>as e ComputaçãoUniversida<strong>de</strong> Regional <strong>de</strong> Bl<strong>um</strong>enal (FURB) – Bl<strong>um</strong>enau, SCedmar.mg@gmail.com, marcel@furb.brRes<strong>um</strong>o. Este trabalho apresenta <strong>um</strong>a ferramenta <strong>de</strong> suporte à programação<strong>orientada</strong> a <strong>aspectos</strong> na linguag<strong>em</strong> Delphi. É composto por <strong>um</strong>a linguag<strong>em</strong> <strong>de</strong>programação <strong>orientada</strong> a <strong>aspectos</strong> e <strong>um</strong> <strong>weaver</strong>. A ferramenta recebe comoentrada <strong>um</strong> projeto Delphi, <strong>um</strong> ou mais programas <strong>de</strong> <strong>aspectos</strong> e gera <strong>um</strong>projeto Delphi mesclando as funcionalida<strong>de</strong>s dos programas <strong>de</strong> entrada.1. IntroduçãoAo longo dos últimos anos, a Engenharia <strong>de</strong> Software t<strong>em</strong> disponibilizado <strong>para</strong> os<strong>de</strong>senvolvedores vários métodos, técnicas e ferramentas, <strong>para</strong> auxiliá-los a produzir commaior qualida<strong>de</strong>. Entre as características perseguidas, a busca pela reusabilida<strong>de</strong> <strong>em</strong>anutenibilida<strong>de</strong> são as mais importantes <strong>para</strong> a produtivida<strong>de</strong> (RESENDE; SILVA,2005). Nessa evolução se <strong>de</strong>staca o surgimento da orientação a objetos, on<strong>de</strong> houve <strong>um</strong>amudança radical na maneira <strong>de</strong> se <strong>de</strong>senvolver software. Porém, com o crescimento dossist<strong>em</strong>as e conseqüent<strong>em</strong>ente o a<strong>um</strong>ento <strong>de</strong> sua complexida<strong>de</strong>, surgiram probl<strong>em</strong>as,como entrelaçamento e espalhamento <strong>de</strong> código, que os métodos propostos pelaorientação a objetos não são totalmente eficazes <strong>para</strong> resolver (KICZALES et al., 1997).Assim nasceu a programação <strong>orientada</strong> a <strong>aspectos</strong> (POA), com o objetivo <strong>de</strong> apresentartécnicas capazes <strong>de</strong> cobrir essas falhas.A POA trabalha com o princípio <strong>de</strong> se<strong>para</strong>ção <strong>de</strong> interesses (se<strong>para</strong>tion ofconcerns), que prega que as preocupações envolvidas no <strong>de</strong>senvolvimento <strong>de</strong> <strong>um</strong>software <strong>de</strong>v<strong>em</strong> ser focadas e trabalhadas se<strong>para</strong>damente, concentrando <strong>em</strong> <strong>um</strong>a <strong>de</strong> cadavez, reduzindo a probabilida<strong>de</strong> <strong>de</strong> ocorrência <strong>de</strong> erros <strong>em</strong> cada módulo econseqüent<strong>em</strong>ente no sist<strong>em</strong>a como <strong>um</strong> todo (KULESZA; SANT’ANNA; LUCENA,2005). Estes conceitos favorec<strong>em</strong> a reusabilida<strong>de</strong> e manutenibilida<strong>de</strong> do software. É<strong>um</strong>a tecnologia criada <strong>para</strong> a impl<strong>em</strong>entação <strong>de</strong> interesses transversais (crosscutingconcerns), que são aqueles cuja impl<strong>em</strong>entação atravessam os componentesresponsáveis pela modularização do sist<strong>em</strong>a (RESENDE; SILVA, 2005).A POA oferece <strong>um</strong>a estrutura que encapsula impl<strong>em</strong>entações <strong>de</strong> <strong>um</strong>aresponsabilida<strong>de</strong> que ficariam espalhadas no mo<strong>de</strong>lo orientado a objetos. Esta unida<strong>de</strong> échamada <strong>de</strong> aspecto (NELSON, 2005). Para <strong>um</strong>a impl<strong>em</strong>entação básica <strong>de</strong> POA, énecessário: <strong>um</strong>a linguag<strong>em</strong> <strong>para</strong> programação dos componentes, como por ex<strong>em</strong>plo oJava; <strong>um</strong>a linguag<strong>em</strong> <strong>para</strong> programação dos <strong>aspectos</strong>, como o AspectJ; <strong>um</strong> <strong>weaver</strong>; <strong>um</strong>programa <strong>de</strong> componentes e <strong>um</strong> programa <strong>de</strong> <strong>aspectos</strong> (STEINMACHER, 2001). O<strong>weaver</strong> (ou montador) é o combinador <strong>de</strong> <strong>aspectos</strong>. Sua função é combinar os programasescritos <strong>em</strong> linguag<strong>em</strong> <strong>de</strong> componentes, no caso, as regras <strong>de</strong> negócio impl<strong>em</strong>entadas


com orientação a objeto, com os escritos <strong>em</strong> linguag<strong>em</strong> <strong>de</strong> aspecto. O resultado será <strong>um</strong>programa mesclando as funcionalida<strong>de</strong>s impl<strong>em</strong>entadas nos programas <strong>de</strong> componentese aspecto (GROTT, 2005).Na POA não há chamada explícita <strong>de</strong> métodos entre as partes. Ao invés disso, éespecificada <strong>em</strong> <strong>um</strong>a unida<strong>de</strong> se<strong>para</strong>da, como <strong>um</strong>a parte <strong>de</strong>ve reagir a eventos queocorr<strong>em</strong> <strong>em</strong> outra parte (NELSON, 2005).Este artigo apresenta o <strong>de</strong>senvolvimento <strong>de</strong> <strong>um</strong> protótipo <strong>de</strong> <strong>um</strong> <strong>weaver</strong> <strong>para</strong>geração <strong>de</strong> código na linguag<strong>em</strong> Delphi com suporte a programação <strong>orientada</strong> a<strong>aspectos</strong>. Por se tratar <strong>de</strong> <strong>um</strong>a ferramenta <strong>de</strong> engenharia <strong>de</strong> software, ela é voltada <strong>para</strong> o<strong>de</strong>senvolvedor. A ferramenta recebe como entrada <strong>um</strong> arquivo <strong>de</strong> projeto do Delphi(arquivo .dpr), e <strong>um</strong> ou mais programas na linguag<strong>em</strong> <strong>de</strong> aspecto AOPDelphi, que foicriada neste trabalho. A ferramenta realiza análises léxica e sintática dos programas <strong>de</strong><strong>aspectos</strong> fornecidos como entrada. Como saída, gera programas fontes na linguag<strong>em</strong>Delphi, mesclando as funcionalida<strong>de</strong>s dos programas fornecidos como entrada. Este<strong>weaver</strong> foi <strong>de</strong>senvolvido baseado no AspectJ 1 .2. Linguag<strong>em</strong> AOPDelphiA linguag<strong>em</strong> AOPDelphi é <strong>um</strong>a linguag<strong>em</strong> não case sensitive. Apesar <strong>de</strong> ter sidoinspirada na linguag<strong>em</strong> <strong>de</strong> <strong>aspectos</strong> do AspectJ, sua sintaxe e seus comandos sãos<strong>em</strong>elhantes aos da linguag<strong>em</strong> Delphi, pois ela é <strong>um</strong>a extensão <strong>de</strong>ssa última linguag<strong>em</strong>.2.1 EspecificaçãoPara especificação da linguag<strong>em</strong> foi utilizada a ferramenta GALS (GESSER, 2003). As<strong>de</strong>finições regulares <strong>de</strong> auxílio <strong>para</strong> <strong>de</strong>finição <strong>de</strong> tokens, ostokens e a gramática dalinguag<strong>em</strong> foram <strong>de</strong>finidas nesta ferramenta. Baseado nessas especificações o GALSgera os fontes dos analisadores léxico e sintático da linguag<strong>em</strong>.Na <strong>de</strong>finição da gramática foi utilizada a notação Backus-Naur Form (BNF). Oquadro 1 apresenta a gramática da linguag<strong>em</strong> AOPDelphi e alg<strong>um</strong>as <strong>de</strong>finiçõesregulares por ela utilizada.1 ¡ £ ¥ ¡ ¨AspectJ é <strong>um</strong>a ferramenta <strong>de</strong> apoio a programação <strong>orientada</strong> a <strong>aspectos</strong> na linguag<strong>em</strong> Java que possui o seu<strong>de</strong> <strong>aspectos</strong>.e sua linguag<strong>em</strong>


ex<strong>em</strong>plo do quadro 2, i<strong>de</strong>ntificado por logInsert, está se referindo ao métodoInsert da classe Arquivo, não importando quais sejam os parâmetros.2.2.2 AdviceOs advices são construções s<strong>em</strong>elhantes aos métodos na orientação a objetos e sãoassociados aos pointcuts. Eles contêm o código que será inserido no ponto <strong>de</strong> junçãoquando o pointcut correspon<strong>de</strong>nte for atingido. Po<strong>de</strong>m ser executados antes ou <strong>de</strong>poisdo método interceptado (KULESZA; SANT’ANNA; LUCENA, 2005). Todo pointcut<strong>de</strong>ve possuir <strong>um</strong> ou dois advices.Na linguag<strong>em</strong> AOPDelphi, o código Delphi contido no advice não é analisadopelo compilador. A linguag<strong>em</strong> permite que seja capturado o objeto que invocou ométodo interceptado, po<strong>de</strong>ndo utilizá-lo no escopo do advice, através da palavra self,como se tivesse sido criado localmente, porém é <strong>um</strong>a referência do objeto que chamou ométodo. No aspecto ex<strong>em</strong>plificado no quadro 2, t<strong>em</strong>-se a impl<strong>em</strong>entação <strong>de</strong> <strong>um</strong> advicedo tipo before associado ao pointcut logInsert. Conforme o ex<strong>em</strong>plo, o códigoShowMessage(‘Olá Mundo!’) será executado antes da execução do métodoInsert da classe Arquivo.3. AOPDelphiO AOPDelphi é <strong>um</strong>a ferramenta que provê suporte à programação <strong>orientada</strong> a <strong>aspectos</strong><strong>para</strong> a linguag<strong>em</strong> Delphi e é composta por <strong>um</strong>a linguag<strong>em</strong> <strong>de</strong> aspecto e <strong>um</strong> <strong>weaver</strong>. O<strong>weaver</strong> é o combinador <strong>de</strong> <strong>aspectos</strong>. Sua função é combinar os programas escritos <strong>em</strong>linguag<strong>em</strong> <strong>de</strong> componentes, no caso, as regras <strong>de</strong> negócio impl<strong>em</strong>entadas comorientação a objeto, com os escritos <strong>em</strong> linguag<strong>em</strong> <strong>de</strong> <strong>aspectos</strong>, gerando <strong>um</strong> programaque mescle as funcionalida<strong>de</strong>s <strong>de</strong>finidas nesses programas <strong>de</strong> entrada. Este processo échamado <strong>de</strong> weaving (GROTT, 2005).A ferramenta foi impl<strong>em</strong>entada utilizando a linguag<strong>em</strong> <strong>de</strong> programação Delphino ambiente Borland Delphi 7. Na impl<strong>em</strong>entação do compilador dos programas <strong>de</strong><strong>aspectos</strong> foi utilizada também a ferramenta GALS (GESSER, 2003). Através <strong>de</strong>le foramgeradas as classes <strong>para</strong> a impl<strong>em</strong>entação dos analisadores léxico e sintático, e a interfaceda classe do analisador s<strong>em</strong>ântico. Isso é feito com base nas <strong>de</strong>finições regulares,palavras reservadas, símbolos especiais, gramática e outras informações que sãofornecidas como entrada na ferramenta.Na figura 1 é apresentado o diagrama <strong>de</strong> ativida<strong>de</strong>s do AOPDelphi on<strong>de</strong> estãoespecificadas suas funcionalida<strong>de</strong>s <strong>de</strong> forma geral. Ele está dividido <strong>em</strong> duas raias,representadas pelo <strong>de</strong>senvolvedor e a ferramenta, com suas respectivas ativida<strong>de</strong>s.


Figura 1: Diagrama <strong>de</strong> ativida<strong>de</strong>s da ferramenta AOPDelphiConforme o diagrama da figura 1, após impl<strong>em</strong>entar e informar à ferramenta osprogramas <strong>de</strong> entrada, o programa <strong>de</strong> componentes (arquivo .dpr) é compilado <strong>para</strong>certificar <strong>de</strong> que não contenha erros <strong>de</strong> compilação. Em seguida são compilados osprogramas <strong>de</strong> <strong>aspectos</strong> e organizados <strong>em</strong> objetos as informações necessárias <strong>para</strong>realizar o processo <strong>de</strong> weaving. Não encontrando erros no processo <strong>de</strong> compilação, aferramenta faz <strong>um</strong>a cópia dos fontes do programa <strong>de</strong> componente fornecido na entrada.As alterações realizadas pelo <strong>weaver</strong> são feitas no programa cópia.Em seguida é realizado o processo <strong>de</strong> weaving. Baseado nos pointcuts extraídos<strong>em</strong> cada aspecto, a ferramenta gera expressões regulares <strong>para</strong> varrer os fontes do projetoDelphi, localizar os joinpoints que <strong>de</strong>v<strong>em</strong> ser interceptados e impl<strong>em</strong>entar a alteraçãoescrita no respectivo advice. Para trabalhar com expressões regulares, foi utilizada abiblioteca RegExp Studio (SOROKIN), que é <strong>um</strong>a biblioteca freeware <strong>para</strong> uso <strong>de</strong>expressões regulares no Delphi. Finalizado o processo <strong>de</strong> weaving, o projeto alterado écompilado e se não houver erros <strong>de</strong> compilação o programa é executado. Havendo erros,é informado pela ferramenta o nome do fonte, classe e método com probl<strong>em</strong>a, além doaspecto e advice que originaram o erro.


Dentre as ativida<strong>de</strong>s apresentadas no diagrama ilustrado na figura 1, se <strong>de</strong>staca aativida<strong>de</strong> Weaving, principal ativida<strong>de</strong> da ferramenta. Nela é representado o processo<strong>de</strong>s<strong>de</strong> a seleção das units que serão analisadas pelo <strong>weaver</strong> até a junção do códigocontido no advice, quando este é inserido no método interceptado por <strong>um</strong> pointcut. Odiagrama <strong>de</strong> ativida<strong>de</strong>s do processo weaving érepresentadonafigura2.Figura 2: Diagrama <strong>de</strong> ativida<strong>de</strong>s do processo <strong>de</strong> weavingNeste processo, inicialmente a ferramenta extrai do arquivo <strong>de</strong> projeto Delphi,que será afetado pelos <strong>aspectos</strong>, as units que estão diretamente associadas ao projeto eadiciona-as a <strong>um</strong>a fila. Essas units também são lidas, e <strong>de</strong>las são extraídas as units asquais elas se refer<strong>em</strong>, e as mesmas são adicionadas à fila. Este processo se repete <strong>para</strong>todas as units referenciadas no projeto. Em seguida, o <strong>weaver</strong> varre a lista <strong>de</strong> <strong>aspectos</strong>do projeto e <strong>para</strong> cada aspecto, varre a lista <strong>de</strong> pointcuts, gerando expressões regularesbaseadas <strong>em</strong> suas informações. Essas expressões regulares são parâmetros <strong>de</strong> busca nas


Figura 4: Apresentação da ferramenta AOPDelphiA tela é dividida <strong>em</strong> duas guias: Projeto AOP e Editor <strong>de</strong> Aspectos.A guia Editor <strong>de</strong> Aspectos é o ambiente <strong>para</strong> programação dos <strong>aspectos</strong>. Há comandosgerais <strong>para</strong> manipulação <strong>de</strong> arquivos, como solicitar <strong>um</strong> arquivo novo ou abrir, salvar<strong>um</strong> existente, além da função <strong>para</strong> compilar. Na guia Projeto AOP são <strong>de</strong>finidos osparâmetros <strong>para</strong> compilação <strong>de</strong> <strong>um</strong> projeto orientado a <strong>aspectos</strong>.No campo Projeto Delphi é informado o arquivo <strong>de</strong> projeto Delphi(arquivo .dpr) que será envolvido no projeto orientado a <strong>aspectos</strong>. Todas as units quefaz<strong>em</strong> parte <strong>de</strong>sse projeto serão aspectadas 2 , com exceção daquelas que estiver<strong>em</strong>incluídas nas listas <strong>de</strong> units que não <strong>de</strong>v<strong>em</strong> ser afetadas por <strong>aspectos</strong>. O AOPDelphioferece mecanismos <strong>para</strong> criar tais listas.Após informar o projeto Delphi, o <strong>de</strong>senvolvedor <strong>de</strong>ve indicar à ferramentaquais são os programas <strong>de</strong> <strong>aspectos</strong> que irão interagir com o projeto Delphi informado.A ferramenta dispõe <strong>de</strong> funcionalida<strong>de</strong>s <strong>para</strong> adicionar e r<strong>em</strong>over programas <strong>de</strong> <strong>aspectos</strong>(arquivo .dao) na lista <strong>de</strong> <strong>aspectos</strong> do projeto. O quadro 3 apresenta <strong>um</strong>a impl<strong>em</strong>entação<strong>de</strong> <strong>um</strong> aspecto <strong>de</strong> autenticação, on<strong>de</strong> o objetivo é permitir que somente usuáriosautorizados possam efetuar <strong>de</strong>terminadas operações (inserção, alteração e exclusão) nastabelas da base <strong>de</strong> dados <strong>de</strong> <strong>um</strong> sist<strong>em</strong>a.2 Trata-se <strong>de</strong> <strong>um</strong> neologismo. É o mesmo que ser afetado pelo aspecto.


Quadro 3: Aspecto <strong>de</strong> autenticaçãoAAutenticacao = AspectImpl<strong>em</strong>entationAutenticaInsert : Pointcut = (* *.SQLInsert(*));AutenticaUpdate : Pointcut = (* *.SQLUpdate(*));AutenticaDelete : Pointcut = (* *.SQLDelete(*));Advice AutenticaInsert: Before;beginWith DMTaskMan.qryAutentica dobeginClose;Sql.Clear;Sql.Add(’Select count(*) from DIREITO_USUARIO’);Sql.Add(’Where IDUSUARIO = :IDUSUARIO and OPERACAO = :OPERACAO’);Sql.Add(’ and TABELA = :TABELA’);ParamByName(’IDUSUARIO’).AsInteger := giCodUsuario;ParamByName(’OPERACAO’).AsInteger := 1; //1=Insert, 2=Update, 3=DeleteParamByName(’TABELA’).AsInteger := Self.NomeTabela;ExecSQL;ifFields[0].AsInteger = 0 thenRaise Exception.Create('Você não t<strong>em</strong> permissão <strong>para</strong> essa ativida<strong>de</strong>. '+ Chr(13) + 'Entre <strong>em</strong> contato com o seu superior.');end;EndAdvice;Advice AutenticaUpdate: Before;beginWith DMTaskMan.qryAutentica dobegin...ParamByName('OPERACAO').AsInteger := 2;...end;EndAdvice;Advice AutenticaDelete: Before;beginWith DMTaskMan.qryAutentica dobegin...ParamByName('OPERACAO').AsInteger := 3;...end;EndAdvice;//1=Insert, 2=Update, 3=Delete//1=Insert, 2=Update, 3=DeleteEnd.Em seguida o <strong>de</strong>senvolvedor po<strong>de</strong> indicar à ferramenta as listas <strong>de</strong> units que nãoserão afetadas pelos <strong>aspectos</strong> do projeto. A cada lista adicionada, suas units sãoinseridas no campo Units não afetadas por <strong>aspectos</strong>. Durante o processo<strong>de</strong> weaving, cadaunit referenciada <strong>em</strong> alg<strong>um</strong> fonte lido será analisada, a menos <strong>de</strong> queseu nome conste nesta lista <strong>de</strong> restrição.Tendo informado esses parâmetros, o projeto AOPDelphi está pronto <strong>para</strong> sercompilado. Ao executar o comando Weaving, é feita a consistência no projeto Delphi e<strong>em</strong> seguida são compilados os programas <strong>de</strong> <strong>aspectos</strong>. É feita a cópia do projeto Delphioriginal e inicia-se a junção dos programas <strong>de</strong> <strong>aspectos</strong> e do programa <strong>de</strong> componentes.Os fontes gerados são compilados e ocorrendo sucesso a aplicação será executada.Havendo erros <strong>de</strong> compilação no projeto Delphi após o weaving, a ferramenta apresentaos tais erros e sua orig<strong>em</strong>.Os quadros 4 e 5 mostram <strong>um</strong> método SQLDelete <strong>de</strong> <strong>um</strong>a classe afetada peloaspecto, antes e <strong>de</strong>pois do processo <strong>de</strong> weaving, respectivamente.


7 8 : ; < = > < @ A B C < ; > D > C G I K L B M D O < Q R @ S T < >7/ 2 3DMTaskMan.qryAutentica + (- 1. / 0 *0 + 5 *7 8 : ; < = > < @ A B C < ; > D > C G I K L B M D O < Q V < X7Quadro 4: Método SQLDelete antes do processo <strong>de</strong> weaving& ( ) * + , & *TClientes.SQLDelete(vId: Integer);%* . / 0 -/ 2 3DMTaskMan.SqlQuery + (- 1. / 0 *Close;Sql.Clear;Sql.Add(’Delete from CLIENTE Where CL_CODIGO = :CL_CODIGO’);ParamByName(’CL_CODIGO’).AsInteger := vID;ExecSql;* 0 + 5* 0 + 5Quadro 5: Método SQLDelete após o processo <strong>de</strong> weaving& ( ) * + , & *TClientes.SQLDelete(vId: Integer);%* . / 0 -Close;Sql.Clear;Sql.Add(’Select count(*) from DIREITO_USUARIO’);Sql.Add(’Where IDUSUARIO = :IDUSUARIO and OPERACAO = :OPERACAO’);Sql.Add(’ and TABELA = :TABELA’);ParamByName(’IDUSUARIO’).AsInteger := giCodUsuario;ParamByName(’OPERACAO’).AsInteger := 3; //1=Insert, 2=Update,3=DeleteParamByName(’TABELA’).AsInteger := Self.NomeTabela;ExecSQL;UFields[0].AsInteger = 0 2 3 * 0/Raise Exception.Create('Você não t<strong>em</strong> permissão <strong>para</strong> essaativida<strong>de</strong>. ' + Chr(13) +'Entre <strong>em</strong> contato com o seu superior.');/ 2 3DMTaskMan.SqlQuery + (- 1. / 0 *Close;Sql.Clear;Sql.Add('Delete from CLIENTE Where CL_CODIGO = :CL_CODIGO');ParamByName('CL_CODIGO').AsInteger := vID;ExecSql;* 0 + 5* 0 + 5Conforme <strong>de</strong>finido no advice AutenticaDelete do tipo before, o códigonele contido foi inserido no método interceptado, antes das instruções que já estavam aliimpl<strong>em</strong>entadas.4. ConclusõesConsi<strong>de</strong>rando a proposta e as vantagens da programação <strong>orientada</strong> a <strong>aspectos</strong>, ossoftwares <strong>de</strong>senvolvidos com essas técnicas ten<strong>de</strong>m a ser<strong>em</strong> mais flexíveis, melhorandoa manutenibilida<strong>de</strong> e reusabilida<strong>de</strong>, pois a impl<strong>em</strong>entação dos interesses transversaisfica encapsulada <strong>em</strong> módulos fisicamente se<strong>para</strong>dos do restante do código. Dessa forma,cada componente terá apenas código específico da impl<strong>em</strong>entação <strong>de</strong> seu negócio,permitindo <strong>um</strong>a melhor evolução do software.


Sendo <strong>um</strong>a tecnologia relativamente nova, e pelo fato das linguagens <strong>de</strong>programação existentes não prover<strong>em</strong> suporte nativo a POA, é importante o surgimento<strong>de</strong> novas ferramentas <strong>de</strong> apoio nessa área.Na impl<strong>em</strong>entação do aspecto <strong>de</strong> autenticação na seção anterior, observa-se afacilida<strong>de</strong> e a confiabilida<strong>de</strong> que a ferramenta po<strong>de</strong> proporcionar no <strong>de</strong>senvolvimento.Nessa impl<strong>em</strong>entação através do AOPDelphi, foi necessário a impl<strong>em</strong>entação <strong>de</strong> <strong>um</strong>aspecto com três pointcuts etrêsadvices. Além <strong>de</strong> manter íntegros os programas quetêm seu interesse específico, não gerando entrelaçamento <strong>de</strong> código, a impl<strong>em</strong>entaçãodo controle <strong>de</strong> autenticação está pronta até mesmo <strong>para</strong> as novas classes que vier<strong>em</strong> aser<strong>em</strong> adicionadas no sist<strong>em</strong>a.Uma limitação da linguag<strong>em</strong> <strong>de</strong> aspecto é a não possibilida<strong>de</strong> <strong>de</strong> criar variáveis,procedimentos e funções locais <strong>de</strong>ntro dos advices, o que po<strong>de</strong>ria facilitar bastantealg<strong>um</strong>as impl<strong>em</strong>entações.5. ReferênciasGESSER, Carlos E. “GALS: gerador <strong>de</strong> analisadores léxicos e sintáticos”. 2003. 150 f.Trabalho <strong>de</strong> Conclusão <strong>de</strong> Curso (Bacharelado <strong>em</strong> Ciências da Computação) –Centro Tecnológico, Universida<strong>de</strong> Fe<strong>de</strong>ral <strong>de</strong> Santa Catarina, Florianópolis.GROTT, Márcio C. “Estudo <strong>de</strong> caso aplicando programação <strong>orientada</strong> a <strong>aspectos</strong>”.2005. 65 f. Monografia (Especialização <strong>em</strong> Tecnologia da Informação na GestãoIntegrada <strong>de</strong> Negócios) – Universida<strong>de</strong> Regional <strong>de</strong> Bl<strong>um</strong>enau, Bl<strong>um</strong>enau.KICZALES, Gregor et al. “Aspect-oriented programming”, in Proceeding ofECOOP’97, Finland: Springer - Verlag, 1997.KULESZA, Uirá; SANT’ANNA, Cláudio; LUCENA, Carlos J. P. “Técnicas <strong>de</strong> projetoorientado a <strong>aspectos</strong>”. Uberlândia, 2005. Disponível <strong>em</strong>: .Acesso <strong>em</strong>: 01 maio 2006.NELSON, Torsten. Apostila do curso <strong>de</strong> programação <strong>orientada</strong> a <strong>aspectos</strong> comAspectJ. Belo Horizonte, 2005. Disponível <strong>em</strong>:. Acesso <strong>em</strong>: 26 abr.2006.OLIVEIRA, Edmar Soares. “protótipo <strong>de</strong> <strong>um</strong> <strong>weaver</strong> <strong>para</strong> programação <strong>orientada</strong> a<strong>aspectos</strong> <strong>em</strong> <strong>de</strong>lphi”. 2006. 72 f. Trabalho <strong>de</strong> Conclusão <strong>de</strong> Curso (Bacharelado <strong>em</strong>Ciências da Computação) – Centro <strong>de</strong> Ciências Exatas e Naturais, Universida<strong>de</strong>Regional <strong>de</strong> Bl<strong>um</strong>enau, Bl<strong>um</strong>enau.RESENDE, Antônio M. P.; SILVA, Claudiney C. “Programação <strong>orientada</strong> a <strong>aspectos</strong><strong>em</strong> Java”. Rio <strong>de</strong> Janeiro: Brasoft, 2005.SOROKIN, Andrey V. “RegExp studio”. Saint Petersburg, Rússia, 2004. Disponível<strong>em</strong>: . Acesso <strong>em</strong>: 01 mar.2006.STEINMACHER, Igor F. “Estudo <strong>de</strong> caso aplicando programação <strong>orientada</strong> a<strong>aspectos</strong>”. 2002. 72 f. Trabalho <strong>de</strong> Conclusão <strong>de</strong> Curso (Bacharelado <strong>em</strong> Ciências daComputação) – Universida<strong>de</strong> Estadual <strong>de</strong> Maringá, Maringá.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!