programação orientada a aspectos

36
PROGRAMAÇÃO ORIENTADA A ASPECTOS Equipe: Leandro Oliveira Anusio Menezes

Upload: shaeleigh-fuller

Post on 01-Jan-2016

27 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: Programação orientada a aspectos

PROGRAMAÇÃO ORIENTADA A

ASPECTOS

Equipe:

Leandro Oliveira

Anusio Menezes

Page 2: Programação orientada a aspectos

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�

Page 3: Programação orientada a 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.

Page 4: Programação orientada a aspectos
Page 5: Programação orientada a aspectos

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

Page 6: Programação orientada a aspectos

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;

Page 7: Programação orientada a aspectos
Page 8: Programação orientada a aspectos

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

Page 9: Programação orientada a aspectos

Creditar

Debitar

Saldo Número

R$100,00 12.344-67

Page 10: Programação orientada a aspectos

CLASSE DE CONTAS BANCÁRIAS

Page 11: Programação orientada a aspectos

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

}

}

Page 12: Programação orientada a aspectos

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)

Page 13: Programação orientada a aspectos

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

Page 14: Programação orientada a aspectos

Cada cor representa um interesse diferente

Page 15: Programação orientada a aspectos

E agora???

Page 16: Programação orientada a aspectos

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

Page 17: Programação orientada a aspectos

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]

Page 18: Programação orientada a aspectos

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�

Page 19: Programação orientada a aspectos

EM UMA LINGUAGEM ORIENTADA A ASPECTOS

Parte OO Objetos modularizam interesses não-transversais

Parte de aspectos Aspectos modularizam interesses transversais

Page 20: Programação orientada a aspectos

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

Page 21: Programação orientada a aspectos

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.

Page 22: Programação orientada a aspectos

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)

Page 23: Programação orientada a aspectos

POINTCUT

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

Page 24: Programação orientada a aspectos

IDENTIFICAMOS OS PONTOS...

agora precisamos decidir duas coisas

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

Page 25: Programação orientada a aspectos

ADVICES (ADENDO)

Especifica o código que será executado quando acontecer os pontos indicados parecido com métodos

Comportamento executado� antes (before) depois (after)

Page 26: Programação orientada a aspectos

EXEMPLO(ADVICE)

Page 27: Programação orientada a aspectos

Vamos ver um

exemplo ???

Page 28: Programação orientada a aspectos

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!");

}}...

Page 29: Programação orientada a aspectos

ASPECTO LOGCONTAS

Page 30: Programação orientada a aspectos

#Partiu_Exercício_Fixação

Page 31: Programação orientada a aspectos

EXERCÍCIO

Faça um aspecto que modularize este concern de logging

Dica: usar dois pointcuts e dois advices�

Page 32: Programação orientada a aspectos
Page 33: Programação orientada a aspectos

PONTOS POSITIVOS E NEGATIVOS A CERCA DO TEMA...

Page 34: Programação orientada a aspectos

POSITIVOS...

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

Page 35: Programação orientada a aspectos

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

Page 36: Programação orientada a aspectos

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.