Existe um livro canônico sobre padrões de design? [fechadas]

49

Estou interessado em aprender padrões de design e gostaria de saber quais são os livros de primeira linha para aprender esse assunto.

Existe um livro por aí que seja o padrão de fato para descrever as melhores práticas, metodologias de design e outras informações úteis sobre padrões de design? E esse livro o torna especial?

mW00t
fonte
Não tenho certeza se é isso que você está pensando, mas encontro muitas coisas inteligentes sobre desenvolvimento no Forrst .
Trey Piepmeier 9/09/10
2
Que tal um título de "Fontes de referência para padrões de design" ou "Recursos de padrões de design" (já que não quero dizer "referência" apenas como "procurar sob demanda") e mover todas as coisas da lista para o corpo (ou removê-lo )?
Para algumas implementações decentes, eu costumava dar uma olhada nas do dofactory (embora não comprei os livros).
Steven Evers
4
Dado que esta pergunta recebeu uma resposta completa e abrangente, encerrei as outras perguntas sobre padrões de design como duplicadas para designá-la como o Q&A canônico e o par de respostas deste tópico.

Respostas:

58

Padrões de design: elementos de software orientado a objetos reutilizáveis aproximam-se muito da minha definição de um livro canônico sobre padrões de design. De acordo com o artigo da Wikipedia (ênfase minha):

A data de publicação original do livro era 21 de outubro de 1994 com direitos autorais de 1995 e, em julho de 2010, o livro estava em sua 38ª impressão . O livro foi disponibilizado pela primeira vez ao público na reunião do OOPSLA, realizada em Portland, Oregon, em outubro de 1994. Foi altamente influente no campo da engenharia de software e é considerado uma fonte importante para a teoria e a prática do design orientado a objetos. Mais de 500.000 cópias foram vendidas em inglês e em 13 outros idiomas .

Ward Cunningham , pioneiro em padrões de design, mantém um catálogo on - line dos padrões do livro no WikiWikiWeb . E de acordo com o artigo da Wikipedia sobre padrão de design (novamente, ênfase minha):

Os padrões de design ganharam popularidade na ciência da computação depois que o livro Design Patterns: Elements of Reusable Oriented Object Software foi publicado em 1994 pela chamada "Gangue dos Quatro" (Gamma et al.).

Existem muitos outros livros referenciados no mesmo artigo que são notáveis ​​no gênero:

Dos que li o livro de Fowler, é altamente influente e uma boa leitura. Em certos momentos, é um pouco vago para o meu gosto, mas no geral é um livro agradável. Há um catálogo on - line dos padrões incluídos no livro, com descrições mínimas.

Também examinei os padrões de design do Head First e, se você leu qualquer outro livro da série Head First, é da mesma alta qualidade e tão agradável quanto a maioria dos livros da série :

Head First é uma série de livros instrutivos introdutórios para muitos tópicos, publicados pela O'Reilly Media. Ele enfatiza uma combinação não ortodoxa, visualmente intensiva, envolvendo quebra-cabeças, piadas, design e layout fora do padrão, e um estilo envolvente e conversador para imergir o leitor em um determinado tópico.

O termo "padrão de design" é um tanto vago, pois toda solução reutilizável geral pode ser considerada um padrão de design. Eu sempre notei uma tendência de aplicar o rótulo às soluções descritas em um dos livros notáveis ​​que listei acima, e mais especificamente nos livros Gang of Four e Fowler. Os padrões de design não seguem um processo de desenvolvimento exclusivo, são soluções de software normais que são imensamente reutilizáveis ​​e são extremamente difíceis de identificar .

Mas se você comparar os catálogos on-line dos dois livros com o conteúdo de livros específicos de idiomas, perceberá que eles são frequentemente usados ​​como modelos. Então, eu diria que os dois livros estão muito perto de serem referências canônicas, com o livro do GoF sendo o mais importante do ponto de vista histórico, embora ambos estejam limitados à programação orientada a objetos .

yannis
fonte
2
+1. Na verdade, eu queria te dar +5, mas infelizmente isso não é permitido.
Dipan Mehta
Toda a série Arquitetura de Software Orientada a Padrões trata de padrões em diferentes tipos de sistemas - o Volume 1 trata de padrões e padrões arquiteturais que atravessam domínios; o Volume 2 trata de sistemas concorrentes; o Volume 3 trata de gerenciamento de recursos em sistemas em rede / distribuídos; O volume 4 trata de sistemas distribuídos e o volume 5 trata de linguagens de padrões, além de uma referência para os outros 4 volumes. Dada a pergunta, acho que o Volume 5 também pode ser aplicável, mas ainda não passei muito tempo com ele ... ainda.
Thomas Owens
@ Yannis este e a cabeça primeiro geralmente são baseados em idiomas estáticos. Existem bons livros para linguagens dinâmicas como python.
Ravi404
@ ravi404 norvig.com/design-patterns
whytheq
27

O livro Gangue dos Quatro - Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis é provavelmente a coisa mais próxima que temos de um padrão da indústria em padrões de design.

Para uma introdução mais acessível, o Head First: Design Patterns também é bom. Não se deixe levar pela capa da moda, pois é uma boa leitura e provavelmente o ajudará a entender os conceitos do livro GoF muito mais facilmente se você o ler primeiro.

richeym
fonte
23

Head First Design Patterns

A qualquer momento, em algum lugar do mundo alguém enfrenta os mesmos problemas de design de software que você tem. Você sabe que não deseja reinventar a roda (ou, pior, um pneu furado), então olha para Design Patterns - as lições aprendidas por aqueles que enfrentaram os mesmos problemas. Com Design Patterns, você tira proveito das melhores práticas e experiências de outras pessoas, para poder gastar seu tempo em ... outra coisa. Algo mais desafiador. Algo mais complexo. Algo mais divertido.

Você quer aprender sobre os padrões que importam - por que usá-los, quando usá-los, como usá-los (e quando NÃO usá-los). Mas você não quer apenas ver como os padrões ficam em um livro, mas também como eles ficam "em estado selvagem". Em seu ambiente nativo. Em outras palavras, em aplicações do mundo real. Você também deseja aprender como os padrões são usados ​​na API Java e como explorar o suporte a padrões interno do Java em seu próprio código.

Você quer aprender os princípios reais de design de OO e por que tudo que seu chefe lhe disse sobre herança pode estar errado (e o que fazer). Você quer aprender como esses princípios ajudarão na próxima vez que você subir um riacho sem um padrão de design.

Mais importante, você deseja aprender a "linguagem secreta" dos Padrões de Design para poder se manter com seu colega de trabalho (e impressionar os convidados da festa) quando ele mencionar casualmente seu uso incrivelmente inteligente de Comando, Fachada, Proxy e Fábrica entre goles de um martini. Você contrariará com facilidade sua profunda compreensão de por que Singleton não é tão simples quanto parece, como a Fábrica é tão mal interpretada com frequência ou sobre o relacionamento real entre Decorador, Fachada e Adaptador.

Com o Head First Design Patterns , você evitará o constrangimento de pensar que Decorator é algo do programa "Trading Spaces" ...

Gordon
fonte
Este. É uma leitura muito acessível e mudou a maneira como abordo a engenharia de software completamente.
precisa saber é o seguinte
2
toda a cabeça da primeira série é ótima, especialmente para iniciantes.
Thomas Stock
2
Eu amo o livro, mas absolutamente odeio a capa! Um colega que não era programador passou pelo meu escritório outro dia, viu o livro e disse: "Dirija o primeiro designer de padrões? Você está entrando no negócio da moda?"
Pete
11
@Pete Por que a capa pode causar mais problemas. Ela aparentemente vive uma vida dupla. fishbowl.pastiche.org/2005/08/12/…
Gordon
10

Sim, existe um livro bem conhecido sobre padrões de design: Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis e os autores são freqüentemente chamados de "Gang of Four" (GoF) e são mencionados em quase todos os textos sobre padrões de design.

Jonas
fonte
Também o livro de Martin Fowler: amazon.com/Patterns-Enterprise-Application-Architecture-Martin/…
Robert Harvey
Este não é um livro sobre padrões de design. É um catálogo de padrões. Há uma breve introdução aos padrões de design no começo, mas não acho que essa introdução seja suficiente.
Jörg W Mittag
@ JörgWMittag Não existe um processo único de criação de padrões de design; eles são soluções reutilizáveis ​​relativamente pequenas. Os padrões de design são criados através dos processos normais de desenvolvimento de software, o que os diferencia é sua imensa reutilização. O único processo exclusivo relevante é identificar uma solução como padrão de design, e os catálogos fazem isso com precisão.
yannis
9

Padrões de design: elementos de software orientado a objetos reutilizável

texto alternativo

Da wikipedia :

Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis ​​é um livro de engenharia de software que descreve soluções recorrentes para problemas comuns no design de software. Os autores do livro são Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides com prefácio de Grady Booch. Os autores são frequentemente chamados de Gang of Four, GoF ou Go4. O livro está dividido em duas partes, com os dois primeiros capítulos explorando os recursos e as armadilhas da programação orientada a objetos e os capítulos restantes descrevendo 23 padrões clássicos de design de software. O livro inclui exemplos em C ++ e Smalltalk.

Piers Myers
fonte
3

Um dos melhores sites de padrões de design do mundo é o Ward's Wiki, o primeiro wiki. Consulte http://c2.com/cgi/wiki?HistoryOfPatterns para obter uma boa página inicial.

Em 1987, Ward e Kent estavam consultando o Grupo de Sistemas de Teste de Semicondutores da Tektronix, que estava tendo problemas para terminar um projeto. Eles decidiram experimentar o material que estavam estudando. Como Alexander, que disse que os ocupantes de um edifício deveriam projetá-lo, Ward e Kent deixaram que representantes dos usuários (um treinador e um engenheiro de campo) terminassem o projeto.

Ward criou uma "linguagem" de cinco padrões que ajudou os designers novatos a aproveitar os pontos fortes do Smalltalk e evitar suas fraquezas ...

Ward e Kent ficaram impressionados com a elegância (reconhecidamente espartana) da interface projetada por seus usuários. Eles relataram os resultados desse experimento no OOPSLA 87 em Orlando. Eles escreveram uma posição no painel e apresentaram no workshop de Norm Kerth sobre De onde vêm os objetos? Eles conversaram sobre padrões até ficarem azuis na cara e terem muito acordo, mas sem padrões mais concretos, ninguém estava se inscrevendo.

Enquanto isso, Erich Gamma estava ocupado escrevendo e refletindo sobre design orientado a objetos no ET ++ como parte de sua tese de doutorado. Erich havia percebido que estruturas ou padrões de design recorrentes eram importantes. A questão era realmente como você os captura e comunica.

Bruce Anderson deu uma palestra no TOOLS 90, na qual ErichGamma estava presente; Erich gostou da conversa. Bruce deu um trabalho na EcoopOopsla90 (Ottawa) e dirigiu um BOF chamado Toward an Architecture Handbook, onde ele, Erich Gamma, Richard Helm e outros entraram em discussões sobre padrões. Foi a primeira vez que Richard e Erich se conheceram e perceberam que compartilhavam idéias comuns sobre as principais idéias por trás da criação de software OO reutilizável.

Pouco antes da ECOOP'91, Erich Gamma e Richard Helm, sentados em um telhado em Zurique, em um dia sufocante de verão, reuniram o começo muito humilde do catálogo de padrões que acabariam se tornando DesignPatterns ...

As coisas realmente rolaram no workshop da OOPSLA que Bruce realizou em 1991. Coincidentemente, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides estavam lá; eles mais tarde se tornariam a quadrilha dos quatro autores do livro Design Patterns ...

Gaurav
fonte
2

Penso que a refatoração de padrões pode ser útil simplesmente porque descreve como certos códigos / projetos podem ser refatorados em relação aos padrões no livro do GoF. Isso pode ajudar a superar a curva de aprendizado inicial. Ah, e também contempla 'felicidade-padrão' :)

Você também pode achar os três primeiros volumes da Arquitetura de Software Orientada a Padrão uma boa leitura.

finrod
fonte
1

Padrões de design

Este site de tutorial contém as seguintes subseções

  • Intenção de cada padrão de design
  • Estrutura do mundo real para o padrão de design
  • Uma declaração do problema
  • Discussão detalhada sobre o problema
  • Lista de verificação sobre como chegar a um padrão
  • Regras básicas ao chegar ao padrão.
  • Trechos de código para o padrão de design que inclui C #, C ++, Delphi, Java e PHP

Este site também contém um guia sobre Anti Padrões, UML e Refatoração.

pramodc84
fonte
O site SourceMaking parece simplista à primeira vista, mas é realmente uma ótima referência. Além dos padrões de design, alguns dos antipatterns de desenvolvimento, arquitetura e gerenciamento de projetos são hilários. As soluções refatoradas podem realmente ajudar a salvar uma reunião que está saindo dos trilhos. (Nada mau para uma referência de padrão de design)
Qualquer que seja
1

O livro original, "Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis" é um bom recurso para padrões de design orientados a objetos.

Existem muitos outros livros por aí. Quando preciso de uma referência rápida e meu livro do GoF está fora de alcance, a Wikipedia normalmente possui informações suficientes sobre esses e outros padrões de design.

Esses são os principais que eu uso. Também deve ser observado que as pessoas começaram a aplicar o formato padrão a outras coisas, como gerenciamento de projetos.

Se você quiser saber sobre antipadrões, dos quais você deve estar ciente, existem dois livros, "AntiPatterns: Refatoração de software, arquiteturas e projetos em crise", bem como "Refatoração: melhorando o design do código existente", que possui uma seção sobre cheiros de código, outro nome para antipatterns.

indyK1ng
fonte
1

"Princípios, padrões e práticas ágeis em C #", de Robert C. Martin. Eu acho que ele também tem uma versão em Java do livro.

Além disso, não é um padrão em si, mas o Design Orientado a Domínio tem alguns ótimos conceitos, mesmo que você não opte pela abordagem completa do DDD.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

fonte
1

Se você estiver interessado especificamente em padrões de design em C ++, experimente o Modern C ++ Design de Andrei Alexandrescu.

Este livro fala sobre como implementar padrões comumente usados ​​como Factory, Singleton e Visitor em C ++. Ele também fala sobre tópicos muito específicos do C ++, como ponteiros inteligentes, metaprogramação de modelos e design de classes com base em políticas.

O autor do livro é um especialista autorizado , conhecido por sua

trabalho pioneiro em design baseado em políticas implementado via metaprogramação de modelos. Essas idéias são articuladas em seu livro Modern C ++ Design e foram implementadas pela primeira vez em sua biblioteca de programação, Loki. Ele também implementou o conceito "mover construtores" em sua biblioteca MOJO. Ele contribuiu para o C / C ++ Users Journal com a assinatura "Generic <Programming>" ...

Dima
fonte
11
você se importaria de explicar mais sobre o que faz e para que serve? "Link-só responde" não são muito bem-vindos no Stack Câmbio
mosquito
@gnat: como é isso?
Dima
bem, sua edição recente certamente parece uma melhoria para mim. Embora os leitores de que a resposta seria provavelmente beneficiar de uma explicação mais detalhada do que é Aleksandresku
mosquito
@gnat: como você obviamente sabe quem ele é, sinta-se à vontade para editar minha resposta.
Dima