Paradigmas de Linguagens de Programação Faculdade Nova Roma Cursos de Ciências da Computação (6 Período) Prof Adriano Avelar - Site: wwwadrianoavelarcom Email: edsonavelar@yahoocombr
PROGRAMAÇÃO ORIENTADA A ASPECTOS
Programação Orientada a Objetos Acoplamento Acoplamento é o nível de dependência entre classes; Deve-se tentar minimizar o acoplamento para evitar a propagação de mudanças e para possibilitar a reutilização de classes; Coesão Coesão é o nível de integridade interna de uma classe; Classes com alta coesão têm responsabilidades bem definidas e são difíceis de dividir em duas ou mais classes; Classes com baixa coesão tratam de responsabilidades diversas e em geral podem ser divididas
Módulos Os termos desenvolvimento estruturado e orientação a objetos dizem respeito à modularidade do sistema São formas distintas de se dividir um sistema em partes A divisão em partes é importante para se reduzir a complexidade de um sistema O termo separação de interesses foi cunhado por Dijkstra em 1974 para denotar o princípio que guia a divisão em partes:
Separação de Interesses O ideal seria que a parte do programa dedicada a satisfazer a um determinado interesse estivesse concentrada em uma única localidade física, separada de outros interesses
Separação de Interesses O desenvolvimento estruturado realizou a separação de interesses orientando-se através das diferentes funcionalidades oferecidas pelo software A POO definiu que a separação deveria acontecer em duas dimensões primeiro dividido em termos de dados e depois em termos das funções que utilizam cada tipo de dados
Programação Estruturada Um problema é dividido em funções Função B Função D Função A Função F Função C Função E
POO Um problema é dividido em Objetos Objeto A Atributos (Dados) Objeto B Atributos (Dados) Objeto C Atributos (Dados) Métodos (Funções) Métodos (Funções) Métodos (Funções)
POO (Problema) Objeto A Métodos logmessage() Outros Métodos Objeto B Métodos logmessage() Outros Métodos Objeto C Métodos logmessage() Outros Métodos
Interesse Entre-Cortante (Cross-cutting concern) Objeto A Métodos LoglogMessage() Outros Métodos Objeto B Métodos LoglogMessage() Outros Métodos Objeto C Métodos LoglogMessage() Outros Métodos << depende >> Log << depende >> << depende >> Métodos logmessage() Não faz parte da Lógica de Negócio
Problemas Muitas relacionamentos com objetos entrecortantes O código ainda é requerido em todos os métodos Dificultado de mudanças
Aspecto Objeto A Objeto B Objeto C Métodos Outros Métodos Métodos Outros Métodos Métodos Outros Métodos Configuração de Aspecto Transação Aspecto Log Aspecto Segurança Aspecto
POA (AOP) Pontos de junção (joinpoints): É um ponto específico de um objeto Ex: Entrada e saída de métodos Pontos de Corte (pointcuts): são conjunto de pontos de junção eles detectam em que ponto do programa os aspectos deverão interceptar Conselhos (advice): um trecho de código que deve ser executado em pontos de junção selecionados por um ponto de corte
POA (AOP) Advisor Logger Objeto Método A Método B Método C Joinpoint
Aspecj Plugin eclipse Versão Kepler http://downloadeclipseorg/tools/ajdt/43/update/ Outras versões (download plugin ) http://eclipseorg/ajdt/downloads/
Exemplos (Classe Java comum)
Aspecto
Pointcuts
Pointcuts
Exemplo 02 Capturando exceção Parametrojava ParametroAspectoaj
Exemplo 02 Obtendo parâmetros ParametroAspectoaj
Exemplo 02 Obtendo Objetos ParametroAspectoaj
Exemplo 02 Reflexão Pegando nome do método e da classe do joinpoint