SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Universidade Federal de Viçosa
            Centro de Ciências Exatas e Tecnológicas
                  Departamento de Informática
     INF 442 – Programação Orientada a Aspectos e Padrões
                          de Projetos



Uma DSL para declarar a ordem
  de execução de aspectos
       “A DSL to declare aspect execution order”
      Antoine Marot
        Université Libre de Bruxelles (ULB)
      Roel Wuyts
        IMEC Leuven and KU Leuven


  Apresentação: Giorgio Prímola F. G. Torres
  Professor: Vladimir Oliveira Di Iorio
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Introdução – DSL
       • Quando se trabalha com um conjunto de
       operações que aparecem freqüentemente ao
       lidar com um determinado problema (domínio),
       surge a necessidade de abstrair essas operações
       para torná-las mais práticas.

       • Uma DSL trata da abstração de um conjunto de
       operações complexas, ou apenas trabalhosas,
       por um outro conjunto mais prático.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

      Introdução – Ordem de execução entre
                   aspectos
       • Quando dois ou mais aspectos executam em
       um mesmo join point, pode ser necessário
       especificar a ordem de execução entre eles.

       • Tipo de problema semântico.

       • Exemplo: aspectos VerificaPermissaoUsuario e
       MonitoraAcoes.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso
       • Uma empresa desenvolveu uma aplicação do
       tipo cliente-servidor para hospedagem de
       arquivos, que é amplamente usada. O sevidor é
       quem hospeda os arquivos. Os usuários utilizam
       um aplicativo cliente para enviar arquivos
       através do método send(). Quando o arquivo
       está sendo enviado, primeiro ele é encriptado e
       depois compactado, para acelerar o envio.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso

       • Porém, a companhia prevê que, em um futuro
       próximo, terá que dar suporte a novas técnicas de
       segurança e compactação, e também continuar a
       atender aqueles que utilizam o modelo antigo.

       • A empresa adotou uma nova técnica de primeiro
       comprimir o arquivo e depois encriptá-lo, por causa
       da adoção de um novo método de compactação.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso
       • Como a compressão e a encriptação são
       funcionaliades transversais, foram identificados
       dois aspectos:
             • SecureUpload;
             • CompressUpload.

       • Ambos estão encarregados em fazer a
       operação que cabe a eles, e desfazê-la, ao
       chegar ao servidor.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso
        public aspect SecureUpload {
             before(File f) :
                call(* Client.send(..)) && args(f) {
                      encrypt(f);
             }

                 before(File f) :
                   call(* Server.receive(..)) && args(f) {
                         decrypt(f);
                 }
        }
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso
        public aspect CompressUpload {
             before(File f) :
                call(* Client.send(..)) && args(f) {
                      zip(f);
             }

                 before(File f) :
                   call(* Server.receive(..)) && args(f) {
                         unzip(f);
                 }
        }
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso

       • Os dois aspectos apresentados como solução
       para o problema relatado, interceptam um
       mesmo join point.

       • Problema: Qual aspecto executará primeiro?
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso
       • A ordem precisa ser de tal forma que:
             • no envio do arquivo sejam feitas primeiro a operação
             de compactação e depois a de criptografia;

             • no recebimento do arquivo, primeiro decriptografa e
             depois descompacta.

       • A ordem estabelecida acima não diz respeito à
       ordem dos aspectos, mas sim à ordem dos advices
       dos aspectos.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Estudo de caso
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Soluções
       • O problema da ordem de execução de
       aspectos não é um problema novo, ele já vem
       sendo estudado, e já existem algumas técnicas
       para esse problema:

             • Ordenação dos Aspectos (ordering aspects);
             • JAsCo;
             • Composição declarativa de aspecto (declarative
             aspect composition).
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Soluções
       • Ordenação dos aspectos (ordering aspects):
       solução implementada na própria AspectJ pelo
       comando “declare precedence”.
             • “Se um aspecto A deve preceder um aspecto B,
             então todos os adendos de A devem preceder os de
             B.”
             • Problema: não é aplicável ao estudo de caso
             apresentado, pois este requer ordem na execução
             dos adendos.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Soluções
       • JAsCo: é uma linguagem orientada a aspectos
       estendida de Java, onde o escopo do aspecto é
       separado    do     seu    comportamento.   O
       comportamento é descrito através de hooks,
       presente na própria linguagem.
             • É possível determinar ordem de execução entre os
             adendos;
             • É uma solução inviável para o problema
             apresentado, pois o trata a um nível muito abaixo.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Soluções
       • Composição declarativa de aspecto: baseado
       em declarações de restrições em um aspecto
       separado.
             • Restrição de ordenação: determina que um
             adendo deve ser executado antes de um outro;
             • Restrição de controle: determina que um advice
             será executado somente se um outro foi executado
             com sucesso.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
       • Abordagem declarativa de aspectos baseado em
       regras de composição que declaram restrições. É a
       solução apresentada em uma nova DSL por este
       trabalho.

       • O problema da ordem de execução de aspectos é
       também um problema transversal. É interessante
       então, criar um aspecto que lida com a ordenação
       ao invés de definir a ordem de execução dentro dos
       próprios aspectos que interceptam um mesmo join
       point.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
       • Regras de composição são restrições que o
       weaver leva em consideração enquanto tece os
       adendos nos pontos de junção.
       • São declaradas em aspectos separados e
       descrevem o comportamento dos adendos dos
       aspectos envolvidos.
       • Especificam o contexto nos quais estarão
       ativas. Se um join point atende ao contexto, a
       regra é executada.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
       • Existem quatro tipos de restrições possíveis
       para as regras:
             1. Prec(a,b): especifica que o adendo ‘a’ tem que
                ser executado antes do adendo ‘b’;
             2. First(a): o adendo ‘a’ tem que ser o primeiro a
                ser executado;
             3. Last(a): o adendo ‘a’ tem que ser o último a ser
                executado;
             4. Ignore(a): o adendo ‘a’ não será executado.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo

       • As quatro restrições podem ser aplicadas no
       estudo de caso.
       • Para isso, os adendos são nomeados da
       seguinte forma: zipFile, unzipFile, encryptFile e
       decryptFile.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
       • As restrições são montadas de acordo com os
       nomes dos adendos:
             • Prec(zipFile, encryptFile);
             • Prec(decryptFile, unzipFile).

       • Com estas restrições, a ordenação da execução
       dos aspectos é definida.
       • No entanto, os usuários antigos que utilizam o
       sistema de encriptar primeiro e depois compactar,
       não são mais atendidos pelo sistema.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
       • Para solucionar o problema de suporte a usuários
       do sistema antigo, a DSL criada oferece a opção de
       criar uma outra regra que será ativada num
       contexto específico.
       • A parametrização de regras por pointcuts, permite
       que uma regra seja bem específica para aquele
       ponto de junção.
       • Uso do parâmetro advices(a1, a2, ..., an) identifica
       o ponto de junção onde todos aqueles adendos
       interagem.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
        public aspect AspectComposition {
             public boolean isZipped(File f) {
                  return f.isZipped();
             }
             declare rule sendFile:
                  advices(zipFile, encryptFile) {
                       Prec(zipFile, encryptFile);
             }
             declare rule receiveFile:
                  advices(unzipFile, decryptFile) {
                       Prec(decryptFile, unzipFile);
             }
             declare rule oldVersion extends receiveFile:
                  advices(unzipFile, decryptFile)
                             && if(isZipped(thisJoinPoint.getArgs()[0])) {
                       Prec(unzipFile, decryptFile);
             }
        }
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Solução proposta pelo artigo
       • O mecanismo de extensão (extends), usado na
       regra de recebimento do servidor para clientes
       antigos, é necessário pois ele define uma
       prioridade entre a regra nova de recebimento
       com a do cliente antigo.
       • Uma regra que extends uma outra regra, tem
       prioridade sobre esta última, e pode ser vista
       como um caso de excessão.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Outros exemplos
       public aspect ChooseVisualization {
            public boolean otherVis = false;
            before(String [] a) : execution(* Main.main(String[]))
                                   && args(a) {
                            if(a[0].equals(“otherVis”))
                                   otherVis = true;
            }
            declare rule defaultVis : advices(VisAspect1.*, VisAspect2.*) &&
                        if(!otherVis) {
                               Ignore(VisAspect2.*);
            }
            declare rule otherVis : advices(VisAspect1.*, VisAspect2.*) &&
                        if(otherVis) {
                               Ignore(VisAspect1.*);
            }
       }
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Outros exemplos
       public aspect LogAspectCode {
            public boolean log = false;
            before() beforeFirst: call(* *.foo(..)) {
                   log = true;
            }
            before() beforeLast: call(* *.foo(..)) {
                   log = false;
            }
            before() logAdvice: set(* *.*) && if(log) {
                   /* Log informations */
            }
            declare rule logBefore:
                     advices(beforeFirst, beforeLast) {
                   First(beforeFirst);
                   Last(beforeLast);
            };
       }
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Conclusões
       • A ordem de execução de aspectos em um
       pointcut é um problema transversal.

       • A composição de aspectos é problemática a
       partir de quando as interações entre aspectos
       aparecem, pois estas podem levar a programas
       “tecidos” erroneamente pelo weaver dos
       aspectos.
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Dúvidas?
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia



      Bibliografia


       Antoine Marot and Roel Wuyts. 2008. A DSL to declare aspect execution
               order. In Proceedings of the 2008 AOSD workshop on Domain-specific
               aspect languages (DSAL '08). ACM, New York, NY, USA, 2008. ACM
               press.

Mais conteúdo relacionado

Semelhante a Uma DSL para declarar a Ordem de Execução de Aspectos

Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxDell Technologies
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 
Curso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoCurso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoMarden Neubert
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: IntroduçãoAlexandre Duarte
 
POO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfPOO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfJadna Almeida
 
Bancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosBancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosGlaucio Scheibel
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011
dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011
dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011Lucas Lemos
 
Aop Aspect J 1.5.4 Capitulo 01
Aop Aspect J 1.5.4 Capitulo 01Aop Aspect J 1.5.4 Capitulo 01
Aop Aspect J 1.5.4 Capitulo 01Diego Pacheco
 

Semelhante a Uma DSL para declarar a Ordem de Execução de Aspectos (20)

UML - parte 1
UML - parte 1UML - parte 1
UML - parte 1
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Aula05 frameworks
Aula05 frameworksAula05 frameworks
Aula05 frameworks
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Curso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoCurso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - Avançado
 
Unidade5 parte1
Unidade5 parte1Unidade5 parte1
Unidade5 parte1
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: Introdução
 
POO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfPOO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdf
 
Linux - Dicas 01 - LPI1
Linux - Dicas 01 - LPI1Linux - Dicas 01 - LPI1
Linux - Dicas 01 - LPI1
 
Bancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosBancos de Dados Orientados a Objetos
Bancos de Dados Orientados a Objetos
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Projeto de Experimentos
Projeto de ExperimentosProjeto de Experimentos
Projeto de Experimentos
 
Khomp testes complexos!
Khomp   testes complexos!Khomp   testes complexos!
Khomp testes complexos!
 
dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011
dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011
dBest - Um Framework para Avaliação de Desempenho de Banco de Dados - SBBD 2011
 
Hardening Unix
Hardening UnixHardening Unix
Hardening Unix
 
Aop Aspect J 1.5.4 Capitulo 01
Aop Aspect J 1.5.4 Capitulo 01Aop Aspect J 1.5.4 Capitulo 01
Aop Aspect J 1.5.4 Capitulo 01
 

Uma DSL para declarar a Ordem de Execução de Aspectos

  • 1. Universidade Federal de Viçosa Centro de Ciências Exatas e Tecnológicas Departamento de Informática INF 442 – Programação Orientada a Aspectos e Padrões de Projetos Uma DSL para declarar a ordem de execução de aspectos “A DSL to declare aspect execution order” Antoine Marot Université Libre de Bruxelles (ULB) Roel Wuyts IMEC Leuven and KU Leuven Apresentação: Giorgio Prímola F. G. Torres Professor: Vladimir Oliveira Di Iorio
  • 2. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Introdução – DSL • Quando se trabalha com um conjunto de operações que aparecem freqüentemente ao lidar com um determinado problema (domínio), surge a necessidade de abstrair essas operações para torná-las mais práticas. • Uma DSL trata da abstração de um conjunto de operações complexas, ou apenas trabalhosas, por um outro conjunto mais prático.
  • 3. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Introdução – Ordem de execução entre aspectos • Quando dois ou mais aspectos executam em um mesmo join point, pode ser necessário especificar a ordem de execução entre eles. • Tipo de problema semântico. • Exemplo: aspectos VerificaPermissaoUsuario e MonitoraAcoes.
  • 4. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso • Uma empresa desenvolveu uma aplicação do tipo cliente-servidor para hospedagem de arquivos, que é amplamente usada. O sevidor é quem hospeda os arquivos. Os usuários utilizam um aplicativo cliente para enviar arquivos através do método send(). Quando o arquivo está sendo enviado, primeiro ele é encriptado e depois compactado, para acelerar o envio.
  • 5. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso • Porém, a companhia prevê que, em um futuro próximo, terá que dar suporte a novas técnicas de segurança e compactação, e também continuar a atender aqueles que utilizam o modelo antigo. • A empresa adotou uma nova técnica de primeiro comprimir o arquivo e depois encriptá-lo, por causa da adoção de um novo método de compactação.
  • 6. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso • Como a compressão e a encriptação são funcionaliades transversais, foram identificados dois aspectos: • SecureUpload; • CompressUpload. • Ambos estão encarregados em fazer a operação que cabe a eles, e desfazê-la, ao chegar ao servidor.
  • 7. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso public aspect SecureUpload { before(File f) : call(* Client.send(..)) && args(f) { encrypt(f); } before(File f) : call(* Server.receive(..)) && args(f) { decrypt(f); } }
  • 8. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso public aspect CompressUpload { before(File f) : call(* Client.send(..)) && args(f) { zip(f); } before(File f) : call(* Server.receive(..)) && args(f) { unzip(f); } }
  • 9. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso • Os dois aspectos apresentados como solução para o problema relatado, interceptam um mesmo join point. • Problema: Qual aspecto executará primeiro?
  • 10. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso • A ordem precisa ser de tal forma que: • no envio do arquivo sejam feitas primeiro a operação de compactação e depois a de criptografia; • no recebimento do arquivo, primeiro decriptografa e depois descompacta. • A ordem estabelecida acima não diz respeito à ordem dos aspectos, mas sim à ordem dos advices dos aspectos.
  • 11. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Estudo de caso
  • 12. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Soluções • O problema da ordem de execução de aspectos não é um problema novo, ele já vem sendo estudado, e já existem algumas técnicas para esse problema: • Ordenação dos Aspectos (ordering aspects); • JAsCo; • Composição declarativa de aspecto (declarative aspect composition).
  • 13. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Soluções • Ordenação dos aspectos (ordering aspects): solução implementada na própria AspectJ pelo comando “declare precedence”. • “Se um aspecto A deve preceder um aspecto B, então todos os adendos de A devem preceder os de B.” • Problema: não é aplicável ao estudo de caso apresentado, pois este requer ordem na execução dos adendos.
  • 14. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Soluções • JAsCo: é uma linguagem orientada a aspectos estendida de Java, onde o escopo do aspecto é separado do seu comportamento. O comportamento é descrito através de hooks, presente na própria linguagem. • É possível determinar ordem de execução entre os adendos; • É uma solução inviável para o problema apresentado, pois o trata a um nível muito abaixo.
  • 15. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Soluções • Composição declarativa de aspecto: baseado em declarações de restrições em um aspecto separado. • Restrição de ordenação: determina que um adendo deve ser executado antes de um outro; • Restrição de controle: determina que um advice será executado somente se um outro foi executado com sucesso.
  • 16. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • Abordagem declarativa de aspectos baseado em regras de composição que declaram restrições. É a solução apresentada em uma nova DSL por este trabalho. • O problema da ordem de execução de aspectos é também um problema transversal. É interessante então, criar um aspecto que lida com a ordenação ao invés de definir a ordem de execução dentro dos próprios aspectos que interceptam um mesmo join point.
  • 17. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • Regras de composição são restrições que o weaver leva em consideração enquanto tece os adendos nos pontos de junção. • São declaradas em aspectos separados e descrevem o comportamento dos adendos dos aspectos envolvidos. • Especificam o contexto nos quais estarão ativas. Se um join point atende ao contexto, a regra é executada.
  • 18. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • Existem quatro tipos de restrições possíveis para as regras: 1. Prec(a,b): especifica que o adendo ‘a’ tem que ser executado antes do adendo ‘b’; 2. First(a): o adendo ‘a’ tem que ser o primeiro a ser executado; 3. Last(a): o adendo ‘a’ tem que ser o último a ser executado; 4. Ignore(a): o adendo ‘a’ não será executado.
  • 19. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • As quatro restrições podem ser aplicadas no estudo de caso. • Para isso, os adendos são nomeados da seguinte forma: zipFile, unzipFile, encryptFile e decryptFile.
  • 20. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • As restrições são montadas de acordo com os nomes dos adendos: • Prec(zipFile, encryptFile); • Prec(decryptFile, unzipFile). • Com estas restrições, a ordenação da execução dos aspectos é definida. • No entanto, os usuários antigos que utilizam o sistema de encriptar primeiro e depois compactar, não são mais atendidos pelo sistema.
  • 21. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • Para solucionar o problema de suporte a usuários do sistema antigo, a DSL criada oferece a opção de criar uma outra regra que será ativada num contexto específico. • A parametrização de regras por pointcuts, permite que uma regra seja bem específica para aquele ponto de junção. • Uso do parâmetro advices(a1, a2, ..., an) identifica o ponto de junção onde todos aqueles adendos interagem.
  • 22. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo public aspect AspectComposition { public boolean isZipped(File f) { return f.isZipped(); } declare rule sendFile: advices(zipFile, encryptFile) { Prec(zipFile, encryptFile); } declare rule receiveFile: advices(unzipFile, decryptFile) { Prec(decryptFile, unzipFile); } declare rule oldVersion extends receiveFile: advices(unzipFile, decryptFile) && if(isZipped(thisJoinPoint.getArgs()[0])) { Prec(unzipFile, decryptFile); } }
  • 23. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Solução proposta pelo artigo • O mecanismo de extensão (extends), usado na regra de recebimento do servidor para clientes antigos, é necessário pois ele define uma prioridade entre a regra nova de recebimento com a do cliente antigo. • Uma regra que extends uma outra regra, tem prioridade sobre esta última, e pode ser vista como um caso de excessão.
  • 24. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Outros exemplos public aspect ChooseVisualization { public boolean otherVis = false; before(String [] a) : execution(* Main.main(String[])) && args(a) { if(a[0].equals(“otherVis”)) otherVis = true; } declare rule defaultVis : advices(VisAspect1.*, VisAspect2.*) && if(!otherVis) { Ignore(VisAspect2.*); } declare rule otherVis : advices(VisAspect1.*, VisAspect2.*) && if(otherVis) { Ignore(VisAspect1.*); } }
  • 25. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Outros exemplos public aspect LogAspectCode { public boolean log = false; before() beforeFirst: call(* *.foo(..)) { log = true; } before() beforeLast: call(* *.foo(..)) { log = false; } before() logAdvice: set(* *.*) && if(log) { /* Log informations */ } declare rule logBefore: advices(beforeFirst, beforeLast) { First(beforeFirst); Last(beforeLast); }; }
  • 26. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Conclusões • A ordem de execução de aspectos em um pointcut é um problema transversal. • A composição de aspectos é problemática a partir de quando as interações entre aspectos aparecem, pois estas podem levar a programas “tecidos” erroneamente pelo weaver dos aspectos.
  • 27. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Dúvidas?
  • 28. Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia Bibliografia Antoine Marot and Roel Wuyts. 2008. A DSL to declare aspect execution order. In Proceedings of the 2008 AOSD workshop on Domain-specific aspect languages (DSAL '08). ACM, New York, NY, USA, 2008. ACM press.