freeCodeCamp/guide/portuguese/software-engineering/design-patterns/index.md

47 lines
3.6 KiB
Markdown

---
title: Design Patterns
localeTitle: Padrões de design
---
## Padrões de design
Programadores e arquitetos de software usam padrões de projeto para resolver problemas **comuns e recorrentes** na arquitetura de software. Os padrões fornecem uma abordagem agnóstica de linguagem **para programação orientada a objetos** que ajuda os desenvolvedores a seguir os princípios de um bom design de aplicativo.
### Por que padrões de design?
O desenvolvimento de padrões de design oferece várias vantagens:
* É mais fácil seguir bons princípios de programação, como os **[princípios](https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa)** do **[SOLID](https://www.youtube.com/watch?v=XzdhzyAukMM) .**
* Ele mantém pedaços de código menores, então o código é mais fácil de **testar** e **depurar**
* Ele ajuda a manter o código fracamente acoplado, para que o código seja mais fácil de **reutilizar** e **atualizar** para novos aplicativos
* Torna o código mais fácil de **entender** , por isso os novos contribuidores podem **aumentar rapidamente**
Usar padrões de design incorre em alguns trade-offs e desenvolvedores novatos na prática devem lembrar-se do seguinte:
* Não **há balas de prata** na programação e os padrões de design não são uma exceção
* Padrões de design adicionam uma **camada de abstração** ao código, o que aumenta o esforço inicial de design e desenvolvimento
* O uso excessivo de padrões de design ou a necessidade de ajustá-los torna o código **mais difícil** de entender
### Suporte de linguas
Padrões de design originados do mundo de linguagens estaticamente tipadas como C ++, Java e C #. A maioria dos recursos sobre desenvolvimento por padrão de design é baseada em um desses idiomas.
No entanto, os padrões de design são apenas isso: padrões. Eles **não** são **implementações** , como classes ou interfaces, e **não** são **restritos a nenhum idioma** .
Ao aprender padrões de design dentro de uma linguagem dinâmica, se padrões particulares parecerem desnecessariamente complexos ou contra-intuitivos, lembre-se de suas origens. Os desenvolvedores em linguagens dinâmicas ainda podem usar e se beneficiar dos padrões de design, embora mais pesquisas possam ser necessárias para compreendê-los completamente.
### Usos
Padrões de design são excelentes para resolver problemas de codificação fundacional de forma simples e repetitiva. Em geral, eles se enquadram em três categorias:
* Padrões **criativos** descrevem como criar novos objetos
* Padrões **estruturais** descrevem como compor objetos de outros objetos
* Padrões **comportamentais** descrevem como os objetos se comunicam entre si
Todas essas tarefas podem ser executadas sem padrões de design, mas os padrões de design **reduzem o risco de** violar boas práticas e criar códigos de difícil manutenção.
#### Mais Informações:
* Os [padrões de design de](https://github.com/kamranahmedse/design-patterns-for-humans) Kamran Ahmed [para humanos](https://github.com/kamranahmedse/design-patterns-for-humans) é uma excelente introdução aos padrões específicos
* [Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) é o livro que iniciou esta prática
* Os [Padrões de Arquitetura de Aplicativos Corporativos de](https://martinfowler.com/eaaCatalog/) Martin Fowler fornecem um conjunto de padrões mais sofisticados para aplicativos corporativos
* O Sourcemaking fornece um [recurso online](https://sourcemaking.com/design_patterns) com exemplos adicionais e informações sobre padrões de design