![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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.com.br/reader034/viewer/2022051515/552fc123497959413d8cc6bc/html5/thumbnails/26.jpg)
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“