SlideShare uma empresa Scribd logo
1 de 22
Maicon Heck
Desmistificando
Design Patterns
QUEM SOU?
Desenvolvedor .NET há 10 anos.
Full-Stack na CWI Software.
“Praticando refactoring cheguei à conclusão de que qualidade se obtém com código
limpo e testado, e produtividade se obtém com reuso.”
linkedin.com/in/maiconheck
twitter.com/maicon_heck
github.com/maiconheck
medium.com/@maiconheck
Conteúdo
▪ OOP e a síndrome do “isso eu já sei” (o problema e a teoria)
▪ Estratégia para entender e colocar em prática os Design Patterns
▪ Exemplos de implementações de projetos reais
Programação
orientada a objetos e
a síndrome do "isso
eu já sei"
Irônico: Se o dev afirma que já sabe OOP,
porque temos tanto código ad-hoc?
Mamífero
Falar()
Pessoa Cão Gato
1º. Sem conexão com software.
2º. Gera a falsa percepção de que é simples assim, logo não se
estuda.
Falar(); // MiauFalar(); // AoaoFalar(); // Olá
Basta olhar
Para o mundo
Real!
Sério?
Advertência do Gof
1º Parágrafo:
Gamma, Helm, Johnson, Vlissides (1994)
Os catálogos
Categorias e
características
1. Creational
2. Structural
3. Behavioral
● Intent
● Motivation
● Applicability
● Structure
● Participants
● Collaborations
● Consequences
● Implementation
● Related Patterns
Os mais frequentes
1. Factory Method
2. Abstract Factory
3. Singleton
4. Facade
5. Adapter
6. Decorator
7. Strategy
8. Command
9. Chain of Responsibility
1. Factory Method
2. Abstract Factory
3. Singleton
4. Facade
5. Adapter
6. Decorator
7. Strategy
8. Command
9. Chain of Responsibility
B
S
C
Caso de Uso Conciliação
Bancária
15 categorias de lançamento diferentes, onde 8 foram agrupadas
em ProdutoNaoIdentificado = 7 rotinas
Exemplo do mundo real
Strategy
Receita de bolo: INDENTIFICAR -> ENTENDER -> APLICAR, se REPETE em todos Design Patterns
Gamma, Helm, Johnson, Vlissides (1994)
Strategy
Gamma, Helm, Johnson, Vlissides (1994)
Strategy
(CreditoCobranca, PagamentoEletronico, ProdutoDespesa,
ProdutoNaoIdentificado (8), ProdutoRendimento, ProdutoResgate, Tributo)
Gamma, Helm, Johnson, Vlissides (1994)
“
Factory Method
Factory Method + Abstract Factory?
Gamma, Helm, Johnson, Vlissides (1994)
Factory Method
Gamma, Helm, Johnson, Vlissides (1994)
Abstract Factory
Exemplo do mundo real
Gamma, Helm, Johnson, Vlissides (1994)
Abstract Factory
Gamma, Helm, Johnson, Vlissides (1994)
Abstract Factory
(ICommandResultFactory)
(BasicCommandResultFactory,
DefaultCommandResultFactory,
ThirdPartyCommandResultFactory)
(ICommandResult)
(BasicCommandResult, DefaultCommandResult, ThirdPartyCommandResult)
Gamma, Helm, Johnson, Vlissides (1994)
Abstract Factory
Gamma, Helm, Johnson, Vlissides (1994)
“
Obrigado!
Perguntas?
linkedin.com/in/maiconheck
medium.com/@maiconheck
twitter.com/maicon_heck
github.com/maiconheck

Mais conteúdo relacionado

Mais procurados

TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?tdc-globalcode
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilBruno Eustáquio
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPJessyka Lage
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Raphael Paiva
 
Design de Interação - SECOMP 2011 - Segundo dia
Design de Interação - SECOMP 2011 - Segundo diaDesign de Interação - SECOMP 2011 - Segundo dia
Design de Interação - SECOMP 2011 - Segundo diaPaulo Cesar
 
O que é Desenvolvimento de Aplicações
O que é Desenvolvimento de AplicaçõesO que é Desenvolvimento de Aplicações
O que é Desenvolvimento de AplicaçõesProfThiagoAAlves
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Adolfo Neto
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendiVinta Software
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
Mercado em computação
Mercado em computaçãoMercado em computação
Mercado em computaçãoFelipe Zampa
 
Workshop de Prototipação (microjam)
Workshop de Prototipação (microjam)Workshop de Prototipação (microjam)
Workshop de Prototipação (microjam)Bruno Campagnolo
 

Mais procurados (20)

TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
Design de Interação - SECOMP 2011 - Segundo dia
Design de Interação - SECOMP 2011 - Segundo diaDesign de Interação - SECOMP 2011 - Segundo dia
Design de Interação - SECOMP 2011 - Segundo dia
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
O que é Desenvolvimento de Aplicações
O que é Desenvolvimento de AplicaçõesO que é Desenvolvimento de Aplicações
O que é Desenvolvimento de Aplicações
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
 
Pep 8
Pep 8Pep 8
Pep 8
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendi
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
Mercado em computação
Mercado em computaçãoMercado em computação
Mercado em computação
 
A saga do desenvolvedor java
A saga do desenvolvedor javaA saga do desenvolvedor java
A saga do desenvolvedor java
 
Workshop de Prototipação (microjam)
Workshop de Prototipação (microjam)Workshop de Prototipação (microjam)
Workshop de Prototipação (microjam)
 

Semelhante a Desmistificando Design Patterns

Agile br2011 lucabastos-prog10x-noiteagilcaelum
Agile br2011 lucabastos-prog10x-noiteagilcaelumAgile br2011 lucabastos-prog10x-noiteagilcaelum
Agile br2011 lucabastos-prog10x-noiteagilcaelumLuca Bastos
 
Agile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10xAgile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10xLuca Bastos
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariTaller Negócio Digitais
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Felipe Pimentel
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisLorival Smolski Chapuis
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
MVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFxMVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFxDouglas Aguiar
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agiledayCarlos Felippe Cardoso
 
MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#Gustavo Bellini Bigardi
 
Palestra - Profissão: Desenvolvedor
Palestra - Profissão: DesenvolvedorPalestra - Profissão: Desenvolvedor
Palestra - Profissão: DesenvolvedorDaniel Brandão
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com pythonBruno Rocha
 
Novas Abordagens no Ensino da Programação - Ensino Básico
Novas Abordagens no Ensino da Programação - Ensino BásicoNovas Abordagens no Ensino da Programação - Ensino Básico
Novas Abordagens no Ensino da Programação - Ensino BásicoUniversidade de Lisboa
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPLeonardo Bastos
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Lidando com Equipes de Desenvolvimento
Lidando com Equipes de DesenvolvimentoLidando com Equipes de Desenvolvimento
Lidando com Equipes de Desenvolvimento4Soft
 

Semelhante a Desmistificando Design Patterns (20)

Agile br2011 lucabastos-prog10x-noiteagilcaelum
Agile br2011 lucabastos-prog10x-noiteagilcaelumAgile br2011 lucabastos-prog10x-noiteagilcaelum
Agile br2011 lucabastos-prog10x-noiteagilcaelum
 
Agile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10xAgile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10x
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
 
Começando errado com php
Começando errado com phpComeçando errado com php
Começando errado com php
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
MVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFxMVCSummit - DDD e ASP NET MVC na prática com o LiteFx
MVCSummit - DDD e ASP NET MVC na prática com o LiteFx
 
Coding Dojo #GuruPI
Coding Dojo #GuruPICoding Dojo #GuruPI
Coding Dojo #GuruPI
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#
 
Palestra - Profissão: Desenvolvedor
Palestra - Profissão: DesenvolvedorPalestra - Profissão: Desenvolvedor
Palestra - Profissão: Desenvolvedor
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
Novas Abordagens no Ensino da Programação - Ensino Básico
Novas Abordagens no Ensino da Programação - Ensino BásicoNovas Abordagens no Ensino da Programação - Ensino Básico
Novas Abordagens no Ensino da Programação - Ensino Básico
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOP
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Lidando com Equipes de Desenvolvimento
Lidando com Equipes de DesenvolvimentoLidando com Equipes de Desenvolvimento
Lidando com Equipes de Desenvolvimento
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
 

Desmistificando Design Patterns

Notas do Editor

  1. Todo mundo sabe que aplicar design patterns para resolver problemas reais melhora, significativamente a qualidade do código. Mas por algum motivo design patterns é uma espécie de tabú.
  2. Quando o tema da conversa é OOP o dev enche o peito pra dizer isso eu já sei, isso é básico, trivial.
  3. Será que são os prazos? Eu acho que muitos sabem apenas superficialmente. Conhecem os conceitos de herança, abstração, encapsulamento e polimorfismo. Agregação / Composição, Associação, Delegação. Mas não conseguem colocar na prática. Porque muitos aprenderam OOP com exemplos acadêmicos ruins: Herança (especialização / generalização): Tenho uma classe base mamífero, e pessoa, gato e cachorro herdam de mamífero trazendo dele seus atributos e operações em comum. E Polimorfismo é o método Falar(); que assume diversas formas. Encapsulamento: Eu não preciso entender do sistema de ignição, eu só preciso saber colocar a chave e girar. E por último vem o clássico: “Basta olhar para o mundo real” A comparação com o mundo real é ilusória. Essa analogia é uma abstração. Exemplo da modelagem do cálculo de imposto de renda no mundo real com OOP.
  4. O primeiro filtro que a gente deve aplicar para começar a desfazer essa confusão em torno dos DPs, é o filtro por catálogos. Porque? Porque são muitos DPs, só o GoF tem 23. Cada catálogo é formados por uma série de DPs para a solução de problemas em comum. [Citar os 3], o Gof para problemas de design OO, ... Existe inclusive esse catálogo “Analysis Patterns” onde o Martin Fowler reuniu uma série de DPs de análise de domínios comuns. Faz sentido porquê, por exemplo, existem N formas de modelar um módulo de contas a pagar, mas existe uma forma que já foi amplamente usada, testada e documentada e funciona muito bem, e o uso dela vai nos levar ao mesmo resultado confiável e elegante que outros que a utilizaram obtiveram. E esse é o objetivo dos design patterns. A qual catálogo nós vamos recorrer, depende do tipo de problema que nós precisamos resolver. E dentro de cada catálogo nós ainda precisamos escolher o design pattern específico para o problema em questão. E aqui a gente vai filtrar pelo Gof, e eu sugiro começar por ele, porque é fundamental. Foi o primeiro trabalho de DPs em software e é o alicerce fundamental, outros catálogos citam e constrõem em cima dele. Ex.: Aggregate.
  5. O segundo filtro é o de categorias e características. Que na prática significa: entender como funcionam e estão organizados. Nosso filtro por catálogo, reduziu o escopo para 23 DPs para resolver problemas de OO. Mas será que o problema que eu tenho agora, pode ser resolvido por algum deles, se sim, qual deles? Se DPs são formas de resolver problemas, aqui essas são as categorias de problemas que nós temos. Isso já deixa bem mais claro né? Mas do que eles são compostos? … Vejam que os DPs são receitas de bolo. [Intent… Implementation]
  6. [FAZER CONSIDERAÇÃO]: Essa lista é baseada na minha experiência e no senso comum. Portanto isso é relativo. Vai depender do domínio no qual vocês vão estar trabalhando. Por exemplo, se vocês estiverem modelando um editor gráfico composite se encaixa perfeitamente. Editor de texto o flyweight.
  7. 7 rotinas diferentes (fonte de dados, processamento e gravação)
  8. Todo esse passo a passo que eu estou fazendo é para demonstrar esse passo a passo de INDENTIFICAR -> ENTENDER -> APLICAR um desgin pattern. Porque esse processo se repete para todos eles
  9. Explicar como funcionam e a relação entre eles.