terça-feira, 14 de abril de 2009

Detalhando Design Patterns

Hoje vou falar um pouco de padrões de projetos ou em inglês Design Patterns.

Definição
A definição clássica para Pattern é a seguinte: "um Pattern descreve um problema que se repete várias vezes em um determinado meio, e em seguida descreve o núcleo da sua solução, de modo que esta solução possa ser usada milhares e milhares de vezes” [Christopher Alexander].
Patterns são soluções genéricas e reutilizáveis, aplicáveis em classes de problemas bem conhecidos. Soluções que um dia funcionaram, tornam-se receitas para situações similares (desde que estas soluções tenham sido projetadas com flexibilidade).
Também acarretam um vocabulário comum de desenho, facilitando comunicação, documentação e aprendizado dos sistemas de software

Histórico
A idéia de armazenar informação sobre padrões observados em um contexto pode ser atribuída ao arquiteto Christopher Alexander (arquiteto, matemético e urbanista).
 - Alexander define uma ordem para a aplicação de patterns;
 - É sustentada a teoria que patterns podem gerar arquiteturas completas.
 - No seu livro The Timeless Way of Building, mostra como patterns podem ser aplicados na construção de casas, assim como no planejamento de bairros e cidades.
 - Somente em 1995, a "Gangue dos Quatro" ou simplesmente "GoF" (Gang of Four) – Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides -publicaram o primeiro catálogo de Design Patterns para programas orientado a objetos: Design Patterns – Elements of Reusable Object-Oriented software (GoF book).

Estrutura
Não existe um consenso dentro da comunidade de design patterns sobre como descrever um template de patterns. Diferentes autores preferem diferentes estilos para seus templates de patterns. Acho que estes 4 itens são necessários.
  • Nome - A identificação do Pattern é importante pois ele torna-se membro do vocabulário do projetista e de seus colegas. 
  • Problema - descreve quando aplicar o Pattern. Apresenta a classe de problemas em questão e seu contexto. 
  • Solução - descreve os elementos que fazem parte do design, seus relacionamentos, responsabilidades e colaborações. 
  • Conseqüências - os resultados e efeitos causados pela aplicação do Pattern. 

Organização
As Patterns podem ser separadas quanto ao seu propósito. Num próximo post vou detalhar o catalogo de Pattern descrito pela GoF.
  • Criacional:
    Diz respeito ao processo de criação de um objeto;
    Ex: Builder - separa a construção de um objeto complexo de sua representação, desta maneira um mesmo processo pode ser utilizado para criar diferentes representações.

  • Estrutural:
    Diz respeito a composição de objetos e classes;
    Ex: Composite - Compõe objetos em árvores de agregação (relacionamento parte-todo). O Composite permite que objetos agregados sejam tratados como um único objeto.

  • Comportamental:
    Caracteriza o modo como classes e objetos interagem e compartilham responsabilidades.
    Ex: Iterator - Provê um modo de acesso a elementos de um agregado de objetos, seqüencialmente, sem exposição de estruturas internas.
Espero ter esclarecido um pouco mais sobre padrões de projetos.

Nenhum comentário:

Postar um comentário