TRABALHO DE GRADUAÇÃO ANÁLISE QUANTITATIVA DA IMPLEMENTAÇÃO DE TRATAMENTO DE EXCEÇÕES NA LINGUAGEM PTOLEMY Aluno: Cleivson Arruda Orientador: Fernando Castor ROTEIRO Introdução Fundamentação Conjunto de métricas Ferramenta Estudo Conclusão INTRODUÇÃO Paradigma de orientação a objetos é limitado Modularização é importante para aumentar o reuso, robustez e consistência do código [2] A modularização de alguns interesses é priorizada frente a de outros Alguns interesses acabam sendo penalizados em modelagens OO Interesses espalhados ao longo da aplicação são chamados “interesses transversais” [2] Logging, concorrência, tratamento de exceções INTRODUÇÃO AOSD como alternativa para modularização de interesses transversais [19] Permite pontos de interação entre interesses Permite encapsular comportamentos transversais através de aspectos Tratamento de exceções é um interesse geralmente implícito em aplicações Comum replicação de código para tratamento de exceções recorrentes TRATAMENTO DE EXCEÇÕES Exceções definem comportamentos incorretos ou que violam as regras da própria linguagem Java permite que exceções sejam identificadas e tratadas [17] Exceções podem ser implícitas ou explícitas Explícitas através do comando throw TRATAMENTO DE EXCEÇÕES Exceções explícitas para validar comportamentos [17] Facilita entendimento Aumenta a confiabilidade TRATAMENTO DE EXCEÇÕES Toda exceção herda de Throwable Exception são falhas recuperáveis Error são falhas irrecuperáveis RuntimeException são todos as falhas detectadas durante execução Checked exception classes são exceções checadas pelo compilador TRATAMENTO DE EXCEÇÕES Exceções são tratadas pela construção try-catchfinally O bloco try define a região protegida Pode ter uma ou mais cláusulas catch associadas Pode ter uma cláusula finally associada Cláusulas catch são associadas a uma exceção e responsáveis pelo seu tratamento Cláusulas finally definem comportamentos que devem sempre ser executados TRATAMENTO DE EXCEÇÕES TRATAMENTO DE EXCEÇÕES Variáveis definidas em escopos externos à construção try-catch-finally são acessíveis internamente Variáveis dentro de cada bloco não são acessíveis aos outros blocos Todo método deve declarar sua interface de exceções ASPECTOS Servem para separar interesses dentro da aplicação [19] Linguagens podem ser simétricas ou assimétricas Permitem interação entre interesses Eventos implícitos Eventos explícitos ASPECTOS Linguagens de eventos implícitos [22] Maior clareza no código principal Abstração de interesses transversais Oclusão de comportamentos Ex.: AspectJ Linguagens de eventos explícitos Acrescentam construções ao código principal Exigem conhecimento mínimo dos aspectos Maior facilidade no entendimento do comportamento Ex.: Ptolemy PTOLEMY Extensão de Java para orientação a aspectos [21] Eventos Explícitos Tipificados Quantificados Simétrica PTOLEMY Eventos são a interface de comunicação entre interesses Anunciante do evento Tratador do evento Declaração de evento possui: Nome do evento Variáveis de contexto Tipo de retorno Contrato translúcido* [22] PTOLEMY PTOLEMY Anúncios de eventos pela expressão announce Passagem de parâmetros Podem definir closures Permitem alteração do código da closure PTOLEMY Closure se comporta como um bloco normal Variáveis definidas externamente são acessíveis dentro da closure, mas o contrário não é verdadeiro PTOLEMY Classes devem implementar interesses transversais definindo tratadores Definição de tratadores pela cláusula when Registradas pelo comando register Associa todas as instâncias de um evento a um método tratador Tratadores Recebem uma instância do evento por parâmetro Têm o mesmo tipo de retorno do evento tratado Declaram Throwable na interface de exceções PTOLEMY PTOLEMY Tratadores podem ser encadeados Ordem definida em tempo de execução Definição de fluxo de controle pela expressão invoke() Chamadas a invoke() podem lançar qualquer exceção PTOLEMY IMPLEMENTAÇÃO