Programação orientada a aspectos

Preview:

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

PROGRAMAÇÃO ORIENTADA A

ASPECTOS

Equipe: Leandro OliveiraAnusio 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� • http://www.eclipse.org/ajdt (1.3.1) http://sergio.dsc.upe.br/aspectos�

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.

MOTIVAÇÃO

Queremos desenvolver software de �qualidade

capaz de se adaptar a mudançasque lide com a complexidade.

A complexidade crescente dos sistemas de software gera novos desafios para as metodologias da Engenharia de Software

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;

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

Creditar

Debitar

Saldo NúmeroR$100,00 12.344-

67

CLASSE DE CONTAS BANCÁRIAS

CLASSE EM JAVApublic class Conta {

private String numero;private double saldo;

...public void debitar (double valor) {if (this.getSaldo() >= valor)this.setSaldo(this.getSaldo()-valor);else

}public void creditar (double valor) {this.setSaldo(this.getSaldo()+valor);

}}

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 �

transversaisEspalhados por vários módulos de implementação (classes)

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...

Cada cor representa um interesse diferente

E agora???

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...

Aspectonova unidade de

modularização e abstração

SEPARAÇÃO DE INTERESSES(SEPARATION OF CONCERNS) Para contornar a complexidade de um problema, deve-se resolver uma questão importante ou interesse (concern) por vez [Dijkstra 76]

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�

EM UMA LINGUAGEM ORIENTADA A ASPECTOS Parte OO

Objetos modularizam interesses não-transversais Parte de aspectos

Aspectos modularizam interesses transversais

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)�

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.

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)

POINTCUT Agrupamento de pontos de junção Uso de filtros de AspectJ

IDENTIFICAMOS OS PONTOS...agora precisamos decidir duas coisas

O que fazer nestes pontos?Fazer isto antes ou depois do ponto?

ADVICES (ADENDO) Especifica o código que será executado

quando acontecer os pontos indicados parecido com métodos

Comportamento executado� antes (before) depois (after)

EXEMPLO(ADVICE)

Vamos ver um

exemplo ???

TEMOS O SEGUINTE CÓDIGO EM JAVA E VAMOS EM SEGUIDA FAZER ORIENTADO A ASPECTOSpublic class Conta {

private String numero;private double saldo;

...public void debitar (double valor) {if (this.getSaldo() >= valor){this.setSaldo(this.getSaldo()-valor);System.out.println(“ocorreu um debito!"); }}public void creditar (double valor) {this.setSaldo(this.getSaldo()+valor);System.out.println(“ocorreu um credito!");}

}...

ASPECTO LOGCONTAS

#Partiu_Exercício_Fixação

EXERCÍCIO Faça um aspecto que modularize este

concern de logging Dica: usar dois pointcuts e dois advices�

PONTOS POSITIVOS E NEGATIVOS A CERCA DO TEMA...

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

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

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.

Recommended