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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!