SlideShare une entreprise Scribd logo
1  sur  57
Refinamento e boas práticas de
              programação




Luiz Artur Botelho da Silva – labotelho@gmail.com
Pós-gradução Engenharia de Software - FBV
Engenheiro de Sistemas – C.E.S.A.R
Agenda

 Código Limpo;
 Como transformar um código ruim em
  um bom;
 Programação Geral;
Código Limpo
Qual o melhor caminho?
Dificuldades de se ter um
código limpo
  1.   Prazos apertados;
  2.   Pressa para lançar o produto no
       mercado;
  3.   Cronograma extenso.


“Uma bagunça que funciona é melhor
 do que nada.” (Robert C. Martin)
Custo de ter um código
confuso
Solução para produtividade:




Lei de Brooks: "Incluir mais gente em
um projeto atrasado vai atrasá-lo ainda
mais"
O que é código limpo?

“Um código limpo é simples e direto. Ele
 é tão bem legível quanto uma prosa bem
 escrita.“
                Fonte: Grady Booch,
                Autor do livro: Aplicações com design e análise
                orientado a objeto.
O que é código limpo?
 "Além do seu criador, um
 desenvolvedor pode ler e melhorar
 um código limpo.“

                   Fonte: Dave Thomas,
                   fundador da estratégia Eclipse.
Vantagens de ter o código
limpo
1.   Simplicidade;
2.   Clareza;
3.   Flexibilidade;
4.   Fácil manutenção;
5.   Boa performance;
6.   ...
Como se aprende a gerar
código limpo?
Não há uma metodologia especifica.

Solução:
1. Ler vários livros;

2. Aprender com a experiência dos
   outros.
Como transformar um
código ruim em um
bom
Nomes Significativos

   Código Ruim




   Código Bom
Nomes Significativos

   Código Ruim




   Código Bom
Nomes Significativos
   Código Ruim




                  Sugestão: Usar
                  fontes distintas com
                  propósito de realçar
                  mais as diferenças.
Nomes Significativos
   Código Ruim




                  Sugestão: Faça
                  distinção dos nomes.
Nomes Significativos
   Código Ruim




   Código Bom
Funções

 Devem ser pequenas (no máximo 20
  linhas);
 Devem fazer apenas uma coisa por
  função;
 Devem ter poucos parâmetros de
  entrada;
Funções (Vários Parâmetros)
   Código Ruim




   Código Bom
Funções

 Prefira exceções a retorno de códigos
  de erro;
 Evite repetição de código;

 Manter blocos e indentação (no
  máximo em 2 níveis);
Construtores (Vários Parâmetros)

 Uso do padrão construtor telescópio;
 Uso do padrão javaBeans;

 Uso de objeto criador;
Construtores (Vários Parâmetros)
   Código Ruim




Criando uma instância da classe acima:
Uso do padrão construtor
    telescópio
   Código Bom




Criando uma instância da classe acima:
Desvantagens

 O leitor é tentado a entender todos os
  parâmetros;
 Longa seqüência de parâmetros
  digitadas pode causar erros;
Uso do padrão javaBeans
   Código Bom




Criando uma instância da classe acima:
Desvantagens

 Um javaBean pode iniciar já em um
  estado inconsistente;
 O padrão javaBean impossibilita que
  uma classe seja imutável;
Uso de objeto criador
   Código Bom
Uso de objeto criador
   Criando uma instância default de um objeto criador:




   Criando uma instância setando parâmetros opcionais em
    um objeto criador:
Uso de objeto criador

 Garante a consistência dos dados
  conforme o padrão de construtor
  telescópio;
 Garante a legibilidade do padrão
  javaBeans;
Comentários

 Não usar comentários Javadocs para
  métodos privados;
 Evitar comentários excessivos;

 Marcar com comentário ToDo no código
  possíveis pontos de modificação;
Comentários

 Alertar sobre conseqüências;
 Comentários informativos sobre o
  funcionamento da função;
 Evitar comentários redundantes;

 Sempre colocar o comentário junto ao
  código que ele descreve;
Objetos
 Evite a criação de objetos
  desnecessários;
 Prefira primitivas simples a primitivas
  encaixotadas;
 Elimine referências de objetos
  obsoletas;
 Evite finalizadores;
Evite a criação de objetos
    desnecessários;
   Código Ruim




   Código Bom
Evite a criação de objetos
    desnecessários;
   Código Ruim       Código Bom
Evite a criação de objetos
desnecessários;
    Vantagens:
    1.   Reutilização do objeto em outros
         pontos do código;
    2.   Reutilizar um objeto é mais rápido
         que criar um novo;
    Desvantagem:
    1.   Objeto pode nunca está pronto para
         ser coletado;
Diferença entre primitivas
     simples e encaixotadas
   Primitivas simples:          Primitivas encaixotadas:
    1.  Possui apenas os          1.  Possui identidade e seus
        seus valores;                 valores, ou seja, 2
    2.  Mas eficiente;                instancias desse tipo
    3.  Possui apenas                 podem ter o mesmo valor
        valores funcionais;           com instancias diferentes;
        Ex.: int i = 2;           2.  Menos eficiente;
                                  3.  Pode ter tanto valores
                                      funcionais quanto não
                                      funcionais;
                                      Ex.: Integer i = 2; OU
                                           Integer i = null;
Prefira primitivas simples a
    primitivas encaixotadas
   O que acontece com a saída desse
    código?
Prefira primitivas simples a
    primitivas encaixotadas
   Código Ruim




   Código Bom
Quem é mais rápido?

   Código Ruim




   Código Bom
Resposta:

   Mudar Long para long na declaração de
    sum reduz o tempo de execução de 43
    segundos para 6,8 segundos.




                     Máquina AMD Opteron
                     170 dual-core de 2,2
                     GHz e 2 GB de RAM
Elimine referências de
     objetos obsoletas
   Código Ruim
Elimine referências de
     objetos obsoletas
   Código Bom
Atenção!

   Problemas de OutOfMemoryError
    podem ser provocados caso não se
    elimine as referências obsoletas;
Evite finalizadores

   Código Ruim
Evite finalizadores

 Finalizadores são imprevisíveis e com
  isso não se sabe a hora que eles
  serão executados;
 Finalizadores provocam perda de
  desempenho;
Evite finalizadores



                       Conclusão: A inclusão de um
                       finalizador aumenta o tempo para
                       2400 ns, deixando o processo de
                       criação e destruição de objetos
                       430 vezes mais lento.


Máquina AMD Opteron
170 dual-core de 2,2
GHz e 2 GB de RAM
Programação Geral
Programação Geral

 Reduza o escopo de variáveis locais,
  ou seja, declare ela apenas onde for
  usada;
 Prefira loops for a loops while;
Programação Geral

 Evite float e double a respostas
  exatas;
 Cuidado com o desempenho da
  concatenação de strings;
Prefira loops for a loops
    while
   Código Ruim
Prefira loops for a loops
while
   Com loop “for” não há motivo para o uso de
    nomes de variáveis diferentes nos dois
    loops;
   A variável alocada no loop “for” é liberada
    logo após terminar o seu delimitador de
    escopo;

   Obs.: Tanto o loop “for” quanto o loop
    “while” apresentam o mesmo desempenho.
     Fonte: http://stackoverflow.com/questions/1165457/java-for-loop-vs-while-loop-performance-difference
Prefira loops for a loops
      while




Usando o comando “javap” podemos ver que os 2 loops
são convertidos para o mesmo código interpretado pela
JVM.
Cuidado com o desempenho
    da concatenação de strings
   Código Ruim
Cuidado com o desempenho
    da concatenação de strings
   Código Bom
Dúvidas
Referências Bibliográficas

          ROBERT C. MARTIN.
           Código Limpo:
           habilidades práticas do
           Agile Software, Alta
           Books, 2011.
Referências Bibliográficas

           Joshua Bloch. Java
            Efetivo, 2ª Edição, Alta
            Books 2010.

Contenu connexe

Tendances

Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean CodeAndré Leoni
 
Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]Ricardo Silva
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesDavid Robert Camargo de Campos
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETGabriel Schade Cardoso
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHPFernando Chucre
 

Tendances (20)

Clean Code
Clean CodeClean Code
Clean Code
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean Code
 
Clean Code
Clean CodeClean Code
Clean Code
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]Estrutura condicional com Ruby[AULA-2]
Estrutura condicional com Ruby[AULA-2]
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Ruby
RubyRuby
Ruby
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NET
 
Clean code v3
Clean code v3Clean code v3
Clean code v3
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHP
 

Similaire à Refinamento e boas práticas de programação

Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem cJefferson Bessa
 
21-08-12-Introdução a Programação em Java.pdf
21-08-12-Introdução a Programação em Java.pdf21-08-12-Introdução a Programação em Java.pdf
21-08-12-Introdução a Programação em Java.pdfRubenManhia
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixCris Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixCris Fidelix
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangElaine Naomi
 
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Joao Galdino Mello de Souza
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeAdriano Tavares
 

Similaire à Refinamento e boas práticas de programação (20)

Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 
Clean code
Clean codeClean code
Clean code
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
21-08-12-Introdução a Programação em Java.pdf
21-08-12-Introdução a Programação em Java.pdf21-08-12-Introdução a Programação em Java.pdf
21-08-12-Introdução a Programação em Java.pdf
 
Compiladores
CompiladoresCompiladores
Compiladores
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane Fidelix
 
Aula2
Aula2Aula2
Aula2
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Fascículo1java
Fascículo1javaFascículo1java
Fascículo1java
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
 

Plus de Aécio Costa

Android - de usuários a desenvolvedores
Android - de usuários a desenvolvedoresAndroid - de usuários a desenvolvedores
Android - de usuários a desenvolvedoresAécio Costa
 
Desafios e perspectivas para TV Conectada
Desafios e perspectivas para TV ConectadaDesafios e perspectivas para TV Conectada
Desafios e perspectivas para TV ConectadaAécio Costa
 
Facebook api além de meros usuários
Facebook api além de meros usuáriosFacebook api além de meros usuários
Facebook api além de meros usuáriosAécio Costa
 
Google tv desafios e oportunidades na tv conectada
Google tv desafios e oportunidades na tv conectadaGoogle tv desafios e oportunidades na tv conectada
Google tv desafios e oportunidades na tv conectadaAécio Costa
 
Introdução ao Google TV
Introdução ao Google TVIntrodução ao Google TV
Introdução ao Google TVAécio Costa
 
Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Aécio Costa
 
Grails: The search is over
Grails: The search is overGrails: The search is over
Grails: The search is overAécio Costa
 

Plus de Aécio Costa (7)

Android - de usuários a desenvolvedores
Android - de usuários a desenvolvedoresAndroid - de usuários a desenvolvedores
Android - de usuários a desenvolvedores
 
Desafios e perspectivas para TV Conectada
Desafios e perspectivas para TV ConectadaDesafios e perspectivas para TV Conectada
Desafios e perspectivas para TV Conectada
 
Facebook api além de meros usuários
Facebook api além de meros usuáriosFacebook api além de meros usuários
Facebook api além de meros usuários
 
Google tv desafios e oportunidades na tv conectada
Google tv desafios e oportunidades na tv conectadaGoogle tv desafios e oportunidades na tv conectada
Google tv desafios e oportunidades na tv conectada
 
Introdução ao Google TV
Introdução ao Google TVIntrodução ao Google TV
Introdução ao Google TV
 
Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!
 
Grails: The search is over
Grails: The search is overGrails: The search is over
Grails: The search is over
 

Refinamento e boas práticas de programação

  • 1. Refinamento e boas práticas de programação Luiz Artur Botelho da Silva – labotelho@gmail.com Pós-gradução Engenharia de Software - FBV Engenheiro de Sistemas – C.E.S.A.R
  • 2. Agenda  Código Limpo;  Como transformar um código ruim em um bom;  Programação Geral;
  • 4. Qual o melhor caminho?
  • 5. Dificuldades de se ter um código limpo 1. Prazos apertados; 2. Pressa para lançar o produto no mercado; 3. Cronograma extenso. “Uma bagunça que funciona é melhor do que nada.” (Robert C. Martin)
  • 6. Custo de ter um código confuso
  • 7. Solução para produtividade: Lei de Brooks: "Incluir mais gente em um projeto atrasado vai atrasá-lo ainda mais"
  • 8. O que é código limpo? “Um código limpo é simples e direto. Ele é tão bem legível quanto uma prosa bem escrita.“ Fonte: Grady Booch, Autor do livro: Aplicações com design e análise orientado a objeto.
  • 9. O que é código limpo? "Além do seu criador, um desenvolvedor pode ler e melhorar um código limpo.“ Fonte: Dave Thomas, fundador da estratégia Eclipse.
  • 10. Vantagens de ter o código limpo 1. Simplicidade; 2. Clareza; 3. Flexibilidade; 4. Fácil manutenção; 5. Boa performance; 6. ...
  • 11. Como se aprende a gerar código limpo? Não há uma metodologia especifica. Solução: 1. Ler vários livros; 2. Aprender com a experiência dos outros.
  • 12. Como transformar um código ruim em um bom
  • 13. Nomes Significativos  Código Ruim  Código Bom
  • 14. Nomes Significativos  Código Ruim  Código Bom
  • 15. Nomes Significativos  Código Ruim Sugestão: Usar fontes distintas com propósito de realçar mais as diferenças.
  • 16. Nomes Significativos  Código Ruim Sugestão: Faça distinção dos nomes.
  • 17. Nomes Significativos  Código Ruim  Código Bom
  • 18. Funções  Devem ser pequenas (no máximo 20 linhas);  Devem fazer apenas uma coisa por função;  Devem ter poucos parâmetros de entrada;
  • 19. Funções (Vários Parâmetros)  Código Ruim  Código Bom
  • 20. Funções  Prefira exceções a retorno de códigos de erro;  Evite repetição de código;  Manter blocos e indentação (no máximo em 2 níveis);
  • 21. Construtores (Vários Parâmetros)  Uso do padrão construtor telescópio;  Uso do padrão javaBeans;  Uso de objeto criador;
  • 22. Construtores (Vários Parâmetros)  Código Ruim Criando uma instância da classe acima:
  • 23. Uso do padrão construtor telescópio  Código Bom Criando uma instância da classe acima:
  • 24. Desvantagens  O leitor é tentado a entender todos os parâmetros;  Longa seqüência de parâmetros digitadas pode causar erros;
  • 25. Uso do padrão javaBeans  Código Bom Criando uma instância da classe acima:
  • 26. Desvantagens  Um javaBean pode iniciar já em um estado inconsistente;  O padrão javaBean impossibilita que uma classe seja imutável;
  • 27. Uso de objeto criador  Código Bom
  • 28. Uso de objeto criador  Criando uma instância default de um objeto criador:  Criando uma instância setando parâmetros opcionais em um objeto criador:
  • 29. Uso de objeto criador  Garante a consistência dos dados conforme o padrão de construtor telescópio;  Garante a legibilidade do padrão javaBeans;
  • 30. Comentários  Não usar comentários Javadocs para métodos privados;  Evitar comentários excessivos;  Marcar com comentário ToDo no código possíveis pontos de modificação;
  • 31. Comentários  Alertar sobre conseqüências;  Comentários informativos sobre o funcionamento da função;  Evitar comentários redundantes;  Sempre colocar o comentário junto ao código que ele descreve;
  • 32. Objetos  Evite a criação de objetos desnecessários;  Prefira primitivas simples a primitivas encaixotadas;  Elimine referências de objetos obsoletas;  Evite finalizadores;
  • 33. Evite a criação de objetos desnecessários;  Código Ruim  Código Bom
  • 34. Evite a criação de objetos desnecessários;  Código Ruim  Código Bom
  • 35. Evite a criação de objetos desnecessários;  Vantagens: 1. Reutilização do objeto em outros pontos do código; 2. Reutilizar um objeto é mais rápido que criar um novo;  Desvantagem: 1. Objeto pode nunca está pronto para ser coletado;
  • 36. Diferença entre primitivas simples e encaixotadas  Primitivas simples:  Primitivas encaixotadas: 1. Possui apenas os 1. Possui identidade e seus seus valores; valores, ou seja, 2 2. Mas eficiente; instancias desse tipo 3. Possui apenas podem ter o mesmo valor valores funcionais; com instancias diferentes; Ex.: int i = 2; 2. Menos eficiente; 3. Pode ter tanto valores funcionais quanto não funcionais; Ex.: Integer i = 2; OU Integer i = null;
  • 37. Prefira primitivas simples a primitivas encaixotadas  O que acontece com a saída desse código?
  • 38. Prefira primitivas simples a primitivas encaixotadas  Código Ruim  Código Bom
  • 39. Quem é mais rápido?  Código Ruim  Código Bom
  • 40. Resposta:  Mudar Long para long na declaração de sum reduz o tempo de execução de 43 segundos para 6,8 segundos. Máquina AMD Opteron 170 dual-core de 2,2 GHz e 2 GB de RAM
  • 41. Elimine referências de objetos obsoletas  Código Ruim
  • 42. Elimine referências de objetos obsoletas  Código Bom
  • 43. Atenção!  Problemas de OutOfMemoryError podem ser provocados caso não se elimine as referências obsoletas;
  • 44. Evite finalizadores  Código Ruim
  • 45. Evite finalizadores  Finalizadores são imprevisíveis e com isso não se sabe a hora que eles serão executados;  Finalizadores provocam perda de desempenho;
  • 46. Evite finalizadores Conclusão: A inclusão de um finalizador aumenta o tempo para 2400 ns, deixando o processo de criação e destruição de objetos 430 vezes mais lento. Máquina AMD Opteron 170 dual-core de 2,2 GHz e 2 GB de RAM
  • 48. Programação Geral  Reduza o escopo de variáveis locais, ou seja, declare ela apenas onde for usada;  Prefira loops for a loops while;
  • 49. Programação Geral  Evite float e double a respostas exatas;  Cuidado com o desempenho da concatenação de strings;
  • 50. Prefira loops for a loops while  Código Ruim
  • 51. Prefira loops for a loops while  Com loop “for” não há motivo para o uso de nomes de variáveis diferentes nos dois loops;  A variável alocada no loop “for” é liberada logo após terminar o seu delimitador de escopo;  Obs.: Tanto o loop “for” quanto o loop “while” apresentam o mesmo desempenho. Fonte: http://stackoverflow.com/questions/1165457/java-for-loop-vs-while-loop-performance-difference
  • 52. Prefira loops for a loops while Usando o comando “javap” podemos ver que os 2 loops são convertidos para o mesmo código interpretado pela JVM.
  • 53. Cuidado com o desempenho da concatenação de strings  Código Ruim
  • 54. Cuidado com o desempenho da concatenação de strings  Código Bom
  • 56. Referências Bibliográficas  ROBERT C. MARTIN. Código Limpo: habilidades práticas do Agile Software, Alta Books, 2011.
  • 57. Referências Bibliográficas  Joshua Bloch. Java Efetivo, 2ª Edição, Alta Books 2010.