Slides Monografia

The constant evolution of programming paradigms aims to facilitate the art of writing and correct old problems of previous paradigms. In this context arises the Aspect-Oriented Programming (AOP). This paper presents a case study on Aspect-Oriented Programming and a comparison with the Object-Oriented Programming (OOP). Through the application Banco de Questões are carried out experimental analysis with quantitative and qualitative results, which are of fundamental importance to analyze the pros and cons of AOP in different contexts.
View more...
   EMBED

Share

Preview only show first 6 pages with water mark for full document please download

Transcript

UNIVERSIDADE FEDERAL DE SERGIPE DEPARTAMENTO DE COMPUTAÇÃO TRABALHO DE CONCLUSÃO DE CURSO PROGRAMAÇÃO ORIENTADA A OBJETOS VERSUS PROGRAMAÇÃO ORIENTADA A ASPECTOS Um Estudo de Caso Comparativo Através do Desenvolvimento de um Banco de Questões José Daniel Ettinger Chagas Marcus Vinicius de Gois Oliveira 1 Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Introdução “...ainda estamos na Idade da Pedra em termos de tecnologia de desenvolvimento de software. Isso não apenas no que se refere às linguagens de programação, mas se estende também a todas as fases do ciclo de desenvolvimento. Entretanto, não se podem desmerecer os avanços conquistados .” [GOETTEN; WINCK, 2006] Introdução Antigamente Implementação de um algoritmo que disponibilizasse uma funcionalidade específica determinada pelo usuário. Sistemas eram desenvolvidos utilizando a programação “desestruturada”. Desvios incondicionais: GOTO > consequências podem ser catastróficas. Ao longo dos últimos anos... Surgimento de métodos, técnicas e ferramentas para auxiliar os desenvolvedores a produzir com mais qualidade. Introdução Surgimento da Programação Estruturada Funcionalidade agrupadas em procedimentos ou funções. Surgimento do conceito de bibliotecas. A complexidade dos sistemas crescia e tornavam essas “novidades” ultrapassadas. Insatisfação dos programadores com as técnicas até então desenvolvidas. Surgimento da Programação Orientada a Objetos Sistemas passam a ser mais bem organizados. O mundo passou a ser modelado através de classes e objetos. Introdução Simulando uma perspectiva de mundo real, a POO buscou agrupar um conjunto de objetos em classes e um conjunto de atributos em objetos. Melhor compreensão das soluções apresentadas. Popularização dos sistemas de informação e comunicação Apesar dos avanços com a POO, surgem novos problemas! Necessidade de se pensar em diversas preocupações: Interface amigável Reusabilidade Usabilidade Segurança Manutenabilidade Paralelismo Introdução Surgimento da Programação Orientada a Aspectos Criada em 1997, em Palo Alto, nos laboratórios da Xerox. Objetivo: separar os níveis de preocupação durante a fase de desenvolvimento de software. Assim, aspectos como segurança, persistência de dados, auditoria, registros de logs e tratamento de exceções poderiam ser pensados separadamente sem se preocupar com as demais partes. A medida que fossem integradas as interações seria adicionado um novo nível de preocupação sem ser necessário alterar o que já está feito! Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Programação Orientada a Objetos Onde a Orientação a Objetos falha Entrelaçamento do Código (Tangled Code) Espalhamento do Código (Spread Code) Programação Orientada a Objetos Onde a Orientação a Objetos falha Entrelaçamento do Código (Tangled Code) “Quando o trabalho de preenchimento dos métodos se inicia, faz-se necessário inserir chamadas de responsabilidade de uma classe em outra... Estas linhas de código inseridas em outro componente para integração são denominadas código intrusivo ou invasivo” . [RESENDE; SILVA, 2005] Programação Orientada a Objetos Onde a Orientação a Objetos falha Entrelaçamento do Código (Tangled Code) public class Banco { private static Connection db = null; private static Statement sq_stmt; public static void conectar() { //Implementação do método conectar() } public static void fechar() { //Implementação do método fechar() } } public class Questao { ... public static boolean addQuestao(Questao q, boolean variante) { Banco.conectar(); //Código que implementa a adição de uma dada questão no banco de dados. Banco.fechar(); } } Chamadas intrusivas! Programação Orientada a Objetos Onde a Orientação a Objetos falha Entrelaçamento do Código (Tangled Code) Lógica “embaralhada” Assuntos que deveriam ser tratados somente em suas classes de origem estão sendo tratados em outras classes. Dificuldade em saber exatamente o que ocorre com uma classe ao ler o seu código. Comportamento emergente Alguns pesquisadores da área de IA levantaram a hipótese de que a inserção de chamadas a métodos em componentes que foram concebidos sem pensar em tal interação poderiam apresentar um novo comportamento. Programação Orientada a Objetos Onde a Orientação a Objetos falha Espalhamento do Código (Scattering Code) Repetição de partes do código em diferentes classes. Problemas: Redução da capacidade de reutilização. Aumento da dificuldade de compreensão. Exemplo: Chamadas intrusivas feitas por outras classes Alterar o nome do método conectar(), da classe Banco, para abrirConexao(). Necessária a alteração de todas as chamadas a esse método em todo o sistema! Problemas: manutenabilidade e produtividade. Programação Orientada a Objetos Onde a Orientação a Objetos falha Espalhamento do Código (Scattering Code) Exemplo: Registro de logs no Tomcat Classe Registro de Log Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Programação Orientada a Aspectos Estende outras técnicas, como a POO. Propõe uma decomposição sistêmica problema. do Separação dos requisitos funcionais e nãofuncionais. Facilita a modularização dos interesses transversais, complementando a POO. Interesses São as características mais importantes do sistema. Podem ser divididos em uma série de aspectos: Auditoria Persistência Segurança Tratamento de exceções Programação Orientada a Aspectos Busca-se separar o código referente ao negócio do sistema dos interesses transversais. Segurança Auditoria Persistência Tratamento de exceções ... Programação Orientada a Aspectos Exemplo Questao -codigo: int -texto: String +addQuestao() : void +editQuestao() : void +remQuestao(): void +getQuestao() : Questao +setQuestao() : Questao +logOperacao() : void +controleExcecao() : void Programação Orientada a Aspectos Composição de um sistema OA Programação Orientada a Aspectos Combinação Aspectual Programação Orientada a Aspectos Definições Pontos de Junção (join points) Pontos de atuação (pointcuts) Adendo (advice) Aspectos Programação Orientada a Aspectos Definições Pontos de Junção (join points) São locais bem definidos da execução de um programa. Exemplos: Chamada a um método Ocorrência de uma exceção Chamada para construtor Acesso a atributos Programação Orientada a Aspectos Definições Pontos de atuação (pointcuts) São elementos do programa usados para definir um ponto de junção. Funciona como uma espécie de regra criada pelo programador para especificar eventos que serão atribuídos aos pontos de junção. Programação Orientada a Aspectos Definições Adendo (advice) São partes da implementação de um aspecto executados em pontos bem definidos do programa principal (pontos de junção). Programação Orientada a Aspectos Definições Aspectos Um aspecto é o mecanismo disponibilizado pela POA para agrupar fragmentos de código referente aos componentes não-funcionais em uma unidade no sistema. Programação Orientada a Aspectos Linguagens de Componentes Ponto de corte Ponto de junção Linguagens de Aspectos Adendo ASPECTO Programação Orientada a Aspectos AspectJ (2001) Desenvolvida no centro de pesquisas Xerox PARC. Primeira implementação e mais popular de todas. Linguagem de aspectos que estende a linguagem de componentes Java. Compatibilidade Total Plataforma Ferramentas Programador Programação Orientada a Aspectos AspectJ Uso de curingas A API Reflectiva do AspectJ method-execution ResultSet dados.Banco.execQuery(String) Banco.java:33 execution(ResultSet dados.Banco.execQuery(String)) class dados.Banco execQuery Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Aplicativo desktop desenvolvido em Java, de uso acadêmico, utilizado no gerenciamento de questões e provas. Objetivo Facilitar o gerenciamento, reaproveitamento e aprimoramento da coleção de questões de provas que são elaboradas por professores ao longo de sua vida profissional. Permite a geração de avaliações por meio da seleção de questões registradas em um banco de dados. Armazena um histórico das questões e provas aplicadas. Evitar que questões idênticas sejam aplicadas em períodos subsequentes. Ferramentas utilizadas: Eclipse Plugin AJDT Plugin Visual Editor Jasper Reports iReport StarUML PostgreSQL DBDesigner Fork 34 Banco de Questões Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Comparativo entre POO e POA Vantagens da POA sobre a POO Desvantagens da POA sobre a POO Comparativo entre POO e POA Vantagens da POA sobre a POO Melhor modularização Menos responsabilidades em cada parte Evolução facilitada Mais possibilidades de reutilização Redução do número de linhas de código Novas funcionalidades sem alterar código existente Comparativo entre POO e POA Vantagens da POA sobre a POO Melhor modularização Diversos módulos separados fisicamente. Características específicas: Segurança Tratamentos de exceções Auditoria Controle de conexão Apresentação Código mais conciso e fácil de manter. Aumento da produtividade Redução de custos Comparativo entre POO e POA Vantagens da POA sobre a POO Menos responsabilidades em cada parte Aspectos para tratar diversas questões: Abertura e fechamento do banco Log do sistema Tratamento de exceções Elimina-se o código replicado. Código mais “enxuto” Melhorias de manutenabilidade Comparativo entre POO e POA Vantagens da POA sobre a POO Menos responsabilidades em cada parte Comparativo entre POO e POA Vantagens da POA sobre a POO Evolução facilitada Exemplo: aspecto genérico de log do sistema. Criação de novas classes. Não necessitará alterar o aspecto definido anteriormente para efetuar o log. Deve ser respeitado o padrão de nomenclatura definido nos pontos de corte! Comparativo entre POO e POA Vantagens da POA sobre a POO Evolução facilitada Comparativo entre POO e POA Vantagens da POA sobre a POO Mais possibilidades de reutilização Exemplo: aspecto genérico log geral do sistema. Pode ser reutilizado em qualquer outro sistema. Não necessita modificar o código do aspecto. Acelera o desenvolvimento de automatização de processos. Melhorias de produtividade e redução de custos. Comparativo entre POO e POA Vantagens da POA sobre a POO Redução do número de linhas de código Versão Orientada a Objetos Orientada a Aspectos (sem nova funcionalidade) Orientada a Aspectos (com nova funcionalidade) Linhas de código 8417 8078 8179 Comparativo entre POO e POA Vantagens da POA sobre a POO Novas funcionalidades sem alterar código existente Evita-se efeitos colaterais causados por alterações indevidas (comuns em POO). Limita-se o escopo do problema. Qualquer novo problema será tratado no aspecto que o causou! Obtém-se ganhos com produtividade. Comparativo entre POO e POA Vantagens da POA sobre a POO Novas funcionalidades sem alterar código existente Comparativo entre POO e POA Desvantagens da POA sobre a POO Pouco material de pesquisa disponível Compilação mais lenta Limitações técnicas Comparativo entre POO e POA Desvantagens da POA sobre a POO Pouco material de pesquisa disponível Orientação a Aspectos é paradigma mais recente que Orientação a Objetos. OO já está consolidado e amplamente difundido. Comparativo entre POO e POA Desvantagens da POA sobre a POO Compilação mais lenta Antes da compilação ocorre um processo realizado pelo Combinador Aspectual. Comparativo entre POO e POA Desvantagens da POA sobre a POO Limitações técnicas Objetivo: criar um aspecto genérico. Registro de rastreamento de ações do usuário durante a execução de operações do programa (Tracking). Problema: captura de atributos de objetos, de diferentes tipos, em diferentes métodos que possuem o mesmo padrão de nomenclatura. Comparativo entre POO e POA Desvantagens da POA sobre a POO Limitações técnicas A seta vermelha indica o momento da captura da instância do objeto em questão (Disciplina, Tema, Questao, Prova ou Usuario). Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Conclusões Número menor de linhas de código na aplicação OA, não significa uma aplicação mais rápida que na aplicação OO. Apesar das linhas não estarem sendo replicadas no código em POA, as mesmas estão presentes através do combinador aspectual no momento da execução do aplicativo. Grande melhora na legibilidade e manutenabilidade do código escrito em POA em relação ao código escrito em POO. A POA cumpre bem o papel a que se propõe: corrigir as falhas da POO! Conclusões Os benefícios da POA contribuem diretamente com ganhos com produtividade e consequente redução de custos em um ambiente organizacional. Desenvolver em POA requer alguma experiência anterior com aspectos. POA tem ainda muito a evoluir, porém seus diversos benefícios já podem ser sentidos. Maior produtividade e reusabilidade como também melhor legibilidade, manutenabilidade e modularização são características que tornam a POA um paradigma com um futuro bastante promissor! Roteiro Introdução Programação Orientada a Objetos Programação Orientada a Aspectos Banco de Questões Comparativo entre POO e POA Conclusões Referências Referências SOMMERVILLE, Ian. Engenharia de Software. 8ª ed. São Paulo: Pearson Addisson-Wesley, 2007. p. 509-524. GOETTEN Junior, WINCK Diogo. AspectJ – Programação Orientada a Aspectos com Java. São Paulo – SP: Novatec Editora, 2006. RESENDE, Antônio M. Pereira; SILVA, Claudiney Calixto. Programação Orientada a Aspectos em Java: Desenvolvimento de Software Orientado a Aspectos. Rio de Janeiro – Brasport, 2005. 179 p. LADDAD, Ramnivas. AspectJ in Action – Practical AspectOriented Programming. 2ª ed. Manning, 2003. 512p. BORGES, Felipe da Silva; FREITAS, André Luis Castro. Estudo de Caso Sobre Programação Orientada a Aspectos Utilizando Protocolo RMI. UFRG, 2008. 10 p. Disponível em: . Acesso em: 19 Mar. 2009. Referências NELSON, Torsten. Programação Orientada a Aspectos com AspectJ. Disponível em: . Acesso em: 21 Mar. 2009. MASIERO, Paulo C.; LEMOS, Otávio A. L.; FERRARI, Fabiano C.; MALDONADO, José Carlos. Teste de Software Oriente a Objetos e a Aspectos: Teoria e Prática. 2006. Disponível em: . Acesso em: 21 Mar. 2009. STEIMANN, Friedrich. The Paradoxical Success of Aspect-Oriented Programming. New York: 2006. Disponível em: . Acesso em: 19 Mai. 2009. SOARES, Sérgio; BORBA, Paulo. Desenvolvimento de Software Orientados a Aspectos Utilizando RUP e AspectJ. Recife: 2004. Disponível em: . Acesso em: 20 Mai. 2009. MOTA, Fabrício. Programação Orientada a Objetos & Delphi: Parte I – Uma Introdução sobre OO. Salvador, 2003. Disponível em . Acesso em: 03 Jun. 2009. Referências Object-Oriented Programming Concepts. Disponível em . Acesso em: 03 Jun. 2009. COLYER, A.; CLEMENT, A. Aspect-oriented programming with AspectJ. IBM Syst. J. 44, 2 (Jan. 2005), 301-308. RICARTE, Ivan Luiz Marques. Programação Orientada a Objetos: Uma Abordagem com Java. UNICAMP, 2001. 118 p. Disponível em . Acesso em: 04 Jun. 2009. SERSON, Roberto Rubinstein. Programação Orientada a Objetos com Java 6 – Curso Universitário. 1ª ed. Brasport, 2008. 492 p. HUGO, Marcel; GROTT, Marcio Carlos. Estudo de Caso Aplicando Programação Orientada a Aspecto. Blumenau: 2005. Disponível em: . Acesso em: 20 Mai. 2009. Referências BOENTE, Alfredo Nazareno P.; OLIVEIRA, Fabiano S. G. de; ALVES, João Carlos Nogueira. RUP como Metodologia de Desenvolvimento de Software para Obtenção da Qualidade de Software. Disponível em: . Acesso em: 25 Jun. 2009. KRUCHTEN, P. Introdução ao RUP Rational Unified Process. Rio de Janeiro: Ciência Moderna, 2003. GARCIA, Vinicius; LUCRÉDIO, Daniel; PINTO, Luíza; ALVARO, Alexandre; ALMEIDA, Eduardo; PRADO, Antonio. Uma ferramenta CASE para o Desenvolvimento de Software Orientado a Aspectos. Disponível em: . Acesso em: 10 Ago. 2009. CAZZOLA, Walter; PINI, Sonia; ANCONA, Massimo. Design-Based Pointcuts Robustness Against Software Evolution. RAM-SE, 2006. p. 35-45. ELRAD, T.; FILMAN, R.E.; BADER, A. Aspect–oriented Programming. Communications of the ACM. Vol. 44, n. 10, 2001. Referências LADDAD, Ramnivas. I want my AOP! JavaWorld magazine, Janeiro de 2002. Disponível em: . Acesso em: 10 Ago. 2009. MURPHY, Gail C.; WALKER, Robert J.; BANIASSAD, Elisa L. A.; ROBILLARD, Martin P.; LAI, Albert; KERSTEN, Mik A. Does aspect-oriented programming work? Communications of the ACM, 44(10):75-77, Outubro de 2001. WEI, Tao. The problems of AOP. Disponível em: . Acesso em: 10 Ago. 2009. GRADECKI, Joseph D.; LESIECK, Nicholas. Mastering AspectJ: Aspect-Oriented Programming in Java. Wiley Publishing, Inc., 2003. TIRELO, Fabio; BIGONHA, Roberto; BIGONHA, Mariza; VALENTE, Marco. Desenvolvimento de Software Orientado por Aspectos. UFMG, PUC-MG. 2004. Disponível em: . Acesso em: 14 Ago. 2009. Referências TIRELO, Fabio; BIGONHA, Roberto; BIGONHA, Mariza; VALENTE, Marco. Desenvolvimento de Software Orientado por Aspectos. UFMG, PUC-MG. 2004. Disponível em: . Acesso em: 14 Ago. 2009. PACHECO, Diego. AOP – AspectJ 1.5.4: Programação Orientada a Aspectos. 2007. 69p. Disponível em . Acesso em 25 Out. 2009. RAMOS, Ricardo; CARVALHO, André; MONTEIRO, Cleviton; SILVA, Carla; CASTRO, Jaelson; ALENCAR, Fernanda; AFONSO, Ricardo. Avaliação da Qualidade de Documentos de Requisitos Orientado a Aspectos. UFPE, 2005. Disponível em . Acesso em 29 Out. 2009. AspectJ Documentation. Disponível em . Acesso em 29 Out. 2009. Referências MIANI, Rozinaldo. A formação crítica pela pesquisa acadêmica e seu desenvolvimento orgânico. UEL/PR. 2007. Disponível em . Acesso em 12 Nov. 2009.