Programação orientada a aspectos
-
Upload
shaeleigh-fuller -
Category
Documents
-
view
21 -
download
0
description
Transcript of 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� • 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úmero
R$100,00 12.344-67
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
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 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
#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.