Por que Design Patterns é tão importante?

27 respostas
V

Colegas, sou de BH e estou procurando emprego como programador, desenvolvedor ou analista em JAVA.

Me considero novato na linguagem - ± 1 ano - embora tenho bastante experiência em desenvolvimento + de 15 anos.

Muitas das vagas que me candidato pedem conhecimento/experiência em Design Patterns.

Em uma prova que fiz rescentemente me perguntou sobre D.P. : Singleton, Facade, MVC …

Ja procurei na NET sobre este assunto e nao consegui entender nada. Ja li o tutorial sobre o assunto aqui no Portal e também não entendi muita coisa.

Eu tenho algumas perguntas :

O que e aonde se aplica este D.P. ?
D.P. existe em outras linguagens ? quais ?
Aonde posso conseguir aprender de uma forma clara sobre este assunto ?
Será que estou muito novo na linguagem por isso não consegui compreender ?
Eu preciso decorar ? tem como compreender sem decorar ?

Não sei se é duvida de muitos mas …

Vimieiro

27 Respostas

peczenyj

Simples: um dia os programadores viram que alguns problemas eles resolviam de forma parecida, ai resolveram dar nomes a essas formas.

Os padrões classicos surgiram, se não me engano, no livro da “gangue dos 4”, que são os padrões GOF. Hoje em dia tem padrão pra qq coisa, então vale a pena estudar para ver soluções classicas ou não de problemas que são no minimo comuns.

S

Da uma procurada sobre GOF(gang of four) foram o pioneiros em DP.
Eu entendo um poco, utilizado no que posso pois é bom para se padronizar e evitar certos erros, são boas maneiras e gestões de negócio que fazem seu produto(desde da venda, produção e entraga) ficarem padronizados, fugindo de possíveis erros.

S

peczenyj:
Simples: um dia os programadores viram que alguns problemas eles resolviam de forma parecida, ai resolveram dar nomes a essas formas.

Os padrões classicos surgiram, se não me engano, no livro da “gangue dos 4”, que são os padrões GOF. Hoje em dia tem padrão pra qq coisa, então vale a pena estudar para ver soluções classicas ou não de problemas que são no minimo comuns.

po, falei a mesma coisa que vc haha, desculpa. tinha começado a responder e nem vi que tinha falado tb.

F

vimieiro:
Colegas, sou de BH e estou procurando emprego como programador, desenvolvedor ou analista em JAVA.

Me considero novato na linguagem - ± 1 ano - embora tenho bastante experiência em desenvolvimento + de 15 anos.

Muitas das vagas que me candidato pedem conhecimento/experiência em Design Patterns.

Em uma prova que fiz rescentemente me perguntou sobre D.P. : Singleton, Facade, MVC …

Ja procurei na NET sobre este assunto e nao consegui entender nada. Ja li o tutorial sobre o assunto aqui no Portal e também não entendi muita coisa.

Eu tenho algumas perguntas :

O que e aonde se aplica este D.P. ?
D.P. existe em outras linguagens ? quais ?
Aonde posso conseguir aprender de uma forma clara sobre este assunto ?
Será que estou muito novo na linguagem por isso não consegui compreender ?
Eu preciso decorar ? tem como compreender sem decorar ?

Não sei se é duvida de muitos mas …

Vimieiro

D.P. são padrões para desenvolvimento…
D.P. não está ligado a nenhuma linguagem, são padrões e em algumas linguagens é possível implementar esses padroes. (Java, delphi por exemplo).
Da uma procura no google que você encontra referência sobre materiais para estudo…
Não é preciso decorar… assim que você conseguir entender, verá que não é um bicho de 7 cabeças…

abraços!

S

O legal de conceitos de DP é que vc pode criar suas próprias patterns e implementalas no teu local de trabalho, independente da linguagem que vc use.

leofernandesmo

"D.P. existe em outras linguagens ? quais ? "
Até onde eu sei todas. Até as que não são OO (Fonte: http://www.se-radio.net/podcast/2006-01/episode-1-patterns).

“Aonde posso conseguir aprender de uma forma clara sobre este assunto ?”
http://oreilly.com/catalog/9780596007126/
http://www.google.com.br/search?q=design+pattern&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a

“Será que estou muito novo na linguagem por isso não consegui compreender ?”
É bem provável que vc tenha mais dificuldade…mas não deixe de continuar estudando.

“Eu preciso decorar ? tem como compreender sem decorar ?”
Não, não precisa decorar…

Marcio_Duran

Design Patterns, esta relacionado a soluções que vão contribuir para melhor implementação no seu projeto:

Eles se indentificam-se, em Criação, Comportamento e Estrutura, se você tiver um bom conhecimento em OO vai identificar-se com esse conceito, com mais facilidade:

Decorator esta relacionado a comportamento em tier presentation ou melhor dizendo comportamento de tela, o que sugere Design Patterns de Criação.

[size=18]; )[/size]

P

Um resumo simples para você decorar:

Desenvolver um software comercial grande em qualquer linguagem sem DP: Você vai ser visto como o Sadan Russein, e todos vão querer te matar quando a porcaria da aplicação der um problema bem na hora da apresentação. Fuja de casa, senão vao queima-lo vivo la dentro. Se voce fugir, só a sua casa será queimada.

Desenvolver um softrware grande com DP: Vão só olhar pra você de forma torta, e alguns até que vão gostar de você.

Essa é a diferença básica. DECORE!

Livro bom: Head first! Design Patterns!

[]'s

fantomas

Oi vimieiro,

Na minha opinião as resposta para sua pergunta são estas:

R:
a) Poderia dizer que D.P são soluções recorrentes para problemas recorrentes que foram catalogados.
b) Aplica-se em seu projeto em pontos onde vc concluir que é a solução mais adequada.

R: Sim, em linguagens OO ex: C++, Java, Pascal etc…
Acredito que em linguagens procedurais também deva ter D.P mas a idéia tomou maior relevancia com a maior popularização das linguagens OO.

R: Um dos lugares é aqui neste forum. Outros lugares: Internet, Livros (tem vários), amigos mais experientes na àrea e estudando o código de outros projetos.

R: Esta questão é curiosa…alguma coisa vc deveria ter entendido (15 anos ralando na àrea), pode ser uma questão de paradigma. Qual era a linguagem que vc esta utilizando antes de se envolver com a tecnologia Java?


Eu preciso decorar ? tem como compreender sem decorar ?

R: Não precisa decorar aliás o indicado é que vc não decore mas compreenda e aprimore a sua percepção para quando vc se deparar com um problema vc poder indicar um padrão de solução ou uma variação deste padrão para tal problema.

[]'s

leofernandesmo

Marcio Duran:

Decorator esta relacionado a comportamento em tier presentation ou melhor dizendo comportamento de tela, o que sugere Design Patterns de Criação.
[size=18]; )[/size]

Aonde vc viu que Decorator é isso ??

Leozin

Você é o mesmo cara que falou que SOA = Serviço Orientado a Arquitetura?

T

OBS: Leozinh -> auhauhauhauah

continuando… Na minha opinião acredito que outro dos grandes motivos para utilizar design patterns é o fato de poder utilizar uma linguagem comum na equipe para boas práticas de projeto… Acho muito importante…

sergiotaborda

Padrões são uma das coisas que os humanos conseguem entender e que o resto dos animais e máquinas tem muita dificuldade.
Aliás a maioria das doenças mentais estão relacionadas à falta de entendimento de padrões. Então sim, são importantes.

Padrões de Projeto (Design Patterns : padrões de desenho) são tão importantes como a Matemática.
Vc não conta quando é 40x100 somando 40 vezes 1000 ou 1000 vezes quarenta. Vc simplesmente calcula quando é o resultado. Então, da mesma forma que a matemática os padrões dão-lhe caminhos rápidos de chegar em um objetivo.

Por outro lado, assim como a matemática eles fornecem uma linguagem comum. Se vc disse “Factory” outra pessoa conhecendo padrões entendo o que vc quer dizer sem que vc explica mais nada. Melhor, ela sabe como implementar isso em codigo.
Como a matemática se aplica em muitos campos, também os padrões se aplicam em muitos campos e dentro da informática em muitas linguagens.
Padrão é um conceito genérico que se aplica em muitos campos. A ideia original de catelogar os padrões foi de um arquiteto ( de casas, não se software) o Christopher Alexander. É claro que ele catalogou os que interessavam na arquitura. Em software vc catalogo os que interessam em desenvolvimento de software.

Um padrão não se caracteriza pela sua implementação, logo pode ser implementado em diferentes linguagens. Em particular falamos das orientadas a objetos onde o catalogo de padrões é maior e mais util.

informação sobre padrões pode ser conseguida em vários lugares. Digite “design patterns” no google e veja por si mesmo.
Em relação a livros o mais famoso é dos quatro caras que pegaram a ideia do Christopher Alexander sobre catelogar padrões e a aplicarama padrões de OO em C++. Este livro é conhecido como GoF : Gang of Four (gang dos quatro) por causa dos 4 autores do livro. O nome real do livro é Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2)

Depois a ideia foi adaptada a outras linguagens especialmente o Java. Toda a API java é guiada por padrões.
Tal como em matemática quando mais vc sabe sobre ela mais facil é chegar em um resultado e entender os calculos de outrem. aqui, quanto mais souber sobe padrões mais facil é entender o código de outras pessoas e mais facil é escrever código que outros entendam. Em java novos padrões (alémd dos do GoF) foram identificados e catalogados na era J2EE. Ele catalogo é o Core J2EE Patterns

Um novo tipo de padrões foram introduzidos por Martin Fowler no seu livro Patterns of Enterprise Application Architecture.
Aqui abordam-se padrões diferentes dos catálogos anteriores para ajudar em aplicações coorporativas. A metodologia DDD tb popularizou o uso de padrões especificos, alguns baseados no trabalho de Fowler.

Alguns nomes de padrões têm significados diferentes conforme o catalogo em que os ler. Por exemplo Value Object é uma coisa para Fowler e outra para o Core J2EE Patterns 1ª edição. Ao longo do tempo os padrões tiveram os seus nomes alterados para diminuir a confusão.

Existem ainda padrões menos conhecidos e menos catalogados mas também existentes como Fast Lane Reader , Shared Objet ou HashDTO por exemplo.

Padrões de Desenho (aka Projeto) são baseados em princípios de Orientação a Objetos em particular Encasuplamento, Inversão de Controle e sobretudo Separação de Responsabilidade. Estas coisas são como aximoas da matemática. Deles se pode derivar todo e cada um dos padrões.

Decorar nunca leva a nada, mas em uma primeiro momento pode ajudar. Saber o que é um Factory, um Singleton um DAO um Repositorio, um Transfer Object
ou um Iterator pode ajudá-lo a compreender do que os colegas estão falando e a entender melhor a documentação das API Java que normalmente são baseadas nisso.

Decorar que codigo este tipo de coisas gera é um passo. Mas a longo prazo não é suficiente. Se vc não entender os principios por detrás vc vai começar a misturar tudo e a confundir uns com os outros ( por exemplo confundir Singleton com Shared Object é muito comum. As pessoas tendem a chamar o Shared Object de Singleton porque não conhecem o padrão Shared Object - porque é menos popular - e depois têm dificuldade em entender o verdadeiro conceito do singleton - que na prática raramente é utilizado de verdade). Enfim, entender sempre é melhor e para ser um bom programador e desenvolvedor vc precisa entender.

Procure ler na net ou nos livros sobre os padrões. Use esse material como uma enciclopédia - leia uma vez para saber o que contem e depois procure remissivamente quando necessário.

Vc pode programar sem saber padrões , se vc seguir as regras OO vc provavelmente já os está usando sem saber que está.
Se vc programa de uma forma ad hoc vc vai ganhar sabendo padrões para lhe dar mais estrutura.

Vc pode ser um programador sem saber padrões, mas dificilmente vc será um bom desenvolvedor sem os saber.

Marcio_Duran

The Decorator pattern adds responsibilities to an object dynamically, without changing its interface. The Decorator pattern acts as a wrapper because it implements the original interface, adds functionality, and delegates work to the original object. The Architectural Discovery algorithm identifies this pattern as consisting of two classes: Decorator and the wrapped Component.

[size=18]; )[/size], to vendo que vou ter que ficar atento com as criticas agora !!!

leofernandesmo

Marcio Duran:
leofernandesmo:

Aonde vc viu que Decorator é isso ??

The Decorator pattern adds responsibilities to an object dynamically, without changing its interface. The Decorator pattern acts as a wrapper because it implements the original interface, adds functionality, and delegates work to the original object. The Architectural Discovery algorithm identifies this pattern as consisting of two classes: Decorator and the wrapped Component.

[size=18]; )[/size], to vendo que vou ter que ficar atento com as criticas agora !!!

Vc só pode está brincando…ou melhor vc sempre está brincando.
Desculpe, mas eu não vou nem responder.

leofernandesmo

Marcio Duran:

Decorator esta relacionado a comportamento em tier presentation ou melhor dizendo comportamento de tela, o que sugere Design Patterns de Criação.
[size=18]; )[/size]

Falando Sério…
Um cara novo q vê uma resposta dessa no fórum pode até acreditar.
Brincadeira tem hora.

sergiotaborda

leofernandesmo:
Marcio Duran:
leofernandesmo:

Aonde vc viu que Decorator é isso ??

The Decorator pattern adds responsibilities to an object dynamically, without changing its interface. The Decorator pattern acts as a wrapper because it implements the original interface, adds functionality, and delegates work to the original object. The Architectural Discovery algorithm identifies this pattern as consisting of two classes: Decorator and the wrapped Component.

[size=18]; )[/size], to vendo que vou ter que ficar atento com as criticas agora !!!

Vc só pode está brincando…ou melhor vc sempre está brincando.
Desculpe, mas eu não vou nem responder.

Menos preconceito.

Decorador é um tipo especial de Adapter ( aka Wrapper). A diferença é que ele não provoca a alteração de interface, mas consegue aumentar as funcionalidades. Ele é associado ao padrão Visitor ( e algumas vezes confundido com ele).
“interface” aqui não é a GUI é o contrato das classes, i.e. o conjunto de membros públicos da classe ( que pode ser implementado, ou não, usando um tipo “interface” do Java). Ou seja, o padrão Decorador não tem nada a ver com tier (camada/andar/nodo) de apresentação.

Mas acho que o Marcio entendeu isso.

Marcio_Duran

:idea: Concordo, não fui um didático e atropelei conceitos…

Marcio_Duran

Certo eu misturei e as estações foi mau !!!, mas ficou compreendido…

[size=18]; )[/size]

M

peczenyj:
Simples: um dia os programadores viram que alguns problemas eles resolviam de forma parecida, ai resolveram dar nomes a essas formas.

Os padrões classicos surgiram, se não me engano, no livro da “gangue dos 4”, que são os padrões GOF. Hoje em dia tem padrão pra qq coisa, então vale a pena estudar para ver soluções classicas ou não de problemas que são no minimo comuns.

Sua definição de Design Patterns foi brilhante! Mas não foram os programadores quem chegaram a esta conclusão! O conceito de Design Patherns foi criado pelo arquiteto Christopher Alexander (http://pt.wikipedia.org/wiki/Christopher_Alexander) na década de 70.
Há alguma coisa sobre isto em http://pt.wikipedia.org/wiki/Design_Patterns.
Espero ter sido útil a todos!
Shalom!

carlosass

Vimeiro,

Não é preciso decorar. Uma boa forma de ir entendendo é na prática. Minha sugestão é você criar um programinha simples mesmo, um cadastro básico por exemplo e com seus estudos de DP tentar embutir alguns padrões no seu projeto.

Também venho de outras linguagens e isso me ajudou muito.

Aproveitando, dê uma olhada em refactoring também !!!

[ ]'s

Carlos André

leofernandesmo

Eu fui preconceituoso?

Desculpe então se eu ofendi você(Marcio Duran). Achei realmente que vc estava brincando.
Por afirmar “com tanta certeza”(pois enfatizou em negrito) uma coisa que estava totalmente errada.

Marcio_Duran

leofernandesmo:
sergiotaborda:

Menos preconceito.

Eu fui preconceituoso?

Desculpe então se eu ofendi você(Marcio Duran). Achei realmente que vc estava brincando.
Por afirmar “com tanta certeza”(pois enfatizou em negrito) uma coisa que estava totalmente errada.


O que coloquei em Inglês e negritei, tirei do Site da IBM

The Design patterns category contains design patterns that show some of the classic Gang of Four patterns

:arrow: http://publib.boulder.ibm.com/infocenter/rtnlhelp/v6r0m0/index.jsp?topic=/com.ibm.r2a.archdisc.doc/topics/rdesignpatterns.html

[size=18]; )[/size]

V

Nossa negada valeu mesmo !!!

Eu tô ralando com JAVA/JS e vou ter que ralar neste DP !!!

Putz, mas tô procurando emprego e preciso destes conceitos !

Vou procurar os livros que me indicaram .

Mto obrigado mesmo

Vimieiro

Emerson_Macedo

Vocabulário meu caro, vocabulário …

Andre_Brito

Design Patterns, esta relacionado a soluções que vão contribuir para melhor implementação no seu projeto:

Eles se indentificam-se, em Criação, Comportamento e Estrutura, se você tiver um bom conhecimento em OO vai identificar-se com esse conceito, com mais facilidade:

Decorator esta relacionado a comportamento em tier presentation ou melhor dizendo comportamento de tela, o que sugere Design Patterns de Criação.

[size=18]; )[/size]

Cara… Eu não sou expert em Patterns, nem quero criticar você nem nada.
Mas que eu saiba (por três, quatro livros) Decorator não tem a ver com isso não. Decorator é você poder decorar outros objetos (adicionar outras funcionalidades) dinamicamente. Se você der uma olhada no livro do Bateman e da mulher dele (o Head First) você vai poder entender muito melhor.
E eles estão catalogados, mas não se classificam nesses três negócios que você falou. É a mesma coisa que falar que existem somente 20 e tantos patterns, que são os que o GoF documentou. Na verdade, segundo Metsker (ou Shalloway), eles catalogaram esses 20 e tanto a mais de 10 anos atrás que pode se extender a outros tipos de patterns. Inclusive, tem um livro que eu acho que é do Metsker, que ele fala em 5 tipos de Patterns e não em 3 e não chega nem perto de citar 20 e poucos.
É só minha opinião…

Ao criador do tópico: aprenda Design Patterns e utilize em tudo o que você puder. Com 2 livros (o Head First e o do GoF) você pode ir longe.

pedroabs

Antes de ler o livro GOF (Gang of Four), leia o livro Head First Design Patterns que é muito mais fácil de entender e gostoso de ler.

Conforme o estudei, criei os exemplos que podem ser baixados:

Criado 23 de julho de 2008
Ultima resposta 10 de fev. de 2014
Respostas 27
Participantes 16