Java com café: fevereiro 2012

Introdução aos Design Patterns

Padrões de projeto são sempre bem vindos quando o assunto é Engenharia de Software. Existe uma variedade deles, mas pra este post teremos apenas uma introdução para entender melhor o que são e pra que servem. Vamos começar com uma definição resumida da Wikipédia:
"Um Padrão de Projeto (Design Pattern) descreve uma solução geral reutilizável para um problema recorrente no desenvolvimento de sistemas orientados a objetos. Não é um código final, é um modelo de como resolver um problema que pode ser usado em muitas situações diferentes. Os Padrões de Projeto definem as relações e interações entre as classes ou objetos, sem especificar os detalhes das classes ou objetos envolvidos, ou seja, estão num nível de generalidade mais alto."
Os conceitos de padrões de projeto vem sendo discutidos ao longo dos anos e se tornou mais popular depois do lançamento do livro Design Patterns: Elements of Reusable Object-Oriented Software em 1995. Então os autores do livro (Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides) ficaram conhecidos como sendo a Gangue dos Quatro (Gang of Four) ou simplesmente GoF.
Outra definição interessante veio de Christopher Alexander cujo seus estudos contribuíram para a utilização de padrões geométricos e matemáticos no urbanismo e arquitetura:
“Cada padrão descreve um problema que ocorre freqüentemente em seu ambiente, e então descreve o núcleo de uma solução para o problema, de maneira que você possa usar esta solução um milhão de vezes, sem fazê-la do mesmo jeito duas vezes.”
Mas o que um cara urbanista e arquiteto está fazendo aqui? Você já deve ter percebido que padrões de projeto não estão ligados apenas a engenharia de software mas também a outras engenharias, como a civil por exemplo. Imagina se você entraria num prédio cujo projeto foi na base do "codifica-conserta"? Você se sentiria seguro? Neste caso é ainda mais crítico porque vidas estariam em risco. De qualquer forma precisamos de boas soluções para nossos projetos e ter padrões já experimentados e aprovados é uma ótima ajuda. Foi com base nos estudos de Alexander que cientistas da computação desenvolveram padrões de projetos usados na engenharia de software.
Dando continuidade ao que interessa, atualmente os padrões são divididos em 3 categorias:
  • Criacionais: Diz respeito a criação de objetos;
  • Comportamentais: Diz respeito a maneira que objetos e classes distribuem suas responsabilidades para realizar uma tarefa
  • Estruturais: Diz respeito a maneira como classes e objetos são organizados estruturalmente
Existem 23 padrões de projetos oficiais que se encaixam nestas categorias. Digo oficiais porque eles são os padrões documentados pela GoF. Existem diversos outros padrões e qualquer pessoa pode criar um, desde que tenha a solução para um problema comum e siga o modelo de documentação. Para documentar um padrão, deve-se definir alguns elementos:
  • Nome e classificação
  • Problema
  • Solução
  • Consequências
  • Casos de uso
Estes são os principais elementos a serem documentados. Pode não parecer importante mas, sem uma forma de documentar os padrões, eles não existiriam ou poderiam até existir mas seriam um monte de diagramas e textos soltos. Foi o próprio Alexander que definiu em seu livro Notes on the Synthesis of Form, The Timeless Way of Building e A Pattern Language, como os padrões devem ser descritos.

Bom pessoal, por hoje é só e espero falar mais sobre alguns padrões em posts futuros.