PADRÕES DE PROJETO: DESIGN PATTERNS Jaime William Dias1, Danilo Venturini1, William Macxuel Muniz1, Rodrigo Niehues Chagas1 1 Universidade Paranaense (UNIPAR) Paranavaí – PR – Brasil [email protected], [email protected], [email protected], [email protected] Resumo. Este artigo constitui uma descrição dos padrões de projeto também conhecidos como design patterns que são utilizados no desenvolvimento de softwares, tendo como objetivo principal contar um pouco da história de seu surgimento, as vantagens de seu uso, os elementos que o compõem, como são classificados e também o que esperar do uso de um padrão de projeto, para finalizar faremos um pequeno estudo de caso para melhor externar o assunto. . 1. Introdução Sistemas de software têm desempenhado um papel cada vez mais preponderante no dia-a-dia das pessoas e, consequentemente, se tornaram maiores e mais complexos. A partir do momento em que os produtos de software se tornaram complexos e que as atividades do processo de desenvolvimento deixaram de ser atribuídas a uma única pessoa, passando a ser executada por uma equipe, surgiram medidas que se tornaram essenciais nesse processo. A padronização de projetos é uma dessas medidas, o grande desafio das equipes de desenvolvimento de sistemas de software é produzir sistemas seguros, eficientes, de fácil manutenção, reutilizáveis e em prazos cada vez menores. Os padrões de projeto servem para identificar nomear e abstrair estruturas recorrentes que são utilizadas no desenvolvimento de software tornando dessa forma a reutilização de códigos muito mais organizada e produtiva. O presente trabalho traz uma breve descrição sobre estes padrões bem como um pequeno estudo de caso para exemplificar um desses modelos de projeto [SILVA, P. et al 2009]. 2. Metodologia Para este trabalho foi realizada uma extensa revisão bibliográfica em livros, artigos e sites da internet. O próximo passo foi organizar as informações e definir os tópicos, após isto foi iniciada a escrita do trabalho. 3. Padrões A ideia de padrões de projeto foi apresentada por Christopher Alexander em 1977, ideia esta que esta ligada a padrões de projeto arquitetônicos, Christopher disse: “Cada Padrão descreve um problema que ocorre repetidamente de novo e de novo em nosso ambiente, e então descreve a parte central da solução para aquele problema de uma forma que você pode usar esta solução um milhão de vezes, sem nunca implementa-la duas vezes da mesma forma” [KON, Fábio 2014]. Esse conceito ficou adormecido até os anos 80 quando começaram a ser organizados workshops sobre especificações de projeto e programação orientada a objeto [JÚNIOR, Nelson Ribeiro de Carvalho 2013], mas foi somente no ano de 1995 que o desenvolvimento de software passou a ter um catalogo de soluções padronizadas para projetos, que foi o livro Gof. O padrão transmite o conhecimento de uma pessoa com muita experiência em um determinado assunto, de uma maneira que pessoas com menor experiência e que se deparam com problemas semelhantes possam aplica-los [KON, Fábio 2014]. 3.1 Vantagens Com o inicio das catalogações de padrões de desenvolvimento que também são conhecidos com design patterns surgiram inúmeras vantagens para quem desenvolve e faz uso desses padrões, vantagens tais como: passou-se a ter um vocabulário comum para conversar sobre projetos de software, soluções que antes eram desconhecidas e antes não possuíam um nome, passaram a ter, padronização de nomenclaturas e desenvolvimentos em camadas, código mais enxuto, limpo, organizado, aumento da qualidade e diminuição da complexidade do código, entre tantos outros [KON, Fábio 2014]. 3.2 Elementos de um padrão Em geral, um padrão tem quatro elementos essenciais: 1. O nome do padrão é uma referência usada para descrever um problema de projeto, suas soluções e consequências. Dar um nome permite ao desenvolvedor programar em um nível mais alto de abstração, e ter um vocabulário comum para se discutir com a equipe de desenvolvimento. Sendo assim quando existir um problema será mais fácil identificar qual padrão usar naquela situação. [GAMMA, E. et al 2000]. 2. O problema fala em qual situação aplicar o padrão, ele descreve o problema e seu contexto. Algumas vezes o problema trará uma lista de condições que devem ser satisfeitas para que o padrão seja aplicado [GAMMA, E. et al 2000]. 3. A solução descreve os elementos que compõe o padrão de projeto, seus relacionamentos e suas responsabilidades. A solução não descreve um projeto concreto ou uma implementação ela apenas mostra um caminho que pode ser usado, e um exemplo de seu uso [GAMMA, E. et al 2000]. 4. As consequências são os fatores que devem ser levados em conta para utilização ou não do padrão para solução de determinado problema, embora em projetos de software as consequências geralmente não sejam documentadas, é importante se analisar se aquela realmente é a melhor solução, se o software perdera desempenho ou ficara inflexível, tudo isso deve ser levado em conta na hora de se aplicar um padrão [GAMMA, E. et al 2000]. Os padrões variam em suas formas de uso em sua grandeza e também em seu nível de abstração. Lembrando que a construção de um software é feita da união de vários desses padrões que juntos formam a solução para determinado problema. 4. Classificação dos padrões A dois critérios para se classificar os padrões de projeto o primeiro seria a sua finalidade que reflete o que o padrão realmente faz, afinal o padrão pode tratar da parte estrutural ou da criação ou talvez do comportamento de um software por isso são divididos dessa forma, a tabela 1 mostra uma dessas divisões [GAMMA, E. et al 2000]. Tabela 1 Espaço dos Padrões de Projeto Fonte: Padrões de Projeto ; soluções reutilizáveis de software orientado a objetos (2000, p.27). O segundo critério, chamado de escopo especifica se o padrão se aplica a classe ou a objetos. Os padrões relacionados à classe lidam com a ligação entre as classes e suas subclasses, já os padrões relacionados a objetos lidam com relacionamentos entre objetos e seus relacionamentos entre objetos que podem ser mudados dinamicamente [GAMMA, E. et al 2000]. 4.1 Como selecionar um padrão de projeto Primeiramente é necessário analisar o tamanho do seu projeto. Depois é preciso encontrar um padrão que tenha a intenção ou a solução que trabalhe na mesma linha de seu projeto, depois de selecionado é preciso observar com quais outros padrões esse padrão escolhido se relaciona, é preciso também procurar padrões semelhantes ou parecidos com o escolhido e por fim liste possíveis variações e reformulações que poderão ocorrer durante o desenvolvimento do projeto [GAMMA, E. et al 2000]. 4.2 Como usar um padrão de projeto Uma vez escolhido o padrão de projeto é preciso se utilizar de alguns passos para que o entendimento e também a aplicação do padrão sejam efetivados de forma correta. Leia o padrão por inteiro pelo menos uma vez, para que você possa ter uma visão geral, reforce a atenção em elementos do padrão como o problema e a solução, olhe nos exemplos de código que o padrão traz para que você possa ter uma ideia concreta da sua aplicabilidade, escolha nomes que de classes que sugerem quais padrões ali estão sendo utilizados e por fim defina suas classes seus relacionamentos, heranças e outros mais [GAMMA, E. et al 2000]. 4.3 O que esperar do uso de padrões de projeto Muitos dos desenvolvedores em geral só ouviram falar dos padrões de projeto mais em geral nunca os aplicaram de maneira efetiva, mesmo assim se você tem uma maneira padrão de desenvolver sistemas já esta aplicando uma padronização, o que é importante é ter ciência de que eles existem e que é preciso estudar esses padrões para poder produzir softwares de maior qualidade [GAMMA, E. et al 2000]. Hoje fala se muito em software flexível, mas para que essa ideia realmente seja efetiva e eficaz é preciso firmemente seguir uma padronização de desenvolvimento para que em um futuro do ciclo de vida de seu software ele não fique engessado devido a uma má estrutura feita no inicio do projeto, desta forma seguindo padrões de desenvolvimento teremos um código mais limpo e mais reutilizável [GAMMA, E. et al 2000]. 5. ESTUDO DE CASO A seguir mostraremos o uso de dois padrões de projeto, onde na primeira parte o código é desenvolvido sem a utilização de um padrão, e na segunda parte com a utilização de um padrão. Design Pattern Factory Exemplo de conexão sem utilizar Factory demonstrado na figura 2: Figura 1 – Código da classe exemplo sem Factory Agora exemplo de conexão utilizando o Design Pattern Factory. Primeiramente é criada a classe responsável por fazer a conexão com o banco de dados, como demonstrado na figura 3: Figura 2 - Código da classe fábrica de conexão Depois de criado a classe de conexão, é chamada a classe com o método de criar a conexão, dessa maneira deixa o código mais limpo e separa a classe responsável pela conexão, quando precisar da conexão com o banco de dados é só chamar a classe responsável e criar a conexão, sem duplicar código como mostra a figura 4: Figura 3 - Código da classe factory 6. Considerações finais Padrões de projeto foram criados para auxiliar uma parte repetida de um determinado projeto de software, permitindo desta forma seu entendimento e aplicação em um contexto particular. Sendo assim eles oferecem aos desenvolvedores uma ferramenta comum, facilitando a comunicação e o crescimento do projeto em uma linguagem comum para que todos possam desenvolver seguindo as métricas traçadas no início, além disso, constroem uma base solida para o desenvolvimento de um software que seja flexível e que possa ser usado como plataforma para outros sem que cresça tanto que fique engessado e tenha que ser desenvolvido novamente, esse que é um dos grandes desafios da engenharia de software e que com a utilização de padrões e códigos bem escritos espera se resolver boa parte desse problema e diminuir o tempo de construção de um projeto sem que haja percas neste processo [JÚNIOR, Nelson Ribeiro de Carvalho 2013]. REFERÊNCIAS GAMMA, E.; Helm, R.; Johnson, R.; Vlissides, J (2000). “Padrões de Projeto: soluções reutilizáveis de software orientado a objetos”, Porto Alegre: Bookman, 2000. JÚNIOR, Nelson Ribeiro de Carvalho (2013). Padrões de projeto e frameworks no desenvolvimento de software. Disponível em : <http://revistapensar.com.br/tecnologia/pasta_upload/artigos/a28.pdf/ >. Acesso em 18 de abril, 2014. KON, Fabio (2014). Padrões de projeto de software orientado a objetos. Disponível em : <www.ime.usp.br/~kon/MAC5714/aulas/slides/GoF.ppt/>. Acesso em 19 de maio, 2014. SILVA, P. et.al (2009). Estudo do Padrão de Projeto Observer no Desenvolvimento de Softwares Utilizando a Arquitetura MVC, Disponível em: < www.biblioteca.ifc-camboriu.edu.br/criacac/tiki-download_file.php?/> Acesso em: 25 de agosto, 2014.