Programação Orientada a Aspectos



Documentos relacionados
Paradigmas de Linguagens de Programação

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo

2 Desenvolvimento de Software Orientado a Aspectos

Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com

Separação de Interesses Programação Estruturada e Programação Orientada a Objetos Entrelaçamento de Código Espalhamento de Código

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UML 01. Curso Superior de Tecnologia em Banco de Dados Disciplina: Projeto de Banco de Dados Relacional 1 Prof.: Fernando Hadad Zaidan

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Implementando uma Classe e Criando Objetos a partir dela

Desenho de Software. Desenho de Software 1

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

AspectJ em 20 minutos

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Profº. Enrique Pimentel Leite de Oliveira

Orientação a Objetos com Java

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Identificação de Interesses Transversais: Uma Visão Geral

Técnicas de Programação Avançada TCC Profs.: Anselmo Montenegro Conteúdo: Introdução à Orientação a Objetos

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Aspectos técnicos do desenvolvimento baseado em componentes

Histórico da Orientação a Objetos Ciclo de vida de Desenvolvimento de SW

Programação Orientada a Objetos

Análise e Projeto Orientados por Objetos

Herança. Alberto Costa Neto DComp - UFS

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Teste de Software. Ricardo Argenton Ramos Engenharia de Software I

Questões de Concursos Públicos sobre Orientação a Objetos e UML

POO Programação Orientada a Objetos. Classes em Java

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Prof. Jhonatan Fernando

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Java. Marcio de Carvalho Victorino

UML Aspectos de projetos em Diagramas de classes

Guia de Fatores de Qualidade de OO e Java

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Especificação do 3º Trabalho

O que são Bancos de Dados?

Programação Orientada a Objetos em Java

Programação Orientada a Aspectos com

FBV - Linguagem de Programação II. Um pouco sobre Java

Sistemas Operacionais 3º bimestre. Dierone C.Foltran Jr.

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

Ricardo Roberto de Lima UNIPÊ APS-I. Históricos e Modelagem Orientada a Objetos

Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

TRABALHO DE DIPLOMAÇÃO Regime Modular ORIENTAÇÕES SOBRE O ROTEIRO DO PROJETO FINAL DE SISTEMAS DE INFORMAÇÕES

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Introdução a Informática. Prof.: Roberto Franciscatto

Tópicos em Engenharia de Computação

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Felipe Denis M. de Oliveira. Fonte: Alice e Carlos Rodrigo (Internet)

POO e suas Limitações Introdução POA AspectJ: Conceitos Básicos Exemplo: Tracing Padrões de Projeto e POA

Prof. Esp. Adriano Carvalho

Estudo de Caso Sobre Programação Orientada a Aspectos Utilizando Protocolo RMI

3 Classes e instanciação de objectos (em Java)

Bibliografia. Desenvolvimento Orientado a Objetos. Introdução. Bibliografia. O que você vê?

Introdução à Linguagem

Modelagemde Software Orientadaa Objetos com UML

Engenharia de software para desenvolvimento com LabVIEW: Validação

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Roteiro do Programa e Entrada/Saída

Informática I. Aula 6. Aula 6-12/09/2007 1

Roteiro. BCC321 - Banco de Dados I. Conceitos Básicos. Conceitos Básicos. O que é um banco de dados (BD)?

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

Reuso com Herança a e Composiçã

Introdução ao Modelos de Duas Camadas Cliente Servidor

2 Diagrama de Caso de Uso

Computação II Orientação a Objetos

1. Apresentação Objetivos

Programação Avançada

ADMINISTRAÇÃO DE ATIVOS DE TI GERENCIAMENTO DE CONFIGURAÇÃO

OUTROS PARADIGMAS: PROGRAMAÇÃO

Capítulo 8. Introdução UML

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

Introdução a Java. Hélder Nunes

Padrões de projeto 1

PROGRAMA DE DISCIPLINA

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Orientação a Objetos

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

OOP - Java. Artur Duque Rossi Mestrado em Modelagem Computacional Universidade Federal de Juiz de Fora

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

UNIVERSIDADE PRESBITERIANA MACKENZIE FACULDADE DE COMPUTAÇÃO E INFORMÁTICA

Linguagem de Programação I. Orientação a Objetos em Java

Banco de Dados. Uma coleção de dados relacionados [ELMASRI/NAVATHE]

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

CONVENÇÃO DE CÓDIGO JAVA

Introdução ao Projeto. Projeto de Software. 1) Objetivos. 2) Importância. Análise e Projeto - Diferenças. Importância. Silvia Regina Vergilio - UFPR

Módulo 07 Características Avançadas de Classes

Introdução às Linguagens de Programação

Transcrição:

Programação Orientada a Aspectos Uma Breve Introdução Universidade Estadual do Oeste do Paraná Centro de Ciências Exatas e Tecnológicas Colegiado de Informática Prof. Luiz Antonio

Roteiro Introdução Evolução das Linguagens Histórico da POA Estrutura de um Aspecto AspectJ Conclusão Outras Implementações 2

Introdução De canhões e fortes sob a terra Linha Maginot (França) Desenvolvimento de Software Necessidade de estratégias mais produtivas, flexíveis e de qualidade 3

Evolução Linguagem de máquina Programação Estruturada Programação Orientada a Objetos Programação Pós-Objeto 4

Programação Estruturada Da linguagem de máquina para a programação estruturada Suporte a decomposição algorítmica; Procedimentos e funções; Sai o goto e entram as estruturas de controle; Programas maiores, menos flexíveis e difíceis de manter e reutilizar. 5

Exemplo Manipulador de figuras geométricas Figuras são compostas de pontos e linhas; Vários procedimentos para desenhar, girar, escalonar, etc. Código espalhado em vários procedimentos; Introdução de novas figuras exige muitas alterações. 6

Programação Orientada a Objetos Anos 60 e 70: Simula 67, Smalltalk; Decomposição orientada a objetos Objeto: procedimentos e dados em uma unidade independente e auto-contida; A herança e o polimorfismo reduzem o código e facilitam a reutilização; Encapsulamento; Sistemas menores e mais robustos; Como fica o manipulador de figuras geométricas? 7

Onde a OO falha? Domínio do Problema Como representar detalhes que não tem conexão direta com o problema? O que fará parte de uma classe ou de outra? Coerência conceitual; Entrelaçamento de classes (scattering); Espalhamento de código (tangling). 8

Principais problemas da POO Redundância Fragmentos de código repetidos em diversos pontos; Fraca coesão Classes contém funcionalidades que não estão diretamente relacionadas a elas; Forte acoplamento Classes precisam conhecer métodos de outras classes. 9

Modularidade Programação estruturada e Programação Orientada a Objetos permitem a divisão do problema (sistema) em partes; Divisão reduz a complexidade; Separação de Interesses Todo sistema de software lida com diferentes interesses: dados, operações, etc. Cada interesse em uma localidade física. 10

Boa Modularidade Parsing de XML no org.apache.tomcat As linhas vermelhas mostras as linhas de código relevantes Estão todas localizadas em um único bloco 11

Problemas de Modularidade logging no org.apache.tomcat Código não está localizado em um único módulo Nem mesmo em um número pequeno de módulos 12

Entrelaçamento e espalhamento na POO 13

Decomposição orientada a Aspectos 14

Histórico da POA Criada nos laboratórios da Xerox em 1997; Objetivo Definir uma abordagem que permitisse expressar melhor as características ortogonais do comportamento do programa; Separação dos requisitos funcionais e nãofuncionais; Diminuir o entrelaçamento de código. 15

Programação Orientada a Aspectos: definição A Programação orientada a aspectos (POA) é uma tecnologia de programação em evolução que oferece suporte a novos mecanismos de abstração e composição com o objetivo de permitir alcançar uma melhor separação de concerns no nível da implementação. (Chavez, 2004) 16

Separação de Interesses... os sistemas de software complexos devem ser decompostos em unidades modulares menores e claramente separadas, cada uma lidando com um único interesse. (Chavez, 2004) 17

Programação Orientada a Aspectos: justificativa A POA surgiu como uma técnica de programação complementar ao Paradigma de Orientação a Objetos, que visa o tratamento, de maneira independente, de interesses que se revelam espalhados por todo o sistema ou entrelaçados em diversas classes, promovendo a reutilização e facilitando a manutenção do software. (Menolli e Castro, 2007) 18

Aplicação da POA Auditoria; Registro e rastreamento de operações; Persistência de dados; Tratamento de exceções; Políticas de desenvolvimento; Autenticação, identificação e autorização de usuários; 19

O Aspecto O aspecto é a unidade modular principal em AspectJ, assim como a classe é a unidade principal em Java; Um aspecto agrupa pontos de atuação, adendos e introduções. 20

O Aspecto Pontos de Junção (join points) Locais bem definidos da execução de um programa. Ex.: chamada de um método. Pontos de Atuação (pointcuts) Elementos do programa usados para definir um ponto de junção. Adendos (advices) Métodos executados quando um ponto de atuação é alcançado. 21

Pontos de Junção É qualquer ponto identificável pelo Aspecto durante a execução de um programa; entradas e saídas de métodos; construtores; tratamento de exceções; acessos a atributos de objetos; entre outros. 22

Pontos de Atuação São construções de programa que permitem a seleção de um ou mais pontos de junção; Pode-se usar expressões regulares para se especificar os pontos de atuação, permitindo grande flexibilidade. 23

Caracteres Especiais Caractere *.. + Significado Qualquer seqüência de caracteres Ex.: call(private void Item.set*(*)) Substitui zero ou mais sequências Ex.: call (* Comunicador.deliver(..)) Qualquer subclasse de uma classe Ex.: call (* Conta+.set*(*)) 24

Expressões Lógicas Operador! (Negação) (OU lógico) && (E lógico) Significado Ex.: Todos os métodos de todas as classes, exceto os da classe Comunicador. call(* *.*(..) &&!Comunicador) Ex.: Todos os métodos get e set de todas as classes que tratam com strings. call(string *.get*() * *.set*(string)) Ex.: Todos os métodos get da classe Conta e suas especializações, exceto ContaPoupanca call(* Conta+.get*() &&!ContaPoupanca) 25

Tipos de Junção Categoria call execution staticinitialization initialization get set handler Uso Chamada de método ou contrutor Execução de método ou construtor Inicialização de classe Inicialização de objetos Leitura de Atributo de classe Escrita de Atributo de classe Tratamento de Exceção 26

Adendo É um trecho de código que deve ser executado em pontos de junção selecionados por um ponto de corte; O adendo pode ser executado antes (before), depois (after), ou "em volta" (around) do ponto de junção; O around pode ser usado para substituir o ponto de junção pelo advice, ou para executar código antes e depois do ponto de junção. 27

AspectJ Linguagem de Aspectos para Java AspectJ: linguagem para aspectos do Java; ajc: compilador AJDT: plugin do Eclipse. 28

Anatomia do Aspecto public aspect AspectoExemplo { pointcut pontoatuacao1() : call (* Classe.metodo(..)); Ponto de Atuação before() : pontoatuacao1() { //ações } Aspecto Adendo 29

Resumo do Processo 30

Exemplo Shopping 31

Exemplo Log public class Inventory { private List<Item> items = new Vector<Item>(); static Logger logger = Logger.getLogger("trace"); public void additem(item item) { logger.logp(level.info, "Inventory", "additem", "Entering"); items.add(item); } } public void removeitem(item item) { logger.logp(level.info, "Inventory", "removeitem", "Entering"); items.remove(item); } 32

Exemplo Log public aspect TraceAspect { private Logger logger = Logger.getLogger("trace"); pointcut tracemethods() : call(* *.*(..)) &&!within(traceaspect); } before() : tracemethods() { Signature sig = thisjoinpointstaticpart.getsignature(); logger.logp(level.info, sig.getdeclaringtype().getname(), sig.getname(), "Entering"); } 33

Discussão O ponto de atuação identifica todas as chamadas de métodos O adendo registra as informações estáticas do ponto de junção interceptado thisjoinpointstaticpart permite acesso a informações estáticas, como o nome da classe ou do método e parâmetros 34

Exemplo Around Retornando nomes de Itens em maiúsculo public aspect NormalizaCaixaNomeCliente { pointcut caixaalta() : call (String Item.getNome()); } String around() : caixaalta() { String s = proceed(); return s.touppercase(); } 35

Inclusão do código dos Aspectos 36

Introduções É uma forma de um aspecto introduzir mudanças em classes, interfaces e aspectos do sistema; Por exemplo, pode-se acrescentar um atributo ou método a uma classe existente. 37

Exemplo: adição de métodos Podem ser adicionados a qualquer classe; aspect NomeDoAspecto { visibilidade tipodedado Classe.nomeDoMetodo(parâmetros) { //código do metodo } } Exemplo: aspect AspectoItemIntroduction { public void Item.toXML() { //código do metodo } } 38

Conclusão O objetivo do desenvolvimento orientado a aspectos é encapsular interesses em módulos fisicamente separados do restante do código; Além de decompor o sistema em objetos (dados) e métodos (funções), decompomos cada objeto e função de acordo com o interesse, agrupado em um módulo distinto; Esses módulos são denominados aspectos. 39

Outras Implementações Aspect.NET 2.1 JBoss AOP 40

Programação Orientada a Aspectos Uma Breve Introdução Dúvidas? Contato: larodrigues@unioeste.br

Bibliografia The AspectJ Projet. Disponível em: <http://www.eclipse.org/aspectj/> GRADECKI, J. D.; LESIECKI, N. Mastering AspectJ: Aspect-Oriented Programming in Java. Indianapolis: Wiley Publishing, 2003. LADDAD, R. AspectJ in Action: Practical Aspectoriented Programming. USA: Manning, 2003. MENOLLI, A.; CASTRO, C. Programação Orientada a Aspectos. Minicurso. EPAC, 2007. WINCK, D. V.; GOETTEN JUNIOR, V. AspectJ: Programação Orientada a Aspectos com Java. São Paulo: Novatec, 2006. 42