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
 • 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ças
que 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
Saldo
Número
R$100,00
12.344-67
Debitar
CLASSE DE CONTAS BANCÁRIAS
CLASSE EM JAVA
public 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
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
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)
TEMOS O SEGUINTE CÓDIGO EM JAVA E VAMOS
EM SEGUIDA FAZER ORIENTADO A ASPECTOS
public 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
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.
Download

Programação Orientada à Aspectos