Design Patterns – A Chave Dos Seus Problemas

Definição De Design Patterns

Termo freqüentemente visto na programação, design patterns, ou padrões de projeto, são soluções para problemas cotidianos no desenvolvimento de software. Todo padrão de projeto é fortemente embasado em teoria  na resolução de seu problema. Existem dezenas de padrões definidos, e você, ainda irá se deparar com eles!

Normatização De Problemas Comuns.

Apesar de incoerente, mas um fato verídico é que os padrões de projeto não surgiram especificamente no campo da computação. Christopher Alexander, originariamente aplicou este conceito em meados da década de 70 na área de arquitetura e urbanismo, onde após vários estudos, passou a conceituar a ciência da computação.

Os elementos desta linguagem são entidades aqui chamadas de padrões. Cada padrão descreve um problema que ocorre repetidamente em nosso ambiente, e então descrevemos a essência da solução deste problema de forma que você possa utilizar um milhão de vezes sem ter que fazer duas vezes o mesmo caminho. Christopher Alexander.

Os padrões de projeto auxiliam em três frentes de atuação no desenvolvimento de software: criação, estrutural e comportamental. Naturalmente sua serventia é meramente base conceitual, portanto, são suas teorias que deverão implicar em programação. No mundo da engenharia de software, isso se torna aplicável a qualquer negócio que bote em prática sua modelagem de objetos.

Figura 1 – E aí? Vai querer re-inventar a roda?

Modelo Ágil De Desenvolvimento

Por estar diretamente ligado a orientação de objetos, seus padrões fornecem um modelo ágil no desenvolvimento. Prova disso são os frameworks, que em geral, desenvolvem seus núcleos, diga-se core da aplicação, bruscamente cobertos por alguma definição de padrão. É esta arquitetura que irá sustentar todo o desenvolvimento do projeto.

Padrões de projeto fornecem uma maneira mais lógica de interagir entre objetos e classes na aplicação. Além disso, os padrões podem envolver outros padrões, e assim, manter um ciclo contínuo no desenvolvimento. É difícil imaginar um mundo na programação que já não se ouça falar em MVC, DAO ou Singleton. São populares!

Definitivamente, o desenvolvimento de software se tornou muito mais prático e ágil, a partir do momento que passamos a encarar simples rotinas como modelos de padrões. Isso vai de encontro com o mercado  da tecnologia da informação que se encontra cada vez mais competitivo, mais exigente, e claro, sempre no menor tempo estimado.

Figura 2 – Imaginação mirabolante de um arquiteto de software.

Os 23 Mandamentos Dos Padrões De Projeto.

A Gangue dos Quatro (Gang Of Four, GOF), composta pelos escritores Erich Gamma, Richard Helm, Ralph Johnson e JohnVlissides, foram os responsáveis por descrever os vinte e três padrões básicos no mundo do desenvolvimento de software. Estes padrões são abordados no livro Design Patterns: Elements of Reusable Object-Oriented Software, a qual será introduzida em pequenos tópicos:

Padrões de criação

  • Abstract Factory: grupo de objetos Factory da qual têm um propósito em comum.
  • Builder: objetos completos da qual se separa construção e representação.
  • Factory Method: instância objetos sem especificar a classe exata de criação.
  • Prototype: cria objetos clonando um objeto já existente.
  • Singleton: restringe a criação do objeto para apenas uma única instância.

Padrões de estrutura

  • Adapter: permite que classes com interfaces incompatíveis trabalhem juntas.
  • Bridge: separa uma abstração vinda da implementação tornando-a independente.
  • Composite: composição de objetos similares que se tornam um único objeto.
  • Decorator: dinamicamente adiciona ou sobrescreve um comportamento existente.
  • Facade: provê uma interface simplificada para uma extensa codificação.
  • Flyweight: reduz o custo de criação e manipulação de um grande número de objetos.
  • Proxy: provê um intermediador para controle de outros objetos.

Padrões de comportamento

  • Chain of responsibility: delega comandos para uma seqüência de objetos.
  • Command: cria objetos que encapsulam ações e parâmetros.
  • Interpreter: implementa uma linguagem especializada.
  • Iterator: acessa os elementos de um objeto seqüencialmente.
  • Mediator: permite um acoplamento de classes que interage entre seus métodos.
  • Memento: provê a habilidade de restaurar um objeto ao seu estado anterior.
  • Observer: permitem que objetos observem determinados eventos.
  • State: permite que um objeto altere seu comportamento via estado interno.
  • Strategy: permite a seleção exclusiva de um objeto em tempo de execução.
  • Template method: define uma moldura padrão para prover classes abstratas.
  • Visitor: manipula hierarquia de determinado objeto estruturado.

É importante destacar que estes foram apenas os primeiros estudos de padrões de projeto. Hoje, cada plataforma demanda outras dezenas padrões que vão muito além. Destes citados, é realidade afirmar que muitos estão presentes no cotidiano do programador. Simplesmente norteiam o rumo do desenvolvimento de software.

Figura 3 – Diagramação de objetos.

Por Onde Começar?

Particularmente, considero padrões de projeto um assunto relativamente extenso de se estudar. É teoria em cima de teoria e chega uma hora que sua cabeça esquenta a ponto de não suportar mais. Uma coisa é você aprender a programar e já ir botando em prática no editor, outra, é você ficar lendo dezenas de paradigmas e não poder de imediato codificar, mas sim,  compreender sua complexidade. Vá devagar! Leve a sério a ideia de interpretar estes padrões para então sabê-los quando aplicar. Diferentemente de linguagens de programação, isto é algo que irá agregar conhecimento em toda sua vida profissional, pois está vivamente presente no desenvolvimento de software.

Configura a recomendação de alguns livros:

PHP
PHP Objects, Patterns, and Practice – Editora Apress

ASP.NET
Professional ASP.NET Design Patterns – Editora Wrox

Java
Core J2EE Patterns: Best Practices and Design Strategies – Editora Prentice Hall

Ruby
Design Patterns in Ruby – Editora Addison Wesley Professional

E claro, fique ligado aqui no portal Webmasters!

Considerações finais.

Esperamos que este sexto artigo da série “ABC” tenha lhe sido útil para preencher mais esta lacuna no mundo do desenvolvimento. Lembramos que o foco dessa série é apenas conceituar os temas, artigos mais especializados do assunto surgirão na medida do possível. Sugestões, críticas e comentários sempre serão bem vindos!

Próximo artigo: Controle de Versão, gestão de arquivos.

Referências bibliográficas.

What Are Design Patterns and Do I Need Them?
http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm

GoF Design Patterns – Huston.
http://www.vincehuston.org/dp/

Design Patterns – Uses of Design Patterns.
http://sourcemaking.com/design_patterns

Gang of Four – Design Patterns: Elements of Reusable Object-Oriented Software
http://c2.com/cgi/wiki?GangOfFour

Be Sociable, Share!

Participa! Comenta...