sexta-feira, 21 de janeiro de 2011

Padrões de Projeto: o que são e por que usá-los

Se você estuda, simpatiza ou trabalha em alguma área relacionada ao desenvolvimento de software, talvez já tenha ouvido falar em Padrões de Projeto, ou pelo menos já tenha esbarrado por aí com o termo Design Pattern. Nesse post explicarei o que são, para que servem e citar algumas vantagens do uso de tais padrões no desenvolvimento de softwares orientados a objetos.

O que é um Padrão de Projeto?
A definição clássica dos padrões estabelece que um padrão é uma forma de “descrever soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Um padrão de projeto estabelece um nome e define o problema, a solução, quando aplicar esta solução e suas conseqüências”.
Trocando em miúdos, os padrões estabelecem algumas técnicas genéricas que podem ser utilizadas para resolver algum tipo de problema de desenvolvimento. Como ninguém gosta de “reinventar a roda”, surgiram os primeiros padrões de projeto, que acabaram auxiliando os demais desenvolvedores em seus problemas semelhantes.
Imagine que você está escrevendo uma classe que só poderá ser instanciada uma única vez, como você fará isso? E se você quiser encapsular as chamadas ao banco de dados? E se você precisar encontrar uma maneira para alterar o comportamento dos seus objetos em tempo de execução? E se você quiser encapsular a criação de objetos? E se você quiser que o seu web site tenha todos os seus componentes separados por responsabilidades? Num primeiro momento, você talvez quebre um pouco a cabeça e acabe bolando uma maneira de resolver todos esses problemas, porém se você já tivesse conhecimento sobre os padrões DAO, Singleton, Strategy, Factory e o conjunto de padrões do MVC talvez você não tivesse tanta dor de cabeça e não teria gasto tanto tempo reinventando a roda.
Perceba que um padrão não lhe dará o código da sua classe prontinho, ao invés disso ele lhe servirá para lhe elucidar em relação a solução do problema. O fato que prova isto é que raramente os desenvolvedores irão seguir “à risca” o que sugere o padrão, fazendo algumas adaptações acerca da sugestão original.
Um ponto que muita gente se engana, é quando alguém diz que “padrões são coisas do Java ou do PHP”. Perceba que no inicio do post eu falei que os padrões estabelecem técnicas genéricas, portanto estas não estão ligadas a nenhuma linguagem específica, e sim aos problemas de desenvolvimento de softwares OO.

Por que usar os Padrões de Projeto?

Além de evitar que você perda perca tempo reinventando a roda, os padrões lhe sugerem uma solução bacana do ponto de vista OO. O que pretendo dizer é que o uso deles nos ajudam a desenvolver um projeto com bom nível de coesão e reusabilidade, o que facilita o processo de manutenção do software. Lembre-se que a manutenção é justamente o que toma o maior período do tempo de vida de qualquer projeto de desenvolvimento.
Outro ponto, não menos importante, é que muitas vezes você não está desenvolvendo um projeto sozinho. Se toda a equipe está familiarizada com os Patterns você poderá economizar bastante tempo caso seja necessário explicar como você desenvolveu uma funcionalidade qualquer, fazendo com que você não precise ‘baixar o nível’. Ao invés de dizer “fiz com que o construtor da classe não pudesse ser visível às demais e coloquei um método getInstance pra retornar a única instância da classe”, você simplesmente diz: “usei o Singleton”.
A partir do momento que você sabe utilizar os Design Patterns de forma coerente, podemos dizer que você é, de fato, um bom desenvolvedor OO.

Quero saber qual caminho seguir pra estudar sobre o assunto

Uma forma é buscar as definições dos padrões no Google, principalmente pelas definições “oficiais”. Os principais padrões são os do GoF (Gang Of Four) e os J2EE (voltados para projetos empresariais). Recomendo estudá-los nesta ordem e depois buscar outros padrões de acordo com a sua necessidade.
Se você prefere um estudo mais formal, recomendo os livros:
  • Design Patterns: Elements of Reusable Object-Oriented Software (mais completo)
  • Head First: Design Patterns ou Use a Cabeça: Padrões de Projeto (pra quem gosta da série)
Infelizmente não achei o primeiro livro em nenhuma loja, apenas sua versão traduzida que encontrei aqui. Já o segundo livro eu encontrei aqui e sua versão traduzida aqui.
Bom gente, é isso… Qualquer dúvida, crítica ou sugestão que vocês tenham, deixem nos comentários! Espero que o post tenha ajudado a vocês a ter uma noção geral sobre Design Patterns. Até a próxima!

Nenhum comentário:

Postar um comentário