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

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

Embed Size (px)

Citation preview

Page 1: 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

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

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

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

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

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

Introdução

Page 7: 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

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

Introdução

Exemplo de um aspecto:

-> O campo "Movimento" representa um Aspecto.

Page 9: 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

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

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

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

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

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

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

Desenvolvimento do tema

-> Como funciona a POA?

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

Page 16: 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

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

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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 19: 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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 20: 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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 21: 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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 22: 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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Page 23: 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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Com POA:

Page 24: 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

Ferramentas de desenvolvimento: O Aspect-J (exemplo)

Sem POA:

Page 25: 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

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

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“