freeCodeCamp/guide/portuguese/agile/design-patterns/index.md

31 lines
3.8 KiB
Markdown
Raw Normal View History

---
title: Design Patterns
localeTitle: Padrões de design
---
## Padrões de design
Um padrão de design é uma solução de design comum para um problema comum de projeto. Uma coleção de padrões de design para um campo ou domínio relacionado é chamada de linguagem de padrão. Observe que também há padrões em outros níveis: código, simultaneidade, arquitetura, design de interação…
Na engenharia de software, um padrão de design de software é uma solução geral reutilizável para um problema comum em um determinado contexto no design de software. Não é um projeto acabado que pode ser transformado diretamente em código fonte ou máquina. É uma descrição ou modelo de como resolver um problema que pode ser usado em muitas situações diferentes. Os padrões de projeto são as melhores práticas formalizadas que o programador pode usar para resolver problemas comuns ao projetar um aplicativo ou sistema.
Os padrões de design orientados a objetos geralmente mostram relacionamentos e interações entre classes ou objetos, sem especificar as classes ou objetos finais de aplicativo envolvidos. Padrões que implicam estados mutáveis podem ser inadequados para linguagens de programação funcionais, alguns padrões podem ser tornados desnecessários em linguagens que têm suporte embutido para resolver o problema que estão tentando resolver, e padrões orientados a objetos não são necessariamente adequados para não-objetos. idiomas orientados.
Padrões de design podem ser vistos como uma abordagem estruturada para programação de computadores intermediários entre os níveis de um paradigma de programação e um algoritmo concreto.
O livro que popularizou o campo são os **Padrões de Design** da Gang of Four (GoF) **: Elementos do Software Orientado a Objetos Reutilizáveis** (1994). Apresenta uma série (23) de padrões para uma linguagem OO convencional (C ++) classificada em três tipos:
* **Criacional** (para criar objetos): fábrica abstrata, construtor, método de fábrica, protótipo, singleton.
* **Estrutural** (para compor objetos): adaptador, ponte, compósito, decorador, fachada, flyweight, proxy.
* **Comportamental** (para comunicação entre objetos): cadeia de responsabilidade, comando, intérprete, iterador, mediador, memmento, observador, estado, estratégia, método de modelo, visitante.
Os padrões podem ser usados para vários objetivos (aprendizagem, comunicação, aprimoramento de suas ferramentas), mas em agilidade eles devem ser refatorados do código com dívida técnica e não apenas adicionados no início (design / arquitetura emergente), pois você não tem conhecimento suficiente sobre o (futuro) sistema que vai evoluir. Observe que o que requer um padrão em um idioma ou ferramenta pode não ser necessário ou já fazer parte de outro idioma ou ferramenta. Uma estrutura é um conjunto de classes cooperantes que compõem um design reutilizável para um tipo específico de software e geralmente são pesadas em padrões.
#### Mais Informações:
* [Wikipedia sobre padrões de design](https://en.wikipedia.org/wiki/Software_design_pattern)
* [Wikipedia no GoF Book](https://en.wikipedia.org/wiki/Design_Patterns)
* [Padrões de Design por Criação de Fonte](https://sourcemaking.com/design_patterns) : lista de padrões conhecidos disponíveis on-line
* [Padrões de Programação de Jogos](http://gameprogrammingpatterns.com/) : livro sobre Padrões de Design comumente usados no Desenvolvimento de Jogos, disponível para ser lido online gratuitamente
* [Design Orientado a Objetos](http://www.oodesign.com/)
* [Um guia para iniciantes em design de padrões](https://code.tutsplus.com/articles/a-beginners-guide-to-design-patterns--net-12752)
* [De padrões de design à teoria de categorias](http://blog.ploeh.dk/2017/10/04/from-design-patterns-to-category-theory/)