Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br                 Code Smells
http://www.slideshare.net/rodrigobranas
@rodrigobranas  rodrigo.branas@gmail.com http://www.agilecode.com.brFormação AcadêmicaCiências da Computação – UFSCGerenci...
Rodrigo Branas – rodrigo.branas@gmail.com10 anos de experiência na plataforma Java1000 horas em sala de aulaMais de 50 pal...
Um smell é um sintoma queocorre dentro do código fonte e que pode ser um indicador de          problemas.
Qual é a relação entre code     smells e defeitos?
Aerodinâmica ou distância da         margem
Técnicas de refactoring        aplicáveis:   Todas relacionadas asimplificação de condicionais        Extrair Método
Comentários no código
Autor do código acaba inserindo comentários para tentar compensar a complexidade ou          nebulosidade do código
Técnicas de refactoring      aplicáveis:    Extrair Método
Se os comentários forem    desnecessários:Simplesmente apague-os.
1.    ...2.    public void transmitirMensagem(String mensagem) {3.      // Criando um envelope para enviar a mensagem4.   ...
1.    ...2.    public void transmitirMensagem(String mensagem) {3.4.     Envelope envelope = new Envelope();5.6.     envel...
1.   ...2.   public void transmitirMensagem(String mensagem) {3.     Envelope envelope = new Envelope();4.     envelope.se...
Método longo
Qual é o tamanho ideal?
Sempre deve ser o menor        possível
Técnicas de refactoring      aplicáveis:    Extrair Método
Classes grandes
Por que as classes crescem          tanto?
Coesão baixa
Se a sua classe possui muitos métodos longos, resolva um   problema de cada vez.
Classes Utilitárias
Técnicas de refactoring      aplicáveis:    Extrair Classe   Extrair Subclasse    Mover Método
Longa lista de parâmetros
Qual é o número ideal deparâmetros de um método?
Técnicas de refactoring          aplicáveis:Substituir Parâmetro por Método    Preservar Objeto Inteiro  Introduzir Objeto...
Código Duplicado
Técnicas de refactoring        aplicáveis:      Extrair Método       Extrair ClasseSubir Método na HierarquiaIntroduzir Te...
Grupos de Dados
Existem alguns dados que   andam sempre juntos,         agrupados.É comum observar esses dados andando juntos na forma de ...
1.   ...2.   public Extrato emitirExtrato(Date inicio, Date fim);3.   public double calcularJurosPeriodo(Date inicio, Date...
Técnicas de refactoring        aplicáveis:       Extrair ClasseIntroduzir Objeto Parâmetro Preservar o Objeto Inteiro
Comandos Switch
Comandos switch tendem a serprocedurais e a se repetirem em  diversas partes do software. Ao se deparar com um comando  sw...
Técnicas de refactoring          aplicáveis:  Substituir Enumeração pelo   Padrão State ou StrategySubstituir Comando Cond...
Generalidade Especulativa
“Eu acho que vamos precisar      disso algum dia!”
Excesso de complexidade para  tratar casos que ainda não            existem.
Técnicas de refactoring      aplicáveis:Condensar Hierarquia  Internalizar Classe Remover Parâmetro  Renomear Método
Cadeias de Mensagens
Um cliente pede algo a umobjeto, que pede a outro objeto,que pede a outro objeto e assim           por diante.
1.   ...2.   if (cliente.getCarteira().getCartao().verificarValidade()) {3.     cliente.getCarteira().getCartao().comprar(...
Lei de Demeter
Não fale com estranhos
Técnicas de refactoring      aplicáveis:  Ocultar Delegação
Code Smells
Code Smells
Code Smells
Próximos SlideShares
Carregando em…5
×

Code Smells

6.516 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
6.516
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5.146
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Code Smells

  1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Code Smells
  2. 2. http://www.slideshare.net/rodrigobranas
  3. 3. @rodrigobranas rodrigo.branas@gmail.com http://www.agilecode.com.brFormação AcadêmicaCiências da Computação – UFSCGerenciamento de Projetos - FGVCertificaçõesSCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
  4. 4. Rodrigo Branas – rodrigo.branas@gmail.com10 anos de experiência na plataforma Java1000 horas em sala de aulaMais de 50 palestras em eventosLíder da área de desenvolvimento na GenneraAutor da revista Java MagazinePalestranteInstrutor da Academia Java e Agile da GlobalcodeCriador dos treinamentos de Clean Code, Selenium eMaven da Agile CodeTrabalhou com as empresas: EDS, HP, GM, Citibank,OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed,Suntech, Vale do Rio Doce, Senai, NET.
  5. 5. Um smell é um sintoma queocorre dentro do código fonte e que pode ser um indicador de problemas.
  6. 6. Qual é a relação entre code smells e defeitos?
  7. 7. Aerodinâmica ou distância da margem
  8. 8. Técnicas de refactoring aplicáveis: Todas relacionadas asimplificação de condicionais Extrair Método
  9. 9. Comentários no código
  10. 10. Autor do código acaba inserindo comentários para tentar compensar a complexidade ou nebulosidade do código
  11. 11. Técnicas de refactoring aplicáveis: Extrair Método
  12. 12. Se os comentários forem desnecessários:Simplesmente apague-os.
  13. 13. 1. ...2. public void transmitirMensagem(String mensagem) {3. // Criando um envelope para enviar a mensagem4. Envelope envelope = new Envelope();5. // Definindo a mensagem no envelope6. envelope.setMensagem(mensagem);7. // Enviando o envelope8. this.sendEnvelope(envelope);9. }10. ...
  14. 14. 1. ...2. public void transmitirMensagem(String mensagem) {3.4. Envelope envelope = new Envelope();5.6. envelope.setMensagem(mensagem);7.8. this.sendEnvelope(envelope);9. }10. ...
  15. 15. 1. ...2. public void transmitirMensagem(String mensagem) {3. Envelope envelope = new Envelope();4. envelope.setMensagem(mensagem);5. this.sendEnvelope(envelope);6. }7. ...
  16. 16. Método longo
  17. 17. Qual é o tamanho ideal?
  18. 18. Sempre deve ser o menor possível
  19. 19. Técnicas de refactoring aplicáveis: Extrair Método
  20. 20. Classes grandes
  21. 21. Por que as classes crescem tanto?
  22. 22. Coesão baixa
  23. 23. Se a sua classe possui muitos métodos longos, resolva um problema de cada vez.
  24. 24. Classes Utilitárias
  25. 25. Técnicas de refactoring aplicáveis: Extrair Classe Extrair Subclasse Mover Método
  26. 26. Longa lista de parâmetros
  27. 27. Qual é o número ideal deparâmetros de um método?
  28. 28. Técnicas de refactoring aplicáveis:Substituir Parâmetro por Método Preservar Objeto Inteiro Introduzir Objeto Parâmetro
  29. 29. Código Duplicado
  30. 30. Técnicas de refactoring aplicáveis: Extrair Método Extrair ClasseSubir Método na HierarquiaIntroduzir Template Method
  31. 31. Grupos de Dados
  32. 32. Existem alguns dados que andam sempre juntos, agrupados.É comum observar esses dados andando juntos na forma de parâmetros.
  33. 33. 1. ...2. public Extrato emitirExtrato(Date inicio, Date fim);3. public double calcularJurosPeriodo(Date inicio, Date fim);4. public boolean verificarCredito(Date inicio, Date fim);5. ...
  34. 34. Técnicas de refactoring aplicáveis: Extrair ClasseIntroduzir Objeto Parâmetro Preservar o Objeto Inteiro
  35. 35. Comandos Switch
  36. 36. Comandos switch tendem a serprocedurais e a se repetirem em diversas partes do software. Ao se deparar com um comando switch você deve considerar aintrodução de um comportamento mais polimórfico.
  37. 37. Técnicas de refactoring aplicáveis: Substituir Enumeração pelo Padrão State ou StrategySubstituir Comando Condicional por Polimorfismo
  38. 38. Generalidade Especulativa
  39. 39. “Eu acho que vamos precisar disso algum dia!”
  40. 40. Excesso de complexidade para tratar casos que ainda não existem.
  41. 41. Técnicas de refactoring aplicáveis:Condensar Hierarquia Internalizar Classe Remover Parâmetro Renomear Método
  42. 42. Cadeias de Mensagens
  43. 43. Um cliente pede algo a umobjeto, que pede a outro objeto,que pede a outro objeto e assim por diante.
  44. 44. 1. ...2. if (cliente.getCarteira().getCartao().verificarValidade()) {3. cliente.getCarteira().getCartao().comprar(valor);4. }5. ...
  45. 45. Lei de Demeter
  46. 46. Não fale com estranhos
  47. 47. Técnicas de refactoring aplicáveis: Ocultar Delegação

×