SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Anti-patterns 
Observando diretamente o efeito Dunning-Kruger 
no ecossistema de software
Padrões de projeto 
• Exemplificam boas idéias 
• Dão nomes a estas idéias - facilitando a 
comunicação 
• “objeto que, quando muda, chama um callback 
que outros objetos registraram para serem 
notificados quando algo muda” x “um 
observable” 
• Servem de inspiração (evitando o que vem a seguir)
Os anti-padrões 
• Idéias ruins 
• Implementações ruins 
• Às vezes decorrem do “poder inexpressivo” da 
linguagem 
• Uma vez instalados
A classe biblioteca 
• Às vezes, tudo o que você quer são funções 
simples 
• Algumas linguagens não deixa(va)m você ter 
funções simples 
• Tende a se tornar infinitamente grande, 
recebendo múltiplas implementações de 
funções quase idênticas
O verniz 
• Encapsula outra coisa, sem acrescentar ou 
modificar nenhum comportamento 
• É um vício comum quando se programa em 
torno de objetos persistentes 
• Invariavelmente associado ao
Controlador de uma coisa só 
• É a classe que implementa os métodos que 
deveriam estar na classe verniz 
• Nunca poderia ser usada com uma outra classe 
verniz porque os métodos (pelo menos alguns 
deles) implementam comportamento específico 
daquele tipo de entidade 
• A classe verniz não pode (nem deve, porque 
todas as regras estão no controlador) ser usada 
sozinha
Valores mágicos 
• Um misto de referência externa e enum 
• Às vezes é uma referência externa, em outras, 
um enum
if (campaign_id === -1) { 
do_something_different(); 
} else { 
act_normally(); 
}
if (campaign_id === -1) { 
do_something_different(); 
} else if (campaign_id == -2) { 
do_something_else_different(); 
} else { 
act_normally(); 
}
if (campaign_id === -1) { 
do_something_different(); 
} else if (campaign_id == -2 || 
campaign_id <= -10) { 
do_something_else_different(); 
} else { 
act_normally(); 
}
if (campaign_id === GLOBAL) { 
do_something_different(); 
} else if (campaign_id == OTHER || 
campaign_id <= DIFFERENT) { 
do_something_else_different(); 
} else { 
act_normally(); 
}
O que fazer? 
• Catalogar 
• http://c2.com/cgi/wiki?AntiPatternsCatalog 
• http://thedailywtf.com 
• É sério
about.me/rbanffy

Mais conteúdo relacionado

Mais procurados

Java Básico :: Modificadores de acesso
Java Básico :: Modificadores de acessoJava Básico :: Modificadores de acesso
Java Básico :: Modificadores de acessoWesley R. Bezerra
 
POO - Aula 06 - Modificadores de Acesso
POO - Aula 06 - Modificadores de AcessoPOO - Aula 06 - Modificadores de Acesso
POO - Aula 06 - Modificadores de AcessoFelipe J. R. Vieira
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetosRafael Pinheiro
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 

Mais procurados (7)

Flash ActionScript 3
Flash ActionScript 3Flash ActionScript 3
Flash ActionScript 3
 
Java Básico :: Modificadores de acesso
Java Básico :: Modificadores de acessoJava Básico :: Modificadores de acesso
Java Básico :: Modificadores de acesso
 
Padrões-07 - Padrões Criacionais
Padrões-07 - Padrões CriacionaisPadrões-07 - Padrões Criacionais
Padrões-07 - Padrões Criacionais
 
POO - Aula 06 - Modificadores de Acesso
POO - Aula 06 - Modificadores de AcessoPOO - Aula 06 - Modificadores de Acesso
POO - Aula 06 - Modificadores de Acesso
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetos
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
padrao de projeto0
padrao de projeto0padrao de projeto0
padrao de projeto0
 

Destaque

Destaque (8)

Django para infográficos
Django para infográficosDjango para infográficos
Django para infográficos
 
Da persistência de idéias ruins
Da persistência de idéias ruinsDa persistência de idéias ruins
Da persistência de idéias ruins
 
Zope
ZopeZope
Zope
 
CVS
CVSCVS
CVS
 
Lessons learned after 190M lessons served
Lessons learned after 190M lessons servedLessons learned after 190M lessons served
Lessons learned after 190M lessons served
 
Ganhando dinheiro com software livre
Ganhando dinheiro com software livreGanhando dinheiro com software livre
Ganhando dinheiro com software livre
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
TDD with Python and App Engine
TDD with Python and App EngineTDD with Python and App Engine
TDD with Python and App Engine
 

Semelhante a Observando anti-padrões no ecossistema de software

Semelhante a Observando anti-padrões no ecossistema de software (20)

Siga a doutrina certa
Siga a doutrina certaSiga a doutrina certa
Siga a doutrina certa
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Seminario sma,abms e netlogo
Seminario   sma,abms e netlogoSeminario   sma,abms e netlogo
Seminario sma,abms e netlogo
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
Cap10
Cap10Cap10
Cap10
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
TWP35 Revisão Funções
TWP35 Revisão FunçõesTWP35 Revisão Funções
TWP35 Revisão Funções
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Aprendizado de máquina
Aprendizado de máquinaAprendizado de máquina
Aprendizado de máquina
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmine
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 

Mais de Ricardo Bánffy

Continuous testing of a terminal font
Continuous testing of a terminal fontContinuous testing of a terminal font
Continuous testing of a terminal fontRicardo Bánffy
 
Monitoring and automation
Monitoring and automationMonitoring and automation
Monitoring and automationRicardo Bánffy
 
Measure everything you can
Measure everything you canMeasure everything you can
Measure everything you canRicardo Bánffy
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App EngineRicardo Bánffy
 
Boredom comes to_those_who_wait
Boredom comes to_those_who_waitBoredom comes to_those_who_wait
Boredom comes to_those_who_waitRicardo Bánffy
 
Quem espera sempre cansa
Quem espera sempre cansaQuem espera sempre cansa
Quem espera sempre cansaRicardo Bánffy
 
Faça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZFaça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZRicardo Bánffy
 

Mais de Ricardo Bánffy (7)

Continuous testing of a terminal font
Continuous testing of a terminal fontContinuous testing of a terminal font
Continuous testing of a terminal font
 
Monitoring and automation
Monitoring and automationMonitoring and automation
Monitoring and automation
 
Measure everything you can
Measure everything you canMeasure everything you can
Measure everything you can
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App Engine
 
Boredom comes to_those_who_wait
Boredom comes to_those_who_waitBoredom comes to_those_who_wait
Boredom comes to_those_who_wait
 
Quem espera sempre cansa
Quem espera sempre cansaQuem espera sempre cansa
Quem espera sempre cansa
 
Faça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZFaça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZ
 

Observando anti-padrões no ecossistema de software

  • 1. Anti-patterns Observando diretamente o efeito Dunning-Kruger no ecossistema de software
  • 2. Padrões de projeto • Exemplificam boas idéias • Dão nomes a estas idéias - facilitando a comunicação • “objeto que, quando muda, chama um callback que outros objetos registraram para serem notificados quando algo muda” x “um observable” • Servem de inspiração (evitando o que vem a seguir)
  • 3.
  • 4. Os anti-padrões • Idéias ruins • Implementações ruins • Às vezes decorrem do “poder inexpressivo” da linguagem • Uma vez instalados
  • 5.
  • 6. A classe biblioteca • Às vezes, tudo o que você quer são funções simples • Algumas linguagens não deixa(va)m você ter funções simples • Tende a se tornar infinitamente grande, recebendo múltiplas implementações de funções quase idênticas
  • 7.
  • 8. O verniz • Encapsula outra coisa, sem acrescentar ou modificar nenhum comportamento • É um vício comum quando se programa em torno de objetos persistentes • Invariavelmente associado ao
  • 9.
  • 10. Controlador de uma coisa só • É a classe que implementa os métodos que deveriam estar na classe verniz • Nunca poderia ser usada com uma outra classe verniz porque os métodos (pelo menos alguns deles) implementam comportamento específico daquele tipo de entidade • A classe verniz não pode (nem deve, porque todas as regras estão no controlador) ser usada sozinha
  • 11.
  • 12. Valores mágicos • Um misto de referência externa e enum • Às vezes é uma referência externa, em outras, um enum
  • 13.
  • 14. if (campaign_id === -1) { do_something_different(); } else { act_normally(); }
  • 15.
  • 16. if (campaign_id === -1) { do_something_different(); } else if (campaign_id == -2) { do_something_else_different(); } else { act_normally(); }
  • 17.
  • 18. if (campaign_id === -1) { do_something_different(); } else if (campaign_id == -2 || campaign_id <= -10) { do_something_else_different(); } else { act_normally(); }
  • 19.
  • 20. if (campaign_id === GLOBAL) { do_something_different(); } else if (campaign_id == OTHER || campaign_id <= DIFFERENT) { do_something_else_different(); } else { act_normally(); }
  • 21.
  • 22. O que fazer? • Catalogar • http://c2.com/cgi/wiki?AntiPatternsCatalog • http://thedailywtf.com • É sério