grupo: alexandre henrique vieira soares anderson de rezende rocha flávio luis alves

26
Uma comparação entre a Programação Orientada a Aspectos e a Programação Orientada a Componentes. Uma visão geral Grupo: Alexandre Henrique Vieira Soares Anderson de Rezende Rocha Flávio Luis Alves Júlio César Alves

Upload: nam

Post on 10-Jan-2016

30 views

Category:

Documents


3 download

DESCRIPTION

Uma comparação entre a Programação Orientada a Aspectos e a Programação Orientada a Componentes. Uma visão geral. Grupo: Alexandre Henrique Vieira Soares Anderson de Rezende Rocha Flávio Luis Alves Júlio César Alves. Estrutura da apresentação. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Uma comparação entre a Programação Orientada a Aspectos e a Programação Orientada a Componentes.

Uma visão geralGrupo:

Alexandre Henrique Vieira Soares

Anderson de Rezende Rocha

Flávio Luis Alves

Júlio César Alves

Page 2: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Estrutura da apresentação

a) Introdução

b) Contexto

c) Motivação

d) Justificativa do tema

e) Desenvolvimento do tema

f) Ferramentas de desenvolvimento

g) Conclusão

h) Referência

Page 3: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Introdução

-> A engenharia de software e as linguagens de programação coexistem em um relacionamento de suporte mútuo.

-> A maioria dos processos de desenvolvimento de software da atualidade considera um sistema com unidades cada vez menores de desenvolvimento.

Page 4: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Introdução

-> Uma propriedade de um sistema que deve ser implementada pode ser vista como um componente ou como um aspecto.

-> A propriedade pode ser vista como um componente se puder ser encapsulada em um procedimento generalizado.

Page 5: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Introdução

-> Aspectos são normalmente propriedades que envolvem diversas unidades de um sistema, afetando a semântica dos componentes funcionais sistematicamente. Tais como: controle de concorrência em operações em uma mesma conta bancária, registro das transações de uma determinada conta.

Page 6: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Introdução

Page 7: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Introdução

-> Existem propriedades que não se enquadram em componentes da decomposição funcional.

-> Seus códigos encontram-se espalhados através do código da aplicação. Isto dificulta a separação da funcionalidade básica do sistema dessas propriedades.

-> Como resolver estes problemas? Programação Orientada a Aspectos (POA). Alternativa para resolver problemas que nem as técnicas de programação Orientada à Objetos e nem as técnicas de programação Estruturada resolvem facilmente.

Page 8: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Introdução

Exemplo de um aspecto:

-> O campo "Movimento" representa um Aspecto.

Page 9: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Contexto

-> Visando a maior integração dos softwares produzidos desenvolveu-se a POA.

-> Diante deste contexto a Orientação a Aspectos objetiva oferecer suporte ao programador na tarefa de separar:

i) componentes dos aspectos

ii) componentes entre si

iii) aspectos entre si

Page 10: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Motivação:

-> A POA complementa a POO por facilitar um outro tipo de modularidade que expande a implementação espalhada de uma responsabilidade dentro de uma simples unidade.

Page 11: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Por que usar a POA?

-> Por que diminui a complexidade dos componentes, visto que uma parte do código fica na definição dos aspectos.

-> Por estar centralizado em uma única unidade, alterações são muito mais simples, não é preciso reescrever inúmeras classes.

Page 12: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Por que usar a POA?

-> Com a diminuição do tamanho do código dos componentes a complexidade é diminuída.

-> Por ser uma forma melhor de gerenciar a complexidade dos componentes.

-> Por ter menos código e ser menos complexo, está sujeito a menos erros.

Page 13: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Por que ninguém usa POA?

-> Mesmo tendo evoluído muito a POA ainda deixa a desejar em alguns pontos:

a) Como definimos o que é ou não um aspecto no nosso projeto?

b) Existem metodologias para definir isso?

Page 14: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Justificativa do tema

-> Por que o tema foi escolhido?

a) Para conhecer uma nova abordagem de como montar projetos de software

b) Alguém já conhecia POA?

c) Alguém pretende usar POA?

Page 15: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Desenvolvimento do tema

-> Como funciona a POA?

Uma implementação básica de POA, consiste em:

Page 16: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Crosscutting

-> A POA permite ao programador separar os interesses comuns do sistema (que fogem a típica divisão de classes).

-> O comportamento que não se encaixa naturalmente dentro de um módulo de um programa é chamado comportamento que atravessa (crosscutting) o sistema, ou seja, está espalhado em várias classes.

-> A POA ajuda a manter a consistência do projeto, apresentando um novo nível de modularidade: os aspectos.

Page 17: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J

-> AspectJ é uma linguagem de aspecto. Ela é uma extensão da linguagem Java.

-> Conta com um montador (Weaver) .

-> É suportado por várias IDEs .

-> A maior vantagem de AspectJ é a possibilidade de implementar funcionalidades em separadoda parte funcional do sistema, e automaticamente inserir ou remover tais aspectos do mesmo.

Page 18: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 19: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 20: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 21: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 22: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 23: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Com POA:

Page 24: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Sem POA:

Page 25: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Conclusões

-> A programação orientada a aspecto passa a fazer parte do dia-a-dia dos desenvolvedores.

-> Existem detalhes que precisam ser melhor estudados.

-> Falta uma metodologia.

Page 26: Grupo:     Alexandre Henrique Vieira Soares     Anderson de Rezende Rocha     Flávio Luis Alves

Referências

-> Pressman, Software Engeneering

-> Deitel & Deitel, Java, How to Program

-> www.aspectj.org

-> Dissertaçao de mestrado de Eduardo Laureano, UFPE - "Persistence implementation with Aspect-J"

-> Artigo de William Grosso em DrDobbs.com (DDJ.com) - "Aspect-Oriented Programming & AspectJ“