



































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Comparação do Paradigma Orientado a Objetos com o Paradigma Orientado a Aspectos
Tipologia: Teses (TCC)
1 / 75
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Jhonatan do Nascimento Yamane Rodrigo Ribeiro de Souza
Bauru 2011
Jhonatan do Nascimento Yamane Rodrigo Ribeiro de Souza
Trabalho de Conclusão de Curso apresentado como requisito para obtenção do título de bacharel em Ciência da Computação da Universidade Paulista.
Professora Orientadora: Ms. Angela Teresa Rochetti
Bauru 2011
Jhonatan do Nascimento Yamane Rodrigo Ribeiro de Souza
Trabalho de Conclusão de Curso apresentado como requisito para obtenção do título de bacharel em Ciência da Computação da Universidade Paulista.
Aprovado em:
BANCA EXAMINADORA _____________________ //___ Prof. Ms. Alex Mauricio Mazo Universidade Paulista – UNIP _____________________ //___ Prof. Ms. Angela Teresa Rochetti Universidade Paulista – UNIP _____________________ //___ Prof. Ms. Célio Ricardo Castelano Universidade Paulista UNIP _____________________ //___ Prof. André Luís de Oliveira IFSP – Campus Avaré
Aos meus pais, pelo apoio, incentivo e dedicação para que sempre pudesse alcançar meus objetivos. À minha namorada, Flávia Carina Peretti, pela paciência, compreensão, amor e carinho nos momentos em que mais precisei. Rodrigo Ribeiro de Souza
Aos meus pais, que me propiciaram uma vida digna onde eu pudesse crescer, acreditando que tudo é possível, desde que sejamos honestos, íntegros de caráter e tendo a convicção de que desistir nunca seja uma ação contínua em nossas vidas; que sonhar e concretizar os sonhos só dependem da nossa vontade. Aos meus irmãos, Douglas e Willy, que sempre estiveram torcendo por mim. E uma dedicação especial à minha tia Elena Yamane e minha bathan (avó) Chieko Yamane, por me ajudar e acreditar no meu potencial ao longo desses quatros anos. Jhonatan do Nascimento Yamane
"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado". (Roberto Shinyashiki)
O desenvolvimento de software baseado na Programação Orientada a Objetos (POO) trouxe muitos benefícios aos desenvolvedores de software. No entanto, com o aumento da complexidade dos sistemas, nem todas as propostas que este paradigma se propunha a cumprir foram atendidas. O objetivo principal da evolução dos paradigmas de programação é facilitar o desenvolvimento de softwares , tratando ainda de problemas antigos deixados pelos paradigmas anteriores. Nesse contexto, surge então a Programação Orientada a Aspectos (POA), o qual aparece para trabalhar em conjunto com a POO para tornar o processo de desenvolvimento de software mais simples e eficiente. Este trabalho apresenta um estudo comparativo entre o Paradigma Orientado a Objetos com o Paradigma Orientado a Aspectos. Busca-se através do desenvolvimento de um sistema nos dois paradigmas, demonstrar os prós e os contras provenientes do uso da POA no desenvolvimento de software com uma melhor organização no código e na regra de negócio.
Palavras Chaves : Programação Orientada a Aspectos; Programação Orientada a Objetos; Paradigmas de Programação; Separação de Interesses; Regras de Negócio.
Estes procedimentos eram armazenados em arquivos separados e podiam ser reutilizados através de uma ou múltiplas chamadas no programa principal. Surgia assim o conceito de bibliotecas. A comercialização dessas bibliotecas foi um passo subsequente. Porém, a complexidade dos sistemas continua crescendo e tornou esse tipo de reutilização ultrapassado (DEITEL et al., 2003). A Programação Orientada a Objetos (POO) surgiu devido à insatisfação dos programadores com as técnicas até então desenvolvidas. Com isso, os sistemas tornaram-se mais bem organizados, pois nestes o mundo passou a ser modelado através de classes e objetos. Buscando simular uma perspectiva de mundo real, a POO buscou agrupar um conjunto de objetos em classes e um conjunto de atributos em objetos. Sendo assim, a orientação a objetos melhorou a compreensão das soluções apresentadas (CHAGAS e OLIVEIRA, 2009). Dentre os diversos benefícios da utilização da POO, se comparados com a programação estruturada, pode-se citar: reuso; modularização; simplificação; redução dos custos de manutenção (GOETTEN et al., 2006). Apesar desses avanços, o aumento da complexidade inseriu novos problemas que a POO é incapaz de resolver. “Desenvolver um sistema é tão complexo que se tornou impossível exigir a um funcionário que domine todas as fases de desenvolvimento” (RESENDE e SILVA, 2005). Esta evolução da indústria de software tem forçado a divisão das áreas de interesses de desenvolvimento de software em partes independentes. Deseja-se ter grupos distintos e especializados em preocupações como: persistência, distribuição, segurança, interface, dentre outras, visando desenvolver soluções personalizadas a cada problema. No final, integram-se as partes, os componentes, para compor o sistema principal (RESENDE e SILVA, 2005). Com o aumento da complexidade, advinda da evolução dos paradigmas de programação, a POO é responsável por gerar outros dois problemas: o Entrelaçamento de Código e o Espalhamento de Código. O primeiro trata da inserção de chamadas de métodos que possivelmente se encontram em uma classe diferente da qual foram invocados. O segundo diz respeito à repetição de código nas diversas classes do sistema, gerando sérios problemas de manutenibilidade (CHAGAS e OLIVEIRA, 2009). Esses dois problemas serão melhor detalhados no capítulo 2.
Buscando solucionar os problemas deixados pela POO, surgiu a Programação Orientada a Aspectos (POA). Esse paradigma tem como objetivo separar os níveis de preocupação durante a fase de desenvolvimento de software. Assim, problemas relacionados à 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. À 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. Por isso, a POA ganhou força na comunidade científica e tecnológica como a provável solução para a lacuna deixada pela POO, com certa eficácia na mudança de pensamento e do conhecimento na área de desenvolvimento de sistemas. Muitas empresas têm incorporado rapidamente a POA por não exigir nenhuma adaptação de seus equipamentos e ser de fácil compreensão aos desenvolvedores e testadores de software (BORGES et al., 2008). IBM e Microsoft são exemplos de empresas que utilizam e investem no desenvolvimento da POA. A POA introduziu um novo conceito, denominado aspecto, que corresponde a uma estrutura apropriada para a modularização e separação de requisitos transversais. A principal linguagem de programação para POA e a mais utilizada é o AspectJ, que é atualmente mantido pela Eclipse Foundation (ANDRADE, 2004). Nesse contexto, entende-se então, que a POA não surgiu no mercado para excluir a POO, e sim para complementá-la. Visto que, uma parte do código fica na definição dos aspectos, e por estarem em uma única unidade, alterações são muito mais simples, não sendo preciso reescrever inúmeras classes. Neste projeto, o principal objetivo é o estudo e comparação do Paradigma Orientado a Objetos com o Paradigma Orientado a Aspectos, apresentando possíveis soluções aos problemas referentes ao entrelaçamento e espalhamento de código gerado pelo uso do Paradigma Orientado a Objetos. O próximo capítulo aborda a teoria sobre o assunto proposto neste trabalho. O capítulo 3 descreve os métodos e ferramentas necessárias para o desenvolvimento. O capítulo 4 apresenta o desenvolvimento e comparação entre POO e POA. O capítulo 5 apresenta os resultados obtidos com o desenvolvimento deste trabalho.
1.3 Problema e Hipótese
Como realizar o entrelaçamento de código necessário para integrar os componentes ao software final, de forma simples, limpa e eficiente?
Utilizando a Programação Orientada a Aspectos.
Como possibilitar a inserção de uma nova funcionalidade no software , sem alterar o código fonte do módulo?
Utilizando aspectos é possível alterar o fluxo de execução do sistema, para inserir uma nova funcionalidade sem alterar o código fonte do módulo ou componente alterado.
Como obter uma melhor produtividade e manutenibilidade do software , em relação ao espalhamento de código necessário para atender um determinado requisito de software?
Através do paradigma orientado a aspectos.
Esse capítulo aborda os conceitos teóricos necessários ao entendimento do tema deste trabalho.
2.1 Software e Evolução do Software
Quando se fala sobre o termo software , consequentemente, pode ocorrer a associação de software com programas de computador. No entanto, segundo a concepção de Sommerville (2003, p.5), “ software não é apenas o programa, mas também toda a documentação associada e os dados de configuração necessários para fazer com que esses programas operem corretamente”. De forma geral, normalmente todo software contém uma documentação do sistema o qual descreve como o mesmo está estruturado (desenvolvido) e também uma documentação do usuário o qual este tem o papel de orientar e/ou exemplificar como o software deve ser utilizado. Softwares estão constantemente em evolução, independentemente da complexidade e tamanho da aplicação (PRESSMAN, 2006). Uma característica marcante dos softwares é a flexibilidade a mudanças (manutenção do software ), onde estas podem ser realizadas em qualquer instante, isto é, durante ou após o desenvolvimento do software. Normalmente o software poderá passar por mudanças depois que for entregue ao cliente, visto que este pode detectar erros, necessitar de adaptações devido à migração para outro sistema operacional, ou até mesmo para atender uma determinada necessidade de negócio, solicitar o acréscimo de uma funcionalidade específica. Segundo Pressman (2006, p.9), a manutenção do software “ocorre quando erros são corrigidos, quando o software é adaptado a um novo ambiente, quando o cliente solicita novas características ou funções e quando a aplicação é “reengenheirada” para fornecer benefícios em um contexto moderno”. É importante ressaltar que, frequentemente, os custos referentes à manutenção do software são bem maiores quando comparados aos custos de