• Nenhum resultado encontrado

Programação Orientada a Aspectos

N/A
N/A
Protected

Academic year: 2021

Share "Programação Orientada a Aspectos"

Copied!
42
0
0

Texto

(1)Programação Orientada a Aspectos Uma Breve Introdução Universidade Estadual do Oeste do Paraná Centro de Ciências Exatas e Tecnológicas Colegiado de Informática Prof. Luiz Antonio.

(2) Roteiro       . Introdução Evolução das Linguagens Histórico da POA Estrutura de um Aspecto AspectJ Conclusão Outras Implementações. 2.

(3) Introdução . De canhões e fortes sob a terra . . Linha Maginot (França). Desenvolvimento de Software . Necessidade de estratégias mais produtivas, flexíveis e de qualidade. 3.

(4) Evolução    . Linguagem de máquina Programação Estruturada Programação Orientada a Objetos Programação Pós-Objeto. 4.

(5) Programação Estruturada . Da linguagem de máquina para a programação estruturada    . Suporte a decomposição algorítmica; Procedimentos e funções; Sai o goto e entram as estruturas de controle; Programas maiores, menos flexíveis e difíceis de manter e reutilizar.. 5.

(6) Exemplo . Manipulador de figuras geométricas  .  . Figuras são compostas de pontos e linhas; Vários procedimentos para desenhar, girar, escalonar, etc. Código espalhado em vários procedimentos; Introdução de novas figuras exige muitas alterações.. 6.

(7) Programação Orientada a Objetos  . Anos 60 e 70: Simula 67, Smalltalk; Decomposição orientada a objetos   .  . Objeto: procedimentos e dados em uma unidade independente e auto-contida; A herança e o polimorfismo reduzem o código e facilitam a reutilização; Encapsulamento;. Sistemas menores e mais robustos; Como fica o manipulador de figuras geométricas? 7.

(8) Onde a OO falha?   . Domínio do Problema Como representar detalhes que não tem conexão direta com o problema? O que fará parte de uma classe ou de outra?   . Coerência conceitual; Entrelaçamento de classes (scattering); Espalhamento de código (tangling).. 8.

(9) Principais problemas da POO . Redundância . . Fraca coesão . . Fragmentos de código repetidos em diversos pontos; Classes contém funcionalidades que não estão diretamente relacionadas a elas;. Forte acoplamento . Classes precisam conhecer métodos de outras classes. 9.

(10) Modularidade .  . Programação estruturada e Programação Orientada a Objetos permitem a divisão do problema (sistema) em partes; Divisão reduz a complexidade; Separação de Interesses . . Todo sistema de software lida com diferentes interesses: dados, operações, etc. Cada interesse em uma localidade física.. 10.

(11) Boa Modularidade. • Parsing de XML no org.apache.tomcat – As linhas vermelhas mostras as linhas de código relevantes – Estão todas localizadas em um único bloco 11.

(12) Problemas de Modularidade. • logging no org.apache.tomcat – Código não está localizado em um único módulo – Nem mesmo em um número pequeno de módulos. 12.

(13) Entrelaçamento e espalhamento na POO. 13.

(14) Decomposição orientada a Aspectos. 14.

(15) Histórico da POA  . Criada nos laboratórios da Xerox em 1997; Objetivo . . . Definir uma abordagem que permitisse expressar melhor as características ortogonais do comportamento do programa; Separação dos requisitos funcionais e nãofuncionais; Diminuir o entrelaçamento de código. 15.

(16) Programação Orientada a Aspectos: definição . “A Programação orientada a aspectos (POA) é uma tecnologia de programação em evolução que oferece suporte a novos mecanismos de abstração e composição com o objetivo de permitir alcançar uma melhor separação de concerns no nível da implementação.” (Chavez, 2004). 16.

(17) Separação de Interesses . “... os sistemas de software complexos devem ser decompostos em unidades modulares menores e claramente separadas, cada uma lidando com um único interesse.” (Chavez, 2004). 17.

(18) Programação Orientada a Aspectos: justificativa . “A POA surgiu como uma técnica de programação complementar ao Paradigma de Orientação a Objetos, que visa o tratamento, de maneira independente, de interesses que se revelam espalhados por todo o sistema ou entrelaçados em diversas classes, promovendo a reutilização e facilitando a manutenção do software.” (Menolli e Castro, 2007) 18.

(19) Aplicação da POA      . Auditoria; Registro e rastreamento de operações; Persistência de dados; Tratamento de exceções; Políticas de desenvolvimento; Autenticação, identificação e autorização de usuários;. 19.

(20) O Aspecto . . O aspecto é a unidade modular principal em AspectJ, assim como a classe é a unidade principal em Java; Um aspecto agrupa pontos de atuação, adendos e introduções.. 20.

(21) O Aspecto . Pontos de Junção (join points) . Locais bem definidos da execução de um programa. • Ex.: chamada de um método.. . Pontos de Atuação (pointcuts) . . Elementos do programa usados para definir um ponto de junção.. Adendos (advices) . Métodos executados quando um ponto de atuação é alcançado. 21.

(22) Pontos de Junção . É qualquer ponto identificável pelo Aspecto durante a execução de um programa;     . entradas e saídas de métodos; construtores; tratamento de exceções; acessos a atributos de objetos; entre outros.. 22.

(23) Pontos de Atuação . . São construções de programa que permitem a seleção de um ou mais pontos de junção; Pode-se usar expressões regulares para se especificar os pontos de atuação, permitindo grande flexibilidade.. 23.

(24) Caracteres Especiais Caractere. Significado. *. Qualquer seqüência de caracteres Ex.: call(private void Item.set*(*)). ... Substitui zero ou mais sequências Ex.: call (* Comunicador.deliver(..)). +. Qualquer subclasse de uma classe Ex.: call (* Conta+.set*(*)). 24.

(25) Expressões Lógicas Operador. Significado. Ex.: Todos os métodos de todas as classes, exceto ! os da classe Comunicador. (Negação) call(* *.*(..) && !Comunicador) || (OU lógico) && (E lógico). Ex.: Todos os métodos get e set de todas as classes que tratam com strings. call(String *.get*() || * *.set*(String)) Ex.: Todos os métodos get da classe Conta e suas especializações, exceto ContaPoupanca call(* Conta+.get*() && !ContaPoupanca). 25.

(26) Tipos de Junção Categoria call. Uso Chamada de método ou contrutor. execution. Execução de método ou construtor. staticinitialization Inicialização de classe initialization. Inicialização de objetos. get. Leitura de Atributo de classe. set. Escrita de Atributo de classe. handler. Tratamento de Exceção. 26.

(27) Adendo . . . É um trecho de código que deve ser executado em pontos de junção selecionados por um ponto de corte; O adendo pode ser executado antes (before), depois (after), ou "em volta" (around) do ponto de junção; O around pode ser usado para substituir o ponto de junção pelo advice, ou para executar código antes e depois do ponto de junção. 27.

(28) AspectJ . Linguagem de Aspectos para Java   . AspectJ: linguagem para aspectos do Java; ajc: compilador AJDT: plugin do Eclipse.. 28.

(29) Anatomia do Aspecto public aspect AspectoExemplo { pointcut pontoAtuacao1() : call (* Classe.metodo(..)); Ponto de Atuação. before() : pontoAtuacao1() { //ações }. Adendo. Aspecto 29.

(30) Resumo do Processo. 30.

(31) Exemplo . Shopping. 31.

(32) Exemplo Log public class Inventory { private List<Item> items = new Vector<Item>(); static Logger logger = Logger.getLogger("trace"); public void addItem(Item item) { logger.logp(Level.INFO, "Inventory", "addItem", "Entering"); items.add(item); } public void removeItem(Item item) { logger.logp(Level.INFO, "Inventory", "removeItem", "Entering"); items.remove(item); } }. 32.

(33) Exemplo Log public aspect TraceAspect { private Logger logger = Logger.getLogger("trace"); pointcut traceMethods() : call(* *.*(..)) && !within(TraceAspect); before() : traceMethods() { Signature sig = thisJoinPointStaticPart.getSignature(); logger.logp(Level.INFO, sig.getDeclaringType().getName(), sig.getName(), "Entering"); } }. 33.

(34) Discussão  . O ponto de atuação identifica todas as chamadas de métodos O adendo registra as informações estáticas do ponto de junção interceptado . thisJoinPointStaticPart permite acesso a informações estáticas, como o nome da classe ou do método e parâmetros. 34.

(35) Exemplo Around . Retornando nomes de Itens em maiúsculo. public aspect NormalizaCaixaNomeCliente { pointcut caixaAlta() : call (String Item.getNome()); String around() : caixaAlta() { String s = proceed(); return s.toUpperCase(); } }. 35.

(36) Inclusão do código dos Aspectos. 36.

(37) Introduções . . É uma forma de um aspecto introduzir mudanças em classes, interfaces e aspectos do sistema; Por exemplo, pode-se acrescentar um atributo ou método a uma classe existente.. 37.

(38) Exemplo: adição de métodos . Podem ser adicionados a qualquer classe;. aspect NomeDoAspecto { visibilidade tipoDeDado Classe.nomeDoMetodo(parâmetros) { //código do metodo } }. . Exemplo:. aspect AspectoItemIntroduction { public void Item.toXML() { //código do metodo } }. 38.

(39) Conclusão . . . O objetivo do desenvolvimento orientado a aspectos é encapsular interesses em módulos fisicamente separados do restante do código; Além de decompor o sistema em objetos (dados) e métodos (funções), decompomos cada objeto e função de acordo com o interesse, agrupado em um módulo distinto; Esses módulos são denominados aspectos.. 39.

(40) Outras Implementações Aspect.NET 2.1. JBoss AOP. 40.

(41) Programação Orientada a Aspectos Uma Breve Introdução. Dúvidas? Contato: larodrigues@unioeste.br.

(42) Bibliografia  .   . The AspectJ Projet. Disponível em: <http://www.eclipse.org/aspectj/> GRADECKI, J. D.; LESIECKI, N. Mastering AspectJ: Aspect-Oriented Programming in Java. Indianapolis: Wiley Publishing, 2003. LADDAD, R. AspectJ in Action: Practical Aspectoriented Programming. USA: Manning, 2003. MENOLLI, A.; CASTRO, C. Programação Orientada a Aspectos. Minicurso. EPAC, 2007. WINCK, D. V.; GOETTEN JUNIOR, V. AspectJ: Programação Orientada a Aspectos com Java. São Paulo: Novatec, 2006. 42.

(43)

Referências

Documentos relacionados

i) Anexo V – Termo de Autorização de divulgação de imagem e voz de estudante em ambiente virtual de estudos adotados pelo IFMA;.. Para os classificados para as vagas pelo Sistema

V6 Tr ansa ction and D eposit Ac cou nts Te rms and

disciplinas cursadas na condição de aluno especial em curso de mesmo nível, da aluna AMANDA 159. ALMEIDA BERGAMASCHI, orientanda

Biocontaminantes em amostras de água Água deionisada Água deinoisada Comentários &gt; 0,24 e &lt; 3 &gt; 3 e &lt; 30 Endotoxinas EU/m 3 12 35 Número total de viáveis UFC/m

O teste de patogenicidade cruzada possibilitou observar que os isolados oriundos de Presidente Figueiredo, Itacoatiara, Manaquiri e Iranduba apresentaram alta variabilidade

O tribunal reitera, também, que, com a alteração legislativa à Lei do Cibercrime, o preenchimento do tipo subjectivo do crime alcança-se a nível genérico, verificando que

públicos para agente local de saúde, uma atribuição, prevista no PACs, exclusiva deste profissional, que é um pré-requisito para a função, está indicada na

Arrendatários e parceiros são mais prósperos e mais bem educados nas regiões onde a cultura da cana está concentrada, e existe uma correlação entre mercados de aluguel ativos e