Tech - Análise Sistemas
Padrões de Projeto de Software Baseado em Componentes Aplicados a um Sistema Java para Academia de Musculação
Entre diversas metodologias e práticas de desenvolvimento de software existentes no mercado atual, muitas soluções e padrões de projeto não proporcionam o desenvolvimento rápido e ...
por Jean Wagner KleemannEntre diversas metodologias e práticas de desenvolvimento de software existentes no mercado atual, muitas soluções e padrões de projeto não proporcionam o desenvolvimento rápido e para sistemas complexos. Entretanto a componentização de software juntamente com bons padrões de projeto proporcionam uma solução capaz de gerenciar problemas complexos ligados ao reaproveitamento, não somente de código, mas, independentemente de tecnologias ou plataformas, reduzindo tempo e recursos financeiros. Este trabalho sugere o uso de padrões de projetos relacionados com a engenharia de componente para a criação de um sistema de academia de musculação, destacando as vantagens de tais metodologias e seu relacionamento com a capacidade do sistema crescer e evoluir com facilidade, através do uso destes processos.
1. Introdução
No ambiente de desenvolvimento de software, uma questão muito discutida é a produtividade. Os sistemas estão a cada dia mais complexos e muitos padrões de desenvolvimento ou gerenciamento de processos não atendem às expectativas da forma desejada. Com o desenvolvimento baseado em componentes, surge o conceito de "crie uma vez, use onde quiser". Desse modo é possível montar sistemas utilizando componentes já implementados, não sendo necessário escrever uma nova aplicação codificando linha após linha.
Para a implementação de componentes de software é necessário o forte uso de padrões em todo processo de desenvolvimento. Consequentemente há uma série de vantagens ao utilizar tais padrões, mencionado por Alur (2002) como sendo reutilizáveis, pois fornecem uma solução pronta que pode ser adaptada para diferentes problemas quando necessário. Os padrões refletem a experiência e conhecimento dos desenvolvedores que utilizaram estes padrões com sucesso em seu trabalho, formado um vocabulário comum para expressar grandes soluções sucintamente. Além de reduzir o tempo de aprendizado de uma determinada biblioteca de classes, também diminuem o retrabalho, pois quanto mais cedo são usados, menor será o retrabalho em etapas mais avançadas do projeto.
Este trabalho apresenta uma abordagem sobre alguns padrões de projetos associados ao conceito de software componentizado, que são capazes de proporcionar o desenvolvimento de software de forma rápida, resultando em aplicações capazes de crescerem e evoluírem com facilidade. Para aplicação destes padrões será utilizado o ambiente de uma academia de musculação onde o resultado final será um sistema que deverá ser utilizados tanto no ambiente WEB como desktop e com diversos tipos de persistência de dados.
2. Engenharia de Componentes e Padrões de Projeto
Segundo Friedrich Ludwig Bauer (1969, p. 231), "Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais".
Outra definição para o conceito de engenharia de software é apresentada por Sommerville (2007) como uma disciplina de engenharia relacionada com todos os aspectos de produção de software, desde os estágios iniciais de especificação do sistema até a sua manutenção, ou seja, mesmo depois que este entrar em operação. Isso revela a importância da engenharia de software dentro de todo o projeto e sua forte ligação com o resultado final do produto.
Já a engenharia de software baseada em componentes (component-based software engineering, CBSE) é um processo que enfatiza o projeto e a construção de sistemas baseados em computador usando "componentes" de software reutilizáveis (PRESMMAN, 2002). A Engenharia de componentes é uma derivação da engenharia de software, focada na decomposição dos sistemas, em componentes funcionais e lógicos com interfaces bem definidas, usadas para comunicação entre os próprios componentes, que estão em um nível mais elevado de abstração do que os objetos, com isso a comunicação se dá por meio de mensagens.
A prática da tecnologia de software baseado em componentes, baseia-se no desenvolvimento através de componentes reutilizáveis, levando a redução de tempo de desenvolvimento, e facilitando as mudanças e a implantação de novas funcionalidades. Dessa forma, o processo de engenharia de software baseada em componentes tem mudado o modo pelo qual sistemas são desenvolvidos, pois desloca a ênfase da programação do software para a composição de sistema de software com base em componentes (PRESMMAN, 2002).
A engenharia baseada em componentes possui as etapas de coleta de requisitos e passa por um projeto arquitetural, da mesma forma que a engenharia se software tradicional. Porém a partir desse ponto começa se diferenciar, pois começa a ser analisado os requisitos com objetivo de buscar módulos que sejam mais adequados à composição, ao invés de iniciar a construção e partir para tarefas de projeto mais detalhadas.
Ao fazer essa análise dos subconjuntos ou módulos do sistema, pode se fazer o uso de componentes já existentes, sendo componentes próprios ou comerciais. Segundo Desmond D'Sousa (1998) um componente é um pacote coerente de artefatos de software que pode ser desenvolvido independentemente e entregue como unidade e que pode se composto, sem mudança, com outros componentes para construir algo maior.
O Reuso é o objetivo principal da engenharia de software baseada em componentes. Não se trata somente de reutilização de código, pois abrange também os artefatos envolvidos durante o todas as etapas de desenvolvimento.Com isso os riscos são menores ao usar um componente já existente em relação ao desenvolvimento de algo a partir do zero. Também ocorre o aumento da produtividade, tendo em vista a redução de esforços pela equipe de desenvolvimento. Seguindo a idéia “Crie uma vez, use onde quiser”. Por sua vez, a qualidade e confiabilidade do produto são maiores, pois o componente reutilizado já foi testado e aprovado.
Os Padrões de projeto são um grupo de práticas para definir o problema, a solução e em qual situação aplicar esta solução e suas consequências no desenvolvimento de software. Os padrões são desenvolvidos a partir de experiências práticas em projetos reais. É resultado da experiência de arquitetos com experiência, que aplicam usam estes padrões e experimentam o resultado em seus próprios problemas. A experiência desses arquitetos certamente proporciona a abordagem correta para um problema específico, da forma mais indicada.
Fazendo uso de tais padrões, temos como resultado uma qualidade de código, permitindo a reutilização de forma flexível e expansível. Por se tratar de questões que nasceram de um problema real, e a solução foi testada e documentada, os padrões aumentam de forma significativa a produtividade e qualidade, pois a solução já está definida.
3. Design do sistema
A proposta de sistema que será apresentado consiste em gerenciar um ambiente de academia de musculação, sendo de responsabilidade do sistema distribuir rotinas de exercícios conforme o tipo físico de cada aluno, que será determinado após um exame físico. Dessa forma não será necessário gerenciar treinos individuais para cada aluno da academia, pois todo aluno sempre será categorizado em um dos três tipos físicos existentes, sendo eles: ectomorfo (abaixo do peso), mesomorfo (peso ideal) e endomorfo (acima do peso).
Este sistema deverá ser independente de sistema operacional e poderá operar tanto em um ambiente desktop quanto web. Para isso é sugerido a utilização da tecnologia Java que além de suprir estes requisitos com facilidade, é uma tecnologia muito relevante no mercado atual. O sistema também deve permitir formas diferentes de persistência dos dados definidos em tempo de execução, podendo variar entre JPA, JDBC, EJB ou até mesmo persistência em memória. Através desses requisitos será abordada uma estrutura capaz de solucionar tais solicitações, fazendo o uso de alguns padrões de arquitetura, comportamentais, estruturais e criacionais.
A seguir será representado um diagrama de classe com a proposta de modelagem para este ambiente. Através do diagrama representado a seguir pela figura 1, consta uma entidade chamada pessoa, que foi criada após verificar semelhanças entre atributos de aluno e instrutor. Dessa forma a classe pode ser estendida pelo conceito de herança por demais entidades que caracterizam uma pessoa, que por ventura venham ser criadas, como por exemplo: funcionário ou usuário. Assim será aplicado o reaproveitamento da estrutura já existente.
O exame físico necessita de um aluno e um instrutor, e nele constam as medidas do aluno no momento do exame. Ao inserir um exame no sistema, automaticamente será analisado qual o tipo físico da pessoa, através de um cálculo simples de IMC (Índice de Massa Corporal). Com base neste cálculo o aluno receberá um programa específico para seu perfil em tempo de execução, através do conceito de interface.
<http://tolstenko.net/dados/Unicamp/2009.2/mc436/2009.2/Material de Apoio/Slides/11_dbcUMLComp.pdf>. Acesso em 07 set. 2010.
SOMMERVILLE, Ian. “Engenharia de Software.8.ed”. São Paulo. Pearson Addison- Wesley, 2007.
SUN, Sun Microsystems. “Designing enterprise applications with the j2ee platform enterprise edition”. Disponível em: <http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/index.html>. Acesso em: 28 out. 2010.
- A análise de sistemas na construção de softwaresAnálise Sistemas
- ERP: problema ou soluçãoAnálise Sistemas
- Análise e Especificações de RequisitosAnálise Sistemas
- ModalDialog com aplicações ASP.NETC#
- Integração com redes sociais, como fazer - TinyURL, Twitter e FacebookC#