SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
Princípios de projeto ...

           ... e boas práticas de programação
           em Java




           Márcio Torres
           Desenvolvedor de Software (e Professor)
Patrocinadores
Patrocinadores
Patrocinadores
Agenda
●
    Boas práticas lidando com ...
    ●
        Strings
    ●
        Números
    ●
        Coleções
    ●
        Métodos
    ●
        Estruturas
●
    e ...
    ●
        dicas e princípios, digamos, transversalmente.
Prelúdio
Strings: concatene com
StringBuilder
●
     Evite a concatenação de Strings, se for o
     caso, use StringBuilder.
    Ao invés disto:

    String var = sobrenome + “, “ + nome + “; ”;

    Faça isto:

    String var = new StringBuilder(sobrenome)
                     .append(“, “)
                     .append(nome)
                     .append(“; “);
CONHECER A API
  VOCÊ DEVE




         Cuidado para não reinventar a roda
Strings: declare Strings
literalmente
●
    Não use new para declarar uma String

    Ao invés disto:

    String var = new String(“Texto”);

    Faça isto:

    String var = “texto”;
Strings: compare com o
método equals
●
    Não use == para comparar Strings. O
    operador compara a referência da variável.



    Ao invés disto:

    boolean igual = sobrenome == nome;

    Faça isto:

    boolean igual = sobrenome.equals(nome);
Strings: compare o literal
com a variável
●
    Evite comparar uma variável com uma
    String, tu podes receber uma
    NullPointerException


    Ao invés disto:

    boolean igual = sobrenome.equals(“silva”);

    Faça isto:

    boolean igual = “silva”.equals(sobrenome);
Números: use primitivos
sempre que possível
●
    No Java existem duas maneiras de
    representar caracteres, números e boleanos,
    usando primitivos (char, byte, short, int,
    long, float, double, boolean) ou suas versões
    Objeto (Character, Byte, Short, Integer,
    Long, Float, Double, Boolean).
●
    Evite usar Wrappers quando são realizados
    cálculos e a performance e o footprint sejam
    importantes
USE SEU IDE
                        COM SABEDORIA




Aproveite os atalhos, geradores de código e
demais recursos do seu IDE para tornar-se
produtivo
                                              Mas saiba se virar sem ele
Números: use BigDecimal
para cálculos precisos
●
    Evite usar double e float para operações que
    necessitam de precisão.



    Ao invés disto:

    double salario = 2551.25;

    Faça isto:

    BidDecimal salario = BidDecimal.valueOf(2551.25);
USE A FORÇA




Experimente programar usando a intenção, declare
seu desejo e então subjugue o código a sua
vontade ...
Números: use Wrappers
para representar o nulo
●
    Mas cuidado com a NullPointerException




    Ao invés disto:

    double taxa;

    Faça isto:

    Double taxa;
Coleções: parametrize
suas coleções
●
    Não use arrays e evite usar ArrayList ou
    HashSet sem parametrizar o tipo.



    Ao invés disto:

    String[] nomes = new String[10];

    Faça isto:

    List<String> nomes = new ArrayList<String>();
Coleções: devolva uma
lista vazia ao invés de nulo
●
    Evite devolver nulo.
●
    Em um método que devolva uma coleção
    prefira devolvê-la vazia.

Ao invés disto:

public List<Algo> getLista() {
   return lista;
}

Faça isto:

public List<Algo> getLista() {
   if (lista == null) return Collections.emptyList();
   return lista;
}
Ao desenvolver a API pública de seus módulos
pergunte-se a cada tipo de entrada, válida ou inválida,
qual o retorno que não surpreenderia ...
Coleções: sempre sobrescreva
equals e hashCode
●
    Os métodos equals e hashCode são usados
    em conjuntos (Set) e outras coleções
    baseados em hash (como o HashMap).
Métodos: não passe nulo
como parâmetros
●
    Prefira a sobrecarga a passar nulo nos
    parâmetros
●
    Se o método tem muitos parâmetros aplique
    a refatoração Objeto Parâmetro
Ao invés disto:

printer.print(null, null, 2, null, doc);

Faça isto:

printer.print(2, doc);

class Printer {
   public void print(int copias, Document doc) {
   }
NÃO SE REPITA




Projete tendo o princípio DRY (Don't Repeat Yourself) em
mente. Cada parte de código deve ser expresso em único
ponto e sem ambiguidades
Métodos: escreva métodos
pequenos e legíveis
●
    Se o método crescer muito decomponha em
    métodos menores, aplique a refatoração
    Extrair Método
Estruturas: use
Enumerados para opções
●
    Não use Strings, Números ou Boleanos para
    opções


Ao invés disto:

mailer.send(true);

Faça isto:

mailer.send(Prioridade.ALTA);
SEMPRE QUE UM
   COMENTÁRIO VOCÊ FOR
   ADICIONAR, A SI MESMO
PERGUNTE: “COMO POSSO EU
  ESSE CÓDIGO MELHORAR
      POSSO PARA QUE
    DESNECESSÁRIO ESSE
 COMENTÁRIO POSSA SER”
Estruturas: crie novas classes
para grupos de dados
●
    Evite grupos de dados criando novas classes
●
    Evite a Obsessão Primitiva


Ao invés disto:

class Rota {
   int distancia;
}

Faça isto:

class Rota {
   Distancia distancia;
}
SIGA O PRINCÍPIO DE
                           ACESSO UNIFORME




Forneça acesso às propriedades e serviços de
seus objetos através de uma notação uniforme
escondendo se eles são obtidos através de
armazenamento ou computação ....
Bibliografia
Perguntas?
Contato
●
    marciojrtorres.blogspot.com
●
    marciojrtorres at gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Eder Samaniego
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoMauro Pereira
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de ProgramaçãoCarlos Schults
 
Lógica parte 2 - Algoritmos
Lógica   parte 2 - AlgoritmosLógica   parte 2 - Algoritmos
Lógica parte 2 - AlgoritmosWallison Parreira
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigoMauro Pereira
 
Guia para traducao algoritmos x l ps
Guia para traducao algoritmos x l psGuia para traducao algoritmos x l ps
Guia para traducao algoritmos x l psMauro Pereira
 
Action script1 apresentação2
Action script1 apresentação2Action script1 apresentação2
Action script1 apresentação2Jorge Louro
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação cClausia Antoneli
 
Logica de programação. introdução[AULA-1]
Logica de programação. introdução[AULA-1]Logica de programação. introdução[AULA-1]
Logica de programação. introdução[AULA-1]Ricardo Silva
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Gercélia Ramos
 

Was ist angesagt? (20)

Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2Algoritmos 1 - Semana 2
Algoritmos 1 - Semana 2
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Programação em C
Programação em CProgramação em C
Programação em C
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
Java4
Java4Java4
Java4
 
Java2
Java2Java2
Java2
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 
Lógica parte 2 - Algoritmos
Lógica   parte 2 - AlgoritmosLógica   parte 2 - Algoritmos
Lógica parte 2 - Algoritmos
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigo
 
Guia para traducao algoritmos x l ps
Guia para traducao algoritmos x l psGuia para traducao algoritmos x l ps
Guia para traducao algoritmos x l ps
 
Action script1 apresentação2
Action script1 apresentação2Action script1 apresentação2
Action script1 apresentação2
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
 
Logica de programação. introdução[AULA-1]
Logica de programação. introdução[AULA-1]Logica de programação. introdução[AULA-1]
Logica de programação. introdução[AULA-1]
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 

Andere mochten auch

Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoBruno Nardini
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O IgnacioFAETEC - ETESC
 
O uso dos porquês
O uso dos porquêsO uso dos porquês
O uso dos porquêsRebeca Kaus
 
Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Rebeca Kaus
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPsLuiz Ricardo Silva
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 anoRebeca Kaus
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebJonata Weber
 
Repaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRepaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRebeca Kaus
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasrodrigoareis
 
Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Elvis Araújo
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com JavaLuiz Ricardo Silva
 
No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)Luiz Ricardo Silva
 
Aula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoAula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoMaria Alice Jovinski
 
Reengenharia de Software
Reengenharia de SoftwareReengenharia de Software
Reengenharia de SoftwareRafael Berto
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 

Andere mochten auch (20)

Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - Resumo
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
 
O uso dos porquês
O uso dos porquêsO uso dos porquês
O uso dos porquês
 
Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Viva jovem, venha conhecer!
Viva jovem, venha conhecer!
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPs
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 ano
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Roteiro 6 ano
Roteiro 6 anoRoteiro 6 ano
Roteiro 6 ano
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações Web
 
Repaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRepaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 ano
 
Certificações Java
Certificações JavaCertificações Java
Certificações Java
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticas
 
Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com Java
 
No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Aula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniaoAula diagramas de implementacao 3º periodo uniao
Aula diagramas de implementacao 3º periodo uniao
 
Reengenharia de Software
Reengenharia de SoftwareReengenharia de Software
Reengenharia de Software
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 

Ähnlich wie Princípios de projeto e boas práticas de programação em Java

Ähnlich wie Princípios de projeto e boas práticas de programação em Java (20)

Clean Code
Clean CodeClean Code
Clean Code
 
PHP
PHPPHP
PHP
 
Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de Performance
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Arrays
ArraysArrays
Arrays
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
Introdução a linguagem Swift
Introdução a linguagem SwiftIntrodução a linguagem Swift
Introdução a linguagem Swift
 
Gisele
GiseleGisele
Gisele
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Introdução a java
Introdução a javaIntrodução a java
Introdução a java
 
Python introdução a linguagem de programação
Python introdução a linguagem de programaçãoPython introdução a linguagem de programação
Python introdução a linguagem de programação
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Java 05 Oo Basica
Java 05 Oo BasicaJava 05 Oo Basica
Java 05 Oo Basica
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Expressões idiomáticas do python
Expressões idiomáticas do pythonExpressões idiomáticas do python
Expressões idiomáticas do python
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 

Mehr von Tchelinux

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Tchelinux
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeTchelinux
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Tchelinux
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Tchelinux
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeTchelinux
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Tchelinux
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...Tchelinux
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Tchelinux
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeTchelinux
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeTchelinux
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Tchelinux
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...Tchelinux
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...Tchelinux
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Tchelinux
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Tchelinux
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.Tchelinux
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygameTchelinux
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Tchelinux
 

Mehr von Tchelinux (20)

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?
 

Princípios de projeto e boas práticas de programação em Java

  • 1. Princípios de projeto ... ... e boas práticas de programação em Java Márcio Torres Desenvolvedor de Software (e Professor)
  • 5. Agenda ● Boas práticas lidando com ... ● Strings ● Números ● Coleções ● Métodos ● Estruturas ● e ... ● dicas e princípios, digamos, transversalmente.
  • 7. Strings: concatene com StringBuilder ● Evite a concatenação de Strings, se for o caso, use StringBuilder. Ao invés disto: String var = sobrenome + “, “ + nome + “; ”; Faça isto: String var = new StringBuilder(sobrenome) .append(“, “) .append(nome) .append(“; “);
  • 8. CONHECER A API VOCÊ DEVE Cuidado para não reinventar a roda
  • 9. Strings: declare Strings literalmente ● Não use new para declarar uma String Ao invés disto: String var = new String(“Texto”); Faça isto: String var = “texto”;
  • 10. Strings: compare com o método equals ● Não use == para comparar Strings. O operador compara a referência da variável. Ao invés disto: boolean igual = sobrenome == nome; Faça isto: boolean igual = sobrenome.equals(nome);
  • 11. Strings: compare o literal com a variável ● Evite comparar uma variável com uma String, tu podes receber uma NullPointerException Ao invés disto: boolean igual = sobrenome.equals(“silva”); Faça isto: boolean igual = “silva”.equals(sobrenome);
  • 12. Números: use primitivos sempre que possível ● No Java existem duas maneiras de representar caracteres, números e boleanos, usando primitivos (char, byte, short, int, long, float, double, boolean) ou suas versões Objeto (Character, Byte, Short, Integer, Long, Float, Double, Boolean). ● Evite usar Wrappers quando são realizados cálculos e a performance e o footprint sejam importantes
  • 13. USE SEU IDE COM SABEDORIA Aproveite os atalhos, geradores de código e demais recursos do seu IDE para tornar-se produtivo Mas saiba se virar sem ele
  • 14. Números: use BigDecimal para cálculos precisos ● Evite usar double e float para operações que necessitam de precisão. Ao invés disto: double salario = 2551.25; Faça isto: BidDecimal salario = BidDecimal.valueOf(2551.25);
  • 15. USE A FORÇA Experimente programar usando a intenção, declare seu desejo e então subjugue o código a sua vontade ...
  • 16. Números: use Wrappers para representar o nulo ● Mas cuidado com a NullPointerException Ao invés disto: double taxa; Faça isto: Double taxa;
  • 17. Coleções: parametrize suas coleções ● Não use arrays e evite usar ArrayList ou HashSet sem parametrizar o tipo. Ao invés disto: String[] nomes = new String[10]; Faça isto: List<String> nomes = new ArrayList<String>();
  • 18. Coleções: devolva uma lista vazia ao invés de nulo ● Evite devolver nulo. ● Em um método que devolva uma coleção prefira devolvê-la vazia. Ao invés disto: public List<Algo> getLista() { return lista; } Faça isto: public List<Algo> getLista() { if (lista == null) return Collections.emptyList(); return lista; }
  • 19. Ao desenvolver a API pública de seus módulos pergunte-se a cada tipo de entrada, válida ou inválida, qual o retorno que não surpreenderia ...
  • 20. Coleções: sempre sobrescreva equals e hashCode ● Os métodos equals e hashCode são usados em conjuntos (Set) e outras coleções baseados em hash (como o HashMap).
  • 21. Métodos: não passe nulo como parâmetros ● Prefira a sobrecarga a passar nulo nos parâmetros ● Se o método tem muitos parâmetros aplique a refatoração Objeto Parâmetro Ao invés disto: printer.print(null, null, 2, null, doc); Faça isto: printer.print(2, doc); class Printer { public void print(int copias, Document doc) { }
  • 22. NÃO SE REPITA Projete tendo o princípio DRY (Don't Repeat Yourself) em mente. Cada parte de código deve ser expresso em único ponto e sem ambiguidades
  • 23. Métodos: escreva métodos pequenos e legíveis ● Se o método crescer muito decomponha em métodos menores, aplique a refatoração Extrair Método
  • 24. Estruturas: use Enumerados para opções ● Não use Strings, Números ou Boleanos para opções Ao invés disto: mailer.send(true); Faça isto: mailer.send(Prioridade.ALTA);
  • 25. SEMPRE QUE UM COMENTÁRIO VOCÊ FOR ADICIONAR, A SI MESMO PERGUNTE: “COMO POSSO EU ESSE CÓDIGO MELHORAR POSSO PARA QUE DESNECESSÁRIO ESSE COMENTÁRIO POSSA SER”
  • 26. Estruturas: crie novas classes para grupos de dados ● Evite grupos de dados criando novas classes ● Evite a Obsessão Primitiva Ao invés disto: class Rota { int distancia; } Faça isto: class Rota { Distancia distancia; }
  • 27. SIGA O PRINCÍPIO DE ACESSO UNIFORME Forneça acesso às propriedades e serviços de seus objetos através de uma notação uniforme escondendo se eles são obtidos através de armazenamento ou computação ....
  • 30. Contato ● marciojrtorres.blogspot.com ● marciojrtorres at gmail.com