Regras de Programação

32 respostas
jaboot

Oi Gente
Bom, primeiramente, não encontrei EXATAMENTE o que eu queria aqui no GUJ
A minha empresa está migrando lentamente para o Java. Mas estamos totalmente sem padrões de programação. Isso não quer dizer que não iremos utilizar OO, MVC e tudo mais.

O que eu queria mesmo é saber algumas regras de boa conduta, para um código mais limpo. Por exemplo, eu trabalhava para um Banco X anteriormente e lá eles tinham um “Manual do Desenvolvedor”.
O nosso trabalho era baseado nesse manual, e lá existiam algumas regras interessantes, como:

[list]Nunca redimensionar um array dentro de um loop;[/list]
[list]Todo nome de variável deve começar pelo seu tipo (strNome, intIdade);[/list]
[list]Criar sessões como último recurso;[/list]
[list]Toda página criada deve conter o cabeçalho padrão;[/list]

E por aí vai… eu provavelmente é que terei que organizar isso, e estou sem idéias, só trabalhei com VB e PL/SQL. Vocês tem algumas regras de boas práticas de programação onde trabalham? Isso até poderia gerar uma boa discussão aqui.

32 Respostas

Daniel_Quirino_Olive

:arrow: Todo nome de variável NÃO deve começar pelo seu tipo (strNome -> nome, intIdade -> idade);

J

Oi amigo!
Estou numa situação semelhante a sua!
Um livro que me sugeriram de boas práticas de OO é o Effective Java:
http://java.sun.com/docs/books/effective/

Tb gostaria saber dos amigos javeiros o que sugerem!
Obrigado!

David

balarini:
Todo nome de variável deve começar pelo seu tipo (strNome, intIdade);
Notação húngara não, por favor!! Faço das palavras do Daniel as minhas.

marcioa1

Balarini,

Existem convenções de codificação. veja em

http://java.sun.com/docs/codeconv/index.html

Boa Sorte,

Márcio

serp

http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

sudeval

http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

oliveirarenan

Java Convention

:smiley: :smiley: :smiley: :smiley: :smiley:

jaboot

Calma gente!

O que eu queria saber é quais regras vocês costumam utilizar… então todo mundo segue a risca as convenções da Sun?

Era melhor usar isso do que usar as convenções do meu trabalho antigo:
v_aux
v_contador
aff… nem quero me lembrar disso

E dicas de performance?

ateubh

Micro$oft Convention (cópia do Java Convention) :lol:

keller

Dicas de performance?

Poderia ser mais expecifico?
Ficou um tanto generica essa pergunta…
Performance em relação a que ?

jaboot

gui:
Ficou um tanto generica essa pergunta…
Performance em relação a que ?

É, acho que não fui muito específico
É que na verdade, estou fazendo estas perguntas baseado no “Manual do Desenvolvedor” que eu tinha que utilizar, então talvez as minhas questões sejam um pouco limitadas

Performance e desempenho do Java:

[list]Quanto ao acesso a banco de dados (Oracle 10g)[/list]
[list]Quanto ao resultset (acho que alguém aqui tinha falado algo a respeito de nunca usar HashTable, não lembro o post)[/list]
[list]Quanto ao uso de sessões[/list]
[list]Redimensionamento de arrays/Concatenações de strings dentro de um loop[/list]
[list]Quanto ao uso de Buffer[/list]
[list]Quanto ao nível que vocês costuman utilizar o Garbage Collector(é um projeto inteiramente WEB)[/list]

Existe alguma configuração do Tomcat que poderia me ajudar nesse sentido? Não penso somente em rapidez, penso também em estabilidade.

Kenobi

gui:
balarini:


Era melhor usar isso do que usar as convenções do meu trabalho antigo:
v_aux
v_contador
aff… nem quero me lembrar disso

E dicas de performance?

Dicas de performance?

Poderia ser mais expecifico?
Ficou um tanto generica essa pergunta…
Performance em relação a que ?

Bom uma coisa são convenções outra totalmente diferente são práticas de programação para obtenção de performance por exemplo.

Aí com certeza vai precisar de um bom livro e ferramentas que o auxiliem a identificar pontos de melhoria - como AppPerfect.

São muitas práticas, que precisam de um conhecimento um pouco mais elevado sobre a aplicação / plataforma.

Exemplo, utilizar ArrayList ao invés de Vector, pois vector é uma collection sincronizada e onera a performance. Entretanto, em alguns casos ela vai ser útil e deverá ser utilizada.

Essa menção é só pra exemplificar que além das práticas, você tem que conhecer a arquitetura básica da aplicação do seu negócio, para saber onde empregar tais práticas.

ateubh

Cara, isso que você está perguntando é muito abrangente… não dá para responder assim não.
E você que falemos de performance em comparação a que?

Z

Amigo, adquira o mais rapido possivel o livro Effective Java, do Joshua Bloch. Nele estao a maioria das respostas para as suas duvidas, o resto vem com o tempo.

Esse livro eh indispensavel para qualquer programador Java.

R

Uma regra pra vcs:

evitem usar ‘variáveis’.

utilizem atributos e comportamentos em seus objetos…

leia alguns artigos do philip calcado para entender isto…

Acho q no portal java tem, ou no proprio blog dele: fragmental.

Att,


ao Sr. Shoes:
Espero que não se importe em citá-lo!

cv1

rodrigow:
Uma regra pra vcs:

evitem usar ‘variáveis’.

De onde vc tirou isso?

faq

cv:
rodrigow:
Uma regra pra vcs:

evitem usar ‘variáveis’.

De onde vc tirou isso?

Acho que o rodrigow se confundiu. Seria isso aqui?

//determinada regra do negocio determina que maioridade = 21
MAIORIDADE = 21;
//em algum metodo:
if(this.idade > MAIORIDADE)
   tal
else
   tal outro

//é muito comum encontrar o seguinte:
if(this.idade > 21)//o que é esse 21?
   tal
else
   tal outro
A

Leia o Effective Java, se baseie nas convenções de código da Sun e leia os artigos do Brian Goetz com recomendações sobre código. Quanto a performance, eu sou partidário da idéia de desenvolver a aplicação pensando em qualidade (do código além do produto final) e depois usar um profiler para otimizar áreas críticas.

M

Olha …
Boas praticas de programação não é diretamente ligago a linguagem de programação. Logicamente é sempre importantíssimo conhecer a linguagem e saber como os elementos funcionam para saber o que usar ou não (e quando) de uma linguagem.

Boas praticas dependem do seu objetivo.

Seu sistema vai se integrar com outros ?
Voce processa dados de forma batch ?
Qual o tamanho do seu sistema?
Qual a complexidade ?
Quantos dervidores de banco voce tem ?
Quantos servidores Web voce tem ?
etc…

vou dar um exemplo claro disso agora:

EX: Se voce tem muita disponibilidade do seu servidor Web e o seu Servidor de Banco é ja tem problemas de performance ou voce ja preve este problema, tente utilizar menos os recursos do banco trazendo parte do trabalho para o seu servidor de aplicações, desta forma voce consegue um desempenho melhor nas mesmas condições.

Isto que falei não esta ligado diretamente à linguagem… é uma técnica que se pode utilizar independente da linguagem.

Comentarios, variáveis com nomes significativos, etc… tem várias regrinhas que são uteis e não necessariamente estão ligadas às convenções de uma linguagem.

Mas como dica, siga a convenção padrão da Sun, ela é amplamente e largamente utilizada em java.
Em relação às boas praticas… cada caso é um caso… por isso existem diversos padrões como no link a baixo, mas existem outros padrões que você aprende com a experiência de acordo com a necessidade.
http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software.

Concluindo, se o negócio é critico e/ou voce não tem domínio da linguagem nem tempo para ganhar experiência nela, recomendo contratar uma pessoa que conheça do assunto. Existem muitos consultores com capacidade e que trabalham por projetos e podem ser contratados para trabalhos em projetos ou pontuais.

Att,
Diogo Palermo Tobler

J

Existem n convenções de nomes. A empresa usa a que achar melhor.

A

Eu acho que ao invés de convenção, o autor do tópico quer saber quais são as boas práticas em Java.

Para ter noção da sua resposta amigo, acesse este blog http://fernandofranzini.wordpress.com/category/artigos/ eveja o artigo Práticas de Aplicativos Web.

O Fernando Franzani realmente dá ótimas dicas neste artigo, vale muito a pena.

Abraços!

A

andre_mbm:
Eu acho que ao invés de convenção, o autor do tópico quer saber quais são as boas práticas em Java.

Para ter noção da sua resposta amigo, acesse este blog http://fernandofranzini.wordpress.com/category/artigos/ eveja o artigo Práticas de Aplicativos Web.

O Fernando Franzani realmente dá ótimas dicas, vale muito a pena.

Abraços!

Marky.Vasconcelos

Acho que o autor do tópico não liga pra essas respostas depois de 4 anos.

Mas conteudo interessante desse blog.

Jairo_Junior1

Mark_Ameba:
Acho que o autor do tópico não liga pra essas respostas depois de 4 anos.

Mas conteudo interessante desse blog.


Seria bom se ele postasse o que ele fez. :lol:

Tchello

Mark_Ameba:
Acho que o autor do tópico não liga pra essas respostas depois de 4 anos.

Mas conteudo interessante desse blog.

UHUHAUHhauUHAhua
E eu quase respondi aqui…
Ia dizer pra ele estudar a fundo Collections, etc e tal.

Nota: verificar se o tópico não é um ress pré-histórico.

ViniGodoy

Trabalhei por 9 anos com sistema de tempo real, onde a performance é crítica. Aqui vão algumas dicas de performance:

  1. Fuja dos mitos! Procure artigos sérios, de profissionais da área sobre performance (como os do Goetz, no caso do Java). Muitos mitos vão fazer você ter comportamento ridículo, como declarar final em tudo, usar métodos estáticos em todo lugar, ou achar muito importante usar ++i no lugar de i++ no Java.

  2. Lembre-se que otimização custa caro, tanto para se desenvolver, quanto para manter o código depois. Portanto, otimize apenas quando for estritamente necessário;

  3. Use um profiler para identificar onde otimizar (bons profilers são a VisualVM e o profiler do Netbeans). Geralmente os problemas de performance estão em pequenos gargalos, e são eles que devem ser otimizados.

  4. Use um profiler, para saber se sua modificação realmente surtiu efeito. Se não surtiu, desfaça a modificação.

  5. Quando o assunto for otimização, nunca queime uma dessas etapas:

a) Você precisa de um código eficaz: Seu código ainda não faz o que tem que fazer? Então não é hora de otimizar. Aproveite essa etapa para montar uma sólida bateria de testes unitários, se possível.
b) Torne seu código eficiente: Muito provavelmente, os primeiros problemas de performance serão erros bobos. Um algoritmo errado, uma estrutura de dados errada, uma operação feita no momento errado, etc. Simplesmente corrija esse problema e substitua algoritmos por outros melhores, sem perder flexibilidade ou legibilidade do seu código.
c) Torne seu código especializado: Ou seja, veja se não há possibilidades de otimização para seu problema em especial. Inclui: descartar processamento de dados desnecessários, fazer caching de dados comumente usados, usar algoritmos específicos para o problema. Um exemplo clássico é o algoritmo A* para processamento de mapas. Ele funciona desde que você possa estimar que direção seguir (o que não é o caso para mapas com teletransporte).
d) Torne seu código específico: Seu código agora passará a ser dependente de um determinado hardware ou SO. Inclui otimizações sinistras específicas de plataforma ou uso de hardware específico.

Note que queimar etapas é prejudicial pois quanto mais você avança, mais específico seu código se torna, mais tempo você levará para desenvolver e mais caro ele se tornará. Depois de cruzar a letra b), cuidado! Mudanças de condição no ambiente poderão afetar o seu programa.

  1. Aprenda estruturas de dados, e saiba quando usa-las em cada caso.

  2. Conheça bem as tecnologias que está trabalhando, e procure seguir as recomendações de quem às produz. Um exemplo disso, no Java, é usar StringBuilder no lugar de concatenação de Strings, ArrayList no lugar de Vector. No C++ é evitar o lançamento de exceptions. Leia atentamente a documentação e entenda o que está fazendo, ao invés de só copiar e colar exemplos da internet (essa dica vale não só para performance);

  3. Tente procurar APIs específicas para seu problema, e avalia-las. Redesenvolver para obter mais performance entra na alternativa c), dos passos ali em cima.

É importante entender que performance é um conceito relativo. Ou seja, procure definir parâmetros reais e mensuráveis do quão rápido o código deve ser. Numa aplicação web, por exemplo, os tempos de resposta geralmente podem ser muito altos, diferentes de uma aplicação feita para uma injeção eletrônica. Entender esses parâmetros permite que você foque seu investimento em performance na medida certa.

Tchello

ViniGodoy:
Trabalhei por 9 anos com sistema de tempo real, onde a performance é crítica. Aqui vão algumas dicas de performance:

  1. Fuja dos mitos! Procure artigos sérios, de profissionais da área sobre performance (como os do Goetz, no caso do Java). Muitos mitos vão fazer você ter comportamento ridículo, como declarar final em tudo, ou achar muito importante usar ++i no lugar de i++ no Java.

  2. Lembre-se que otimização custa caro, tanto para se desenvolver, quanto para manter o código depois. Portanto, otimize apenas quando for estritamente necessário;

  3. Use um profiler para identificar onde otimizar (bons profilers são a VisualVM e o profiler do Netbeans). Geralmente os problemas de performance estão em pequenos gargalos, e são eles que devem ser otimizados.

  4. Use um profiler, para saber se sua modificação realmente surtiu efeito. Se não surtiu, desfaça a modificação.

  5. Quando o assunto for otimização, nunca queime uma dessas etapas:

a) Você precisa de um código eficaz: Seu código ainda não faz o que tem que fazer? Então não é hora de otimizar. Aproveite essa etapa para montar uma sólida bateria de testes unitários, se possível.
b) Torne seu código eficiente: Muito provavelmente, os primeiros problemas de performance serão erros bobos. Um algoritmo errado, uma estrutura de dados errada, uma operação feita no momento errado, etc. Simplesmente corrija esse problema e substitua algoritmos por outros melhores, sem perder flexibilidade ou legibilidade do seu código.
c) Torne seu código especializado: Ou seja, veja se não há possibilidades de otimização para seu problema em especial. Inclui: descartar processamento de dados desnecessários, fazer caching de dados comumente usados, usar algoritmos específicos para o problema. Um exemplo clássico é o algoritmo A* para processamento de mapas. Ele funciona desde que você possa estimar que direção seguir (o que não é o caso para mapas com teletransporte).
d) Torne seu código específico: Seu código agora passará a ser dependente de um determinado hardware ou SO. Inclui otimizações sinistras específicas de plataforma ou uso de hardware específico.

Note que queimar etapas é prejudicial pois quanto mais você avança, mais específico seu código se torna, mais tempo você levará para desenvolver e mais caro ele se tornará. Depois de cruzar a letra b), cuidado! Mudanças de condição no ambiente poderão afetar o seu programa.

  1. Aprenda estruturas de dados, e saiba quando usa-las em cada caso.

  2. Conheça bem as tecnologias que está trabalhando, e procure seguir as recomendações de quem às produz. Um exemplo disso, no Java, é usar StringBuilder no lugar de concatenação de Strings, ArrayList no lugar de Vector. No C++ é evitar o lançamento de exceptions. Leia atentamente a documentação e entenda o que está fazendo, ao invés de só copiar e colar exemplos da internet (essa dica vale não só para performance);

  3. Tente procurar APIs específicas para seu problema, e avalia-las. Redesenvolver para obter mais performance entra na alternativa c), dos passos ali em cima.

É importante entender que performance é um conceito relativo. Ou seja, procure definir parâmetros reais e mensuráveis do quão rápido o código deve ser. Numa aplicação web, por exemplo, os tempos de resposta geralmente podem ser muito altos, diferentes de uma aplicação feita para uma injeção eletrônica. Entender esses parâmetros permite que você foque seu investimento em performance na medida certa.

Cara, ótimas dicas!
Creio que fiz indicações corretas, desde que estudei a fundo estruturas de dados na graduação recomendei ( e recomendo ) a todos que estudem bastante isso também, pude notar que é essencial um bom conhecimento de ED e que poucas pessoas acabam levando a sério.

Gostei muito daquele link do Goetz, achei artigos muito interessantes. Definitivamente favoritado!

Abraços.

ViniGodoy

Além de ED, é bom estudar os algoritmos clássicos também. Eles podem salvar a pátria. Não precisa ser com o rigor de quem vai participar de uma olimpiada de matemática, basta ter um bom livro de referência à mão, ter uma noção do que existe e onde pode ser usado.

E

ViniGodoy:
Trabalhei por 9 anos com sistema de tempo real, onde a performance é crítica. Aqui vão algumas dicas de performance:

  1. Fuja dos mitos! Procure artigos sérios, de profissionais da área sobre performance (como os do Goetz, no caso do Java). Muitos mitos vão fazer você ter comportamento ridículo, como declarar final em tudo, ou achar muito importante usar ++i no lugar de i++ no Java.

Acho que o cara que preparou a prova de Analista de TI do Banco Central efetivamente leu as mesmas coisas que você sugeriu. Veja a questão:

O gabarito é “C”.

ViniGodoy

Interessante. Qual é o link para download da prova?

L

ViniGodoy:
Trabalhei por 9 anos com sistema de tempo real, onde a performance é crítica. Aqui vão algumas dicas de performance:

  1. Fuja dos mitos! Procure artigos sérios, de profissionais da área sobre performance (como os do Goetz, no caso do Java). Muitos mitos vão fazer você ter comportamento ridículo, como declarar final em tudo, usar métodos estáticos em todo lugar, ou achar muito importante usar ++i no lugar de i++ no Java.

  2. Lembre-se que otimização custa caro, tanto para se desenvolver, quanto para manter o código depois. Portanto, otimize apenas quando for estritamente necessário;

  3. Use um profiler para identificar onde otimizar (bons profilers são a VisualVM e o profiler do Netbeans). Geralmente os problemas de performance estão em pequenos gargalos, e são eles que devem ser otimizados.

  4. Use um profiler, para saber se sua modificação realmente surtiu efeito. Se não surtiu, desfaça a modificação.

  5. Quando o assunto for otimização, nunca queime uma dessas etapas:

a) Você precisa de um código eficaz: Seu código ainda não faz o que tem que fazer? Então não é hora de otimizar. Aproveite essa etapa para montar uma sólida bateria de testes unitários, se possível.
b) Torne seu código eficiente: Muito provavelmente, os primeiros problemas de performance serão erros bobos. Um algoritmo errado, uma estrutura de dados errada, uma operação feita no momento errado, etc. Simplesmente corrija esse problema e substitua algoritmos por outros melhores, sem perder flexibilidade ou legibilidade do seu código.
c) Torne seu código especializado: Ou seja, veja se não há possibilidades de otimização para seu problema em especial. Inclui: descartar processamento de dados desnecessários, fazer caching de dados comumente usados, usar algoritmos específicos para o problema. Um exemplo clássico é o algoritmo A* para processamento de mapas. Ele funciona desde que você possa estimar que direção seguir (o que não é o caso para mapas com teletransporte).
d) Torne seu código específico: Seu código agora passará a ser dependente de um determinado hardware ou SO. Inclui otimizações sinistras específicas de plataforma ou uso de hardware específico.

Note que queimar etapas é prejudicial pois quanto mais você avança, mais específico seu código se torna, mais tempo você levará para desenvolver e mais caro ele se tornará. Depois de cruzar a letra b), cuidado! Mudanças de condição no ambiente poderão afetar o seu programa.

  1. Aprenda estruturas de dados, e saiba quando usa-las em cada caso.

  2. Conheça bem as tecnologias que está trabalhando, e procure seguir as recomendações de quem às produz. Um exemplo disso, no Java, é usar StringBuilder no lugar de concatenação de Strings, ArrayList no lugar de Vector. No C++ é evitar o lançamento de exceptions. Leia atentamente a documentação e entenda o que está fazendo, ao invés de só copiar e colar exemplos da internet (essa dica vale não só para performance);

  3. Tente procurar APIs específicas para seu problema, e avalia-las. Redesenvolver para obter mais performance entra na alternativa c), dos passos ali em cima.

É importante entender que performance é um conceito relativo. Ou seja, procure definir parâmetros reais e mensuráveis do quão rápido o código deve ser. Numa aplicação web, por exemplo, os tempos de resposta geralmente podem ser muito altos, diferentes de uma aplicação feita para uma injeção eletrônica. Entender esses parâmetros permite que você foque seu investimento em performance na medida certa.

Olá Vini, tudo bem?

Cara muito boa suas dicas…

Atualmente, eu estou com uma aplicação q tbm é em tempo real, e q está com uma performace muito ruim. Nem sabia por onde começar, mas depois deste topico pelo menos tenho um roteiro a seguir…

Só queria saber(se for possivel) quais as técnologias que você usou neste projeto real time, pois, o meu projeto está usando muitos componentes na tela e o acesso ao banco é feito usando EJB(não pode ser acesso direto ao banco pela aplicação - questões de segurança da empresa)

Tem alguma dica, além das que vc passou Viny?(rsrsrs)

Abraços.

ViniGodoy

Não pense duas vezes. Comece fazendo profiling de tudo. Há profilers para todas as camadas java, e a maior parte dos bons bancos de dados tem profilers também. Use para isso o VisualVM, que já vem com o próprio JDK:
https://visualvm.dev.java.net/

Se você usa MySQL como servidor de banco (é uma opção de vários), dê uma olhada em:

Além disso, no caso de aplicações para usuários finais, tente também lidar com a performance percebida. Isso é, mostrar corretamente barras de progresso, e dar sinais de que a aplicação não travou. Um usuário leva pouco mais de 2 segundos para ficar insatisfeito com um programa que não responde, mas pode estar disposto a esperar vários minutos para um com uma barra de progresso que dá, na maior parte do tempo, estimativas precisas de tempo.

Criado 19 de abril de 2006
Ultima resposta 21 de jul. de 2010
Respostas 32
Participantes 25