1 / 36

Programação orientada a aspectos

Programação orientada a aspectos. Equipe: Leandro Oliveira Anusio Menezes. Software a ser utilizado „ JDK 1.5 • http://java.sun.com/j2se (1.5.0_01-b08) „ Eclipse • http://www.eclipse.org (3.1.2) „ AspectJ 1.5 • http://www.eclipse.org/aspectj (1.5.1a) „ AJDT

gustav
Download Presentation

Programação orientada a aspectos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programação orientada a aspectos Equipe: Leandro Oliveira Anusio Menezes

  2. Software a ser utilizado • „ JDK 1.5 • • http://java.sun.com/j2se (1.5.0_01-b08) • „ Eclipse • • http://www.eclipse.org (3.1.2) • „ AspectJ 1.5 • • http://www.eclipse.org/aspectj (1.5.1a) • „ AJDT • • http://www.eclipse.org/ajdt (1.3.1) • „ http://sergio.dsc.upe.br/aspectos

  3. 1. Introdução • A Orientação a Objetos está consolidada. Entretanto, nem todas as promessas que este paradigma se propunha a cumprir foram atendidas. Algumas soluções foram propostas na tentativa de cumprir estas promessas pendentes, entre elas a Orientação a Aspectos. • A Orientação a Aspectos (OA) é um paradigma que estende a Orientação a Objetos (e outros, como o paradigma estruturado) introduzindo novas abstrações. Estes novos elementos são destinados a suprir deficiências na capacidade de representação de algumas situações.

  4. Motivação • „ Queremos desenvolver software de qualidade capaz de se adaptar a mudanças que lide com a complexidade. • A complexidade crescente dos sistemas • de software gera novos desafios para as • metodologias da Engenharia de Software

  5. Programa orientado a objetos • „ Abstrações bem mais próximas do • mundo do problema • objetos, não funções • „ Em um programa, “tudo” é objeto; • „ Um programa é um monte de objetos ; dizendo aos outros o que fazer;

  6. “A orientação a objetos tem por objetivo diminuir a distância conceitual entre o mundo real e o computacional.”

  7. Creditar Debitar

  8. Classe de Contas Bancárias

  9. Classe em Java publicclass Conta { privateString numero; privatedouble saldo; ... publicvoid debitar (double valor) { if(this.getSaldo() >= valor) this.setSaldo(this.getSaldo()-valor); else } publicvoid creditar (double valor) { this.setSaldo(this.getSaldo()+valor); } }

  10. OO resolve nosso problema? • „ Ainda não! • „ Complexidade aumenta sem parar • „ Limitações com objetos • • fatores de qualidade ainda são prejudicados • Problema (mesmo com OO) • „ Código relacionado a certos interesses são transversaisEspalhadospor vários módulos de • implementação • (classes)

  11. Tipos de interesses • „ Funcionais (negócio) • creditar, debitar, transferir • Não-funcionais (sistêmicos) • logging • tratamento de exceções • autenticação • desempenho • concorrência e sincronização • persistência...

  12. Cada cor representa um interesse diferente

  13. E agora???

  14. Agora que entra o conceito de orientação a aspectos • Modularização de interesses transversais • „ Promove separação de interesses • „ Implementação de um interesse dentro • de uma unidade... Aspecto nova unidade de modularização e abstração

  15. Separação de Interesses(separationofconcerns) • Para contornar a complexidade de um • problema, deve-se resolver uma questão • importante ou interesse (concern) por vez • [Dijkstra 76]

  16. Implementação com AOP • Complementa a orientação a objetos • novo paradigma? • „ Melhoria em reuso e extensibidade • „ Separação de interesses • relação entre os aspectos e o resto do sistema nem sempre é clara • „ Normalmente menos linhas de código

  17. Em uma linguagem orientada a aspectos • Parte OO • Objetos modularizam interesses não-transversais • Parte de aspectos • Aspectos modularizam interesses transversais

  18. AspectJ • „ Extensão simples e bem integrada de Java • gera arquivos .class compatíveis com qualquer máquina virtual Java • „ Linguagem orientada a aspectos • „ Inclue suporte de ferramentas • JBuilder, Eclipse • „ Implementação disponível • open source • „ Comunidade de usuários ativa • „ Mantida por uma grande empresa (IBM)

  19. Para começar... • Temos que identificar os pontos de interesse na execução • „ Neste exemplo: ao fazer um crédito ou débito em qualquer conta • „ Pontos de junção (join points) • pontos na execução de um programa • chamadas de métodos • acesso a atributos (escrita, leitura) • etc.

  20. Precisamos ainda agrupar! • Interesse logging ocorre em todas as chamadas a creditar e debitar • „ Precisamos agrupar todos os pontos de junção • „ Em AspectJ • pointcut (conjunto de pontos de junção)

  21. Pointcut • Agrupamento de pontos de junção • Uso de filtros de AspectJ

  22. Identificamos os pontos... agora precisamos decidir duas coisas O que fazer nestes pontos? Fazer isto antes ou depois do ponto?

  23. Advices (adendo) • Especifica o código que será executado quando acontecer os pontos indicados • parecido com métodos • „ Comportamento executado • antes (before) • depois (after)

  24. Exemplo(advice)

  25. Vamos ver um exemplo ???

  26. Temos o seguinte código em java e vamos em seguida fazer orientado a aspectos publicclass Conta { privateString numero; privatedouble saldo; ... publicvoid debitar (double valor) { if(this.getSaldo() >= valor){ this.setSaldo(this.getSaldo()-valor); System.out.println(“ocorreu um debito!"); } } publicvoid creditar (double valor) { this.setSaldo(this.getSaldo()+valor); System.out.println(“ocorreu um credito!"); } }...

  27. Aspecto LogContas

  28. #Partiu_Exercício_ Fixação

  29. Exercício • Faça um aspecto que modularize este concernde logging • „ Dica: usar dois pointcuts e dois advices

  30. Pontos positivos e negativos a cerca do tema...

  31. Positivos... • modularidade, reuso, e extensibilidade • inconsciência (obliviousness) • produtividade • permite implementação e testes progressivos

  32. Negativos... • Novo paradigma – aprendizado – relação entre classes e aspectos deve ser minimizada – inconsciência (obliviousness) • Projeto da linguagem – tratamento de exceções – conflitos entre aspectos • Requer suporte de ferramentas • Combinação (apenas) estática

  33. Conclusão • Certamente a Orientação a Aspectos (OA) ainda não é o paradigma ideal, e acreditamos que em breve surgirão outros paradigmas capazes de melhor abstrair / expressar soluções, e por tal, permitindo a criação de soluções melhores. Mas o que fica claro para nós é que, a OA é um grande passo rumo ao paradigma ideal. Neste artigo, e mesmo no livro, trabalhamos apenas a parte da Orientação a Aspectos ligada à programação, entretanto as vantagens da OA quando aplicadas a análise e, principalmente, ao projeto podem ser impressionantes, mas isto é um tema para um outro artigo.

More Related