A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Desenvolvimento de Software Orientado por Aspectos Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues.

Apresentações semelhantes


Apresentação em tema: "Desenvolvimento de Software Orientado por Aspectos Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues."— Transcrição da apresentação:

1 Desenvolvimento de Software Orientado por Aspectos Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues

2 Índice O que é o AOSD ? O que é o AOSD ? Porquê usar AOSD ? Porquê usar AOSD ? Exemplos de utilização Exemplos de utilização Um exemplo em concreto Um exemplo em concreto Bibliografia Bibliografia

3 O que é o AOSD ? A Programação Orientada a Aspectos - Aspect-Oriented Programming ou simplesmente AOP - foi introduzida em 1996 por Gregor Kickzales, quando estava no Xerox Palo Alto Research Center. AOSD é uma nova tecnologia para separação de interesses (SOC) no desenvolvimento do software. Há ainda quem considere que o AOP é um complemento de OOP (Object-Oriented Programming) uma vez que AOP introduz uma maneira mais elegante de abordar certas questões.

4 O que é o AOSD ? Para entender o espírito da AOP, temos que entender alguns conceitos fundamentais. Responsabilidades (concerns) Responsabilidades (concerns) Sistemas de software consistem num conjunto de "áreas de interesse" ou responsabilidades distintas como, por exemplo, responsabilidades funcionais (lógica de negócio) e não-funcionais (performance, persistência de dados, logging, autenticação de utilizadores, segurança, verificação de erros,etc.). Existem ainda preocupações relacionadas com o processo de desenvolvimento, como clareza de entendimento, facilidade de manutenção, simplicidade de evolução do software, etc. Sistemas de software consistem num conjunto de "áreas de interesse" ou responsabilidades distintas como, por exemplo, responsabilidades funcionais (lógica de negócio) e não-funcionais (performance, persistência de dados, logging, autenticação de utilizadores, segurança, verificação de erros,etc.). Existem ainda preocupações relacionadas com o processo de desenvolvimento, como clareza de entendimento, facilidade de manutenção, simplicidade de evolução do software, etc.

5 O que é o AOSD ? Separação de responsabilidades (separation of concerns) Separação de responsabilidades (separation of concerns) A melhor maneira de se projectar um sistema é através da separação de responsabilidades distintas de tal modo que podemos alterar cada uma sem que isto afete as demais partes do sistema. A eficiência do desenvolvimento aumenta na medida em que conseguimos separar as diferentes responsabilidades em módulos estanques. Este princípio é razoavelmente antigo, e a OOP nos trouxe uma importante resposta a ele: a classe como uma dimensão para a decomposição de responsabilidades. Mas algumas responsabilidades não são tão facilmente decompostas em apenas uma dimensão...

6 O que é o AOSD ? Responsabilidades transversais (crosscutting concerns) Responsabilidades transversais (crosscutting concerns) Em sistemas complexos existem responsabilidades de interesse comum que são utilizadas por vários módulos. As responsabilidades não-funcionais que citamos geralmente têm esta característica, mas também algumas funcionais. Estas responsabilidades são difíceis de isolar porque são necessárias em vários pontos do código. Em OOP, uma classe oferece uma boa maneira de se separar a maioria das responsabilidades funcionais, mas é bastante limitada quando se trata de responsabilidades transversais. Com OOP os crosscutting concerns ficam espalhados por vários módulos em pequenas linhas de código que são repetitivos, resultando em sistemas difíceis de projetar, entender, implementar, manter e evoluir.

7 O que é o AOSD ? AOP envolve três fases distintas: * Decomposição: os vários aspectos do sistema são identificados e classificados como comuns ou crosscutting. * Decomposição: os vários aspectos do sistema são identificados e classificados como comuns ou crosscutting. * Implementação: os aspectos são implementados separadamente em classes (para os aspectos comuns). * Implementação: os aspectos são implementados separadamente em classes (para os aspectos comuns). * Recomposição: o sistema é recomposto à partir dos aspectos implementados segundo regras de recomposição. Esta fase é chamada de weaving. * Recomposição: o sistema é recomposto à partir dos aspectos implementados segundo regras de recomposição. Esta fase é chamada de weaving.

8 O que é o AOSD ? Uma implementação básica de AOP consiste em: uma linguagem para programar componentes (ex: Java) uma linguagem para programar componentes (ex: Java) uma linguagem para programar aspectos (ex: AspectJ) uma linguagem para programar aspectos (ex: AspectJ) um weaver para combinar as duas linguagens (ferramenta que também faz parte do AspectJ). um weaver para combinar as duas linguagens (ferramenta que também faz parte do AspectJ). O weaver é uma espécie de montador que tem como entrada um programa de componente e o(s) programa(s) de aspectos e como saída um programa numa linguagem específica (ex: Java).

9 Porquê usar Aspectos ? Cada vez é mais frequente o uso de aspectos para complementar determinada aplicação cujo código é orientado a objectos. Isto deve-se essencialmente ao facto das aplicações serem cada vez mais complexas e haver cada vez menos tempo para a implementação de código. Uma vez que os aspectos são implementados fora das classes (objectos), não é necessário andar a perder tempo a alterar código em várias partes de uma classe, ou alterar atributos, etc. Por outro lado os aspectos permitem alterar características de uma classe no meio da sua execução. Esta funcionalidade oferece-nos então um leque de soluções para vários problemas que antes não conseguiriamos resolver, ou demorariamos muito mais tempo.

10 Exemplos de utilização de Aspectos Exemplos de utilização de aspectos: Uma aplicação que gere um banco terá que fazer LOG de determinadas operações (ex: levantamentos, depósitos). Aplicação exemplo: Trabalho de P2 de à 2 anos. Uma aplicação que gere um banco terá que fazer LOG de determinadas operações (ex: levantamentos, depósitos). Aplicação exemplo: Trabalho de P2 de à 2 anos. Uma aplicação que lê um simples ficheiro de texto terá que ter em conta novos excepções na leitura de um ficheiro. Uma aplicação que lê um simples ficheiro de texto terá que ter em conta novos excepções na leitura de um ficheiro. Uma aplicação em que é possível criar regiões e que permite a selecção de várias regiões deve alterar as cores de fundo das mesmas para azul. Aplicação exemplo: Trabalho de P3 do ano passado. Uma aplicação em que é possível criar regiões e que permite a selecção de várias regiões deve alterar as cores de fundo das mesmas para azul. Aplicação exemplo: Trabalho de P3 do ano passado.

11 Exemplos de utilização de Aspectos Mais exemplos de utilização de aspectos: Uma aplicação de predição de palavras deve guardar estatísticas de quantas vezes as teclas foram pressionadas, percentagem de predições correctas, teclas poupadas,etc. Aplicação exemplo: 3º laboratório de IPC Uma aplicação de predição de palavras deve guardar estatísticas de quantas vezes as teclas foram pressionadas, percentagem de predições correctas, teclas poupadas,etc. Aplicação exemplo: 3º laboratório de IPC Uma página web a partir de determinado momento só pode ser visitada após autentificação correcta, ou o módulo de encriptação da password foi descoberto e é necessário alterá-lo sem alterar o resto da classe. Uma página web a partir de determinado momento só pode ser visitada após autentificação correcta, ou o módulo de encriptação da password foi descoberto e é necessário alterá-lo sem alterar o resto da classe. Entre muitos outros...

12 Um exemplo concreto Considerando o exemplo de um banco em que se pretende fazer logging de todos os levantamentos efectuados: @Aspect public class Logging { @Pointcut("call(* Levantamento * (..))") public void LOG() { public void LOG() { System.out.println(Levantamento efectuado no valor de + …); System.out.println(Levantamento efectuado no valor de + …); }} Muito mais simples, lógico e funcional que alterar métodos de classes com conteúdos que não lhes dizem respeito.

13 Bibliografia http://www.eclipse.org/aspectj http://www.eclipse.org/aspectj http://www.sdmagazine.com/documents/s=1123/sdm0 109e/0109e.htm http://www.sdmagazine.com/documents/s=1123/sdm0 109e/0109e.htm http://www.informit.com/articles/article.asp?p=340868 http://www.informit.com/articles/article.asp?p=340868 http://www.dextra.com.br/empresa/artigos/aspectprog.htm http://www.dextra.com.br/empresa/artigos/aspectprog.htm http://aosd.net http://aosd.net http://trese.cs.utwente.nl/aosd2002/index.php?content =aod http://trese.cs.utwente.nl/aosd2002/index.php?content =aod http://www.aosd-europe.net http://www.aosd-europe.net


Carregar ppt "Desenvolvimento de Software Orientado por Aspectos Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues Autores: 4033 – Daniel Grilo 4223 – Nelson Rodgrigues."

Apresentações semelhantes


Anúncios Google