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.