
Design Patterns
Por Davy Bittencourt
Qual a função dos Design Patterns?
Os Padrões de Projeto auxiliam no desenvolvimento por serem soluções aplicadas a problemas recorrentes e, portanto, sua utilização é imprescindível para aqueles que desejam evitar o retrabalho e potencializar o desacoplamento das estruturas. Em softwares baseados em orientação a objeto, fazer uso dos padrões pode significar a simplificação de uma abstração complexa ou quem sabe o isolamento de problemas em determinadas partes do projeto, com o objetivo de corrigir estes problemas, sem interferir em todo o sistema.
História
Em meados dos anos 70, os arquitetos Christopher Alexander, Sara Ishikawa e Murray Silverstein analisaram, em seu livro “A Pattern Language: Towns, Buildings, Construction”, 253 problemas e propuseram soluções padronizadas para determinadas situações, dando inicio ao estudo sobre os Padrões de Projeto.
O conceito dos Desing Patterns ficou realmente famoso quando os engenheiros de software Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, mais conhecidos como Gang of Four (GOF), escreveram o livro “Design Patterns: Elements of Reusable
Object-Oriented Software”, em especificam 23 padrões de projetos aplicados a ciência da computação, cujo objetivo era, compartilhando suas experiências, simplificar o desenvolvimento de softwares, disponibilizando soluções amplamente testadas e validadas.
Os Design Patterns da GOF
Os padrões descritos no livro são divididos em 3 categorias com funções distintas, estas são:
Criacionais
São responsáveis pela instanciação de objetos, ou seja, quando um processo necessita de um novo objeto ele não precisa se preocupar com como aquele objeto é criado, isto se torna responsabilidade de um Builder ou de uma Abstract Factory, entre outros.
Estruturais
Esta categoria se preocupa com a organização das estruturas de classes e tem como tarefa simplificar o design do sistema. Portanto, um padrão estrutural dita a forma como o relacionamento entre as entidades (classes e objetos) deve ser realizado. Por exemplo, ao aplicar o Facade em um relacionamento de herança, a abstração é simplificada pelo encapsulamento de lógicas complexas nas camadas inferiores da estrutura e isso torna a manutenção do modelo mais eficiente.
Comportamentais
Por fim, os padrões comportamentais tem como objetivo organizar a delegação de responsabilidades e a comunicação entre as entidades. O padrão Observer é um exemplo importante dos comportamentais. Seu funcionamento é basicamente como as notificações de aplicativos: a cada mudança no estado do Sujeito (objeto monitorado pelos observadores), uma notificação captada pelos observadores é emitida, para que decidam o que fazer ou não com esta informação.
Outro aspecto bastante importante e identificador dos Padrões de Projeto descritos pela GOF é o formato específico, composto por:
→ Nome;
→ Objetivo/Intenção;
→ Motivação;
→ Aplicabilidade;
→ Estrutura;
→ Consequências;
→ Implementações;
→ Usos conhecidos;
→ Padrões Relacionados.
Conclusão
Os Design Patterns são ferramentas incrivelmente úteis no desenvolvimento de softwares consistentes. No entanto, devem ser utilizados com sabedoria e moderação. É bastante comum que quando descobrimos uma ferramenta nova, queiramos usá-la pra tudo, mas nem sempre é a melhor opção. Uma análise detalhada sobre o problema é fundamental para a escolha da ferramenta correta.
Outro ponto importante é que os Padrões de Projeto são, em sua essência, todo tipo de solução efetiva para problemas recorrentes, ou seja, alguns desenvolvedores, ao longo de suas carreiras, identificam padrões de projeto diferentes, e a cada nova solução relevante compartilhada, nossa comunidade fica mais forte e mais apta a contribuir com qualidade para o desenvolvimento da ciência dos softwares.