37
Introdução à AOP Desenvolvimento de Sistemas Orientados a Aspectos Prof. Rodrigo Ribeiro

Introdução à AOP

  • Upload
    halima

  • View
    54

  • Download
    0

Embed Size (px)

DESCRIPTION

Introdução à AOP. Desenvolvimento de Sistemas Orientados a Aspectos Prof. Rodrigo Ribeiro. Evolução. Linguagens de programação Evolução dirigida pelas necessidades Assembly Linguagens de alto nível (não estruturadas). Linguagens estruturadas. Linguagens orientadas a objetos. Herança - PowerPoint PPT Presentation

Citation preview

Page 1: Introdução à AOP

Introdução à AOP

Desenvolvimento de Sistemas Orientados a Aspectos

Prof. Rodrigo Ribeiro

Page 2: Introdução à AOP

Evolução Linguagens de programação

Evolução dirigida pelas necessidades Assembly Linguagens de alto nível (não estruturadas). Linguagens estruturadas. Linguagens orientadas a objetos.

Herança Polimorfismo

Evolução: Permitiu gerenciar complexidade do software.

Page 3: Introdução à AOP

Evolução Porém...

A evolução resolve antigos problemas... A cada novo software, possivelmente novos

problemas são levantados... Possivelmente, abordagem atual não os resolve

de maneira adequada. Abordagem Atual: OOP.

Encapsulamento, Herança e Polimorfismo. Mas a OOP resolve todos os problemas?

Page 4: Introdução à AOP

Evolução Metodologia OOP

Padrões de projeto e de arquitetura de sistemas Bom desenho de software custa $$$

Dilema do arquiteto Pergunta: Quanto de desenho é necessário? Desenho Elaborado

Prevê mudanças de requisitos e se adapta bem a estas. Porém pode ser difícil de implementar e entender Custo e prazo de entrega elevados

Desenho normal Custo e prazo de entrega OK.

Dilema do arquiteto: equilíbrio entre qualidade e custo

Page 5: Introdução à AOP

Evolução Processos e metodologias de software

Mudanças de requisitos Bom desenho

Permite a alteração e inclusão de novos requisitos Usando OOP...

Existem requisitos que afetam diversos módulos já implementados.

Exemplo: Mudança de regras para autenticação Alteração na regra Possivelmente nos pontos de utilização

Page 6: Introdução à AOP

Evolução OOP não resolve todos os problemas...

Sistemas de software e interesses Software como um conjunto de interesses

Regras de negócio Persistência de dados Sincronização e concorrência Logging Segurança

Problema Estes interesses se espalham por todo o software

Page 7: Introdução à AOP

Interesses

Page 8: Introdução à AOP

Interesses e Requisitos Requisitos (requirements)

Funcionalidades núcleo de um sistema Ex: Gerenciamento de contas e clientes em um

sistema bancário. Interesses (concern)

Funcionalidades que são comuns aos requisitos.

Ex: persistência, logging, autenticação, etc...Problema: O que é requisito e o que é

interesse?

Page 9: Introdução à AOP

Separação de Interesses

Page 10: Introdução à AOP

Separação de Interesses Separando interesses...

Reduzimos a complexidade do sistema. Implementação separada de interesses

Interesses são ortogonais Ortogonal: Independentes Ex: Alteração do mecanismo de persistência não

deve modificar a implementação de outros interesses

Page 11: Introdução à AOP

Separação de Interesses

Lógica de negócioPersistência

Segurança

Page 12: Introdução à AOP

Implementação de Interesses

Tradicionalmente: Segurança Persistência Lógica de negócio

Problema: Como modularizar algo espalhado?

Page 13: Introdução à AOP

Implementação de Interesses Exemplo

Sistema Bancário Controle de contas, de clientes e módulo gerencial

Crédito e débito em contas Cadastro de clientes e contas

Interesse: Logging Registrar todo acesso ao sistema bancário

Objetivo: Auditoria de sistema Problema

Interesse que se espalha por todos os módulos Difícil reuso e manutenção

Page 14: Introdução à AOP

Implementação de Interesses

Módulo de clientes

Módulo de contas

Módulo gerencial

Módulo de Logging

Chamadas de API

Page 15: Introdução à AOP

Implementação de Interesses Queremos reutilizar interesses espalhados! Mas como?

Linguagens estruturadas: funções Linguagens OO: Classes

Usar tecnologia OO? Não. Classes não são capazes de modularizar

interesses espalhados.Porquê?

Page 16: Introdução à AOP

Implementação de Interesses Interesses espalhados são...

Espalhados! Problema: Com OOP:

Interesses são concentrados em classes Mas a utilização continua espalhada...

Então... Temos que obter uma maneira para contornar isso...

Solução Interesse concentrado em um único módulo. Especificar regras para “misturar” interesse com o

resto do código do programa.

Page 17: Introdução à AOP

Implementando Interesses - AOP

Módulo de clientes

Módulo de contas

Módulo gerencial

Módulo de Logging

Chamada de API

Aspecto de Logging

Chamadas inseridas por um combinador (weaver)

Page 18: Introdução à AOP

Implementação de Interesses Abordagem Tradicional – Logging

public interface Logger {public void log(String message);

}

Page 19: Introdução à AOP

Implementação de Interesses Classe de Conta Bancáriapublic class Account extends AbstractAccount{ //variáveis de instância da classe

//instância do logger Logger logger = LoggerFactory.getLoggerInstance(); public void debit(Double value){...}

public void credit(Double value){...} public void save(){...} public void load(){...}}

Page 20: Introdução à AOP

Implementação de Interesses

Método de créditopublic void credit(double value) { logger.log(“Init crediting:” + value); //manipulação do saldo...

logger.log(“Finish crediting:” + value);}

Page 21: Introdução à AOP

Interesses Transversais Algumas observações...

Logging não é relacionada com contas bancárias...

Problema: Desenho OO não adequado...

Método de crédito não somente manipula saldo: realiza logging.

Em sistemas OO reais... Situação comum. Interesses espalhados por

diversas classes.

Page 22: Introdução à AOP

Interesses Transversais Sintomas

Código entrelaçado (code tanggling) Um módulo implementa diversos interesses.

Código espalhado (code scattered) Um interesse espalhado por diversos módulos.

Page 23: Introdução à AOP

Interesses Transversais

Código Entrelaçado

Legenda:

Lógica de NegócioPersistênciaSegurançaLogging

Page 24: Introdução à AOP

Interesses Transversais Código Espalhado

Frente de caixa

Caixa Eletrônico

Internet banking

Banking phone

Autenticação

Page 25: Introdução à AOP

Interesses Transversais

Problemas Difícil compreensão e evolução do código

Código espalhado Menos reuso

Problema: Código entrelaçado Menos qualidade

Código entrelaçado dificulta revisões de código

Page 26: Introdução à AOP

Introdução à AOP AOP é baseada em...

Tecnologia orientada a objetos Utilizada para representar requisitos de lógica de

negócio. Novos conceitos para representar interesses

transversais Aspecto: Encapsula um interesse transversal.

Ex: Classe de conta bancária Não sabe que existe autenticação ou logging. Autenticação e logging em um Aspecto.

Page 27: Introdução à AOP

Introdução à AOP Realmente precisamos de AOP?

Não é possível resolver usando OOP? Padrões de Projeto

Dynamic Proxy (Presente em Java >= 1.3)

Outras abordagens (Ainda em pesquisa...) Programação orientada a sujeitos – Subject

Oriented Programming Programação Adaptativa – Adaptive Programming

Page 28: Introdução à AOP

Introdução à AOP Padrão Proxy

Page 29: Introdução à AOP

Introdução à AOP Dynamic Proxies

Recurso para modularizar o padrão Proxy Dinamicamente associar o objeto ao seu proxy. Baseado em Reflexão (Reflection)

Buschmann, 1996 Problema

Reflection em Java compromete a performance... Adequado para modularizar interesses simples...

Page 30: Introdução à AOP

Introdução à AOP Metodologia AOP

Similar a OOP Identificar requisitos (classes) Implementá-las Combiná-las

Em AOP... Além de identificar requisitos: identificar Interesses! Implementar Combinar

Page 31: Introdução à AOP

Introdução à AOP

Page 32: Introdução à AOP

Introdução à AOP Metodologia AOP

Só uma metodologia não é útil Java: Implementação de OOP

Definição da linguagem e ferramentas Implementação de AOP

Precisamos de uma linguagem Sintaxe e semântica definidas Como implementar interesses transversais?

Ferramentas Compilador, IDE...

Page 33: Introdução à AOP

Introdução à AOP Características de uma linguagem AOP

Implementação de interesses transversais Recursos para modularização similares a Java, C++...

Especificação de regras de combinação (weaving) Regras de combinação

Determinam como combinar interesses para formar o sistema Expressas declarativamente (Usando lógica, similar a Prolog) Ex: Logging

Logging realizado em pontos especificados por regras de combinação

Ex: Autenticação Verificação de permissões e acesso

Page 34: Introdução à AOP

Introdução à AOP

Lógica de negócio

Interesses + Regras de combinação

AOPWeaver

Sistema Final

Page 35: Introdução à AOP

Introdução à AOP Benefícios

Permite tornar claras responsabilidades de cada módulo. Maior modularização Mais reuso Facilidade de evolução Decisões de desenho podem ser tomadas a posteriori

E isso leva a... Redução de tempo de desenvolvimento de um projeto Redução de custos.

Page 36: Introdução à AOP

Introdução à AOP Mitos e realidades sobre AOP

Fluxo de execução difícil de entender Verdade...

AOP não resolve novos problemas Verdade...

AOP promove software´s de desenho ruim Falso...

AOP substituirá a OOP Falso...

Page 37: Introdução à AOP

Introdução à AOP Na aula de hoje vimos...

Que a OOP não resolve todos os problemas Dilema do arquiteto: Muito ou pouco desenho? Conceitos de:

Requisitos Interesses transversais Código espalhado Código entrelaçado Características de uma linguagem AOP

Próxima aula... Introdução à linguagem AspectJ