Você está na página 1de 16

Tribunal de Justia de Pernambuco

Secretaria de Tecnologia da Informao e Comunicao

MANUAL PADRO DE CODIFICAO EM


JAVA

Manual Padrao Codificacao JAVA

Histrico de Alteraes
Data

Verso

Descrio

Autor

Aprovado Por

10/06/2009

1.0

VERSO INICIAL

Cleber Chian

Iveruska Arteiro

Pgina 2 de 16

Manual Padrao Codificacao JAVA

ndice
1 Introduo........................................................................................................................................... 5
2 Convenes de Nomenclatura ......................................................................................................... 5
2.1 Nomes de Arquivos / Pacotes........................................................................................................ 5
2.2 Classes e Interfaces........................................................................................................................ 6
2.3 Atributos........................................................................................................................................... 6
2.4 Variveis........................................................................................................................................... 6
2.5 Constantes ...................................................................................................................................... 7
2.6 Mtodos............................................................................................................................................ 7
2.7 Parmetros....................................................................................................................................... 8
3 Formatao......................................................................................................................................... 8
3.1 Indentao........................................................................................................................................ 8
3.2 Comprimento de Linha................................................................................................................... 8
4 Organizao do Arquivo.................................................................................................................... 8
5 Comentrios....................................................................................................................................... 9

5.1 Comentrios de documentao..............................................................................................9


5.1.1 Comentrio JavaDoc.................................................................................................................... 9
5.2 Comentrios de implementao.................................................................................................... 10
5.2.1 Comentrios iniciais.................................................................................................................... 10
5.2.2 Comentrio em linha.................................................................................................................... 11
5.2.3 Comentrio de fim de linha.......................................................................................................... 11
6 Boas Prticas...................................................................................................................................... 11
6.1 Manutenibilidade e extensibilidade............................................................................................... 12
6.1.1 Seguir as convenes de nomenclatura, formatar e comentar o cdigo................................12
6.1.2 Declarar todos os atributos de classe como private.................................................................12
6.1.3 Definir valores fixos, numricos ou textuais, como constantes..............................................12
6.1.4 No utilizar um mesmo atributo ou varivel local para mais de uma finalidade....................12
6.1.5 Converter tipos numricos explicitamente................................................................................12
6.1.6 Garantir o fechamento de todos os recursos abertos..............................................................12
Pgina 3 de 16

Manual Padrao Codificacao JAVA

6.1.7 Minimizar a quantidade de cdigo de execuo em pginas dinmicas.................................13


6.1.8 Instrumentar o cdigo para auxiliar no diagnstico de problemas funcionais......................13
6.2 Performance..................................................................................................................................... 13
6.2.1 Concatenar objetos String da maneira mais eficiente..............................................................13
6.2.2 Evitar ou minimizar mtodos e blocos de cdigo synchronized ou locked............................13
6.2.3 Utilizar pools de conexo para acessar o banco de dados......................................................13
6.2.4 Minimizar a quantidade de acessos ao banco de dados em cada operao..........................14
6.2.5 Instrumentar o cdigo para auxiliar no diagnstico de problemas de performance.............14
6.2.6 Implementar queries fazendo uso dos ndices no banco de dados........................................14
6.2.7 Implementar queries retornando apenas as colunas necessrias para a aplicao..............14
6.2.8 No usar comandos aninhados.................................................................................................. 14

ndice de Tabelas

ndice de Figuras

Pgina 4 de 16

Manual Padrao Codificacao JAVA

1 Introduo
Este documento apresenta o padro de codificao geral para a linguagem de programao
Java. Este padro o seguido e recomendado pela Sun e cobre a nomenclatura de arquivos,
organizao de arquivos, formatao, comentrios, declaraes, comandos, espaamentos,
convenes de nomeao, boas prticas de programao e cdigos exemplos.
Um padro de codificao visa facilitar o entendimento do cdigo do sistema por qualquer
pessoa que conhea e siga os padres de codificao, pois estabelece regras definindo como o cdigo
deve ser escrito.
Sempre que possvel, devem ser utilizadas ferramentas para automatizar a validao das
convenes de nomenclatura, a formatao e os comentrios do cdigo fonte, a identificao de erros
de programao e a verificao das boas prticas de programao.

2 Convenes de Nomenclatura
2.1 Nomes de Arquivos / Pacotes
Utilizar apenas letras minsculas sem acentuao e, quando necessrio, nmeros.
Iniciar com o nome do domnio de Internet da organizao, escrito ao contrrio.
Exemplos:
package br.jus.tjpe.<nome_do_sistema>.web
package br.jus.tjpe.<nome_do_sistema>.persistencia;
package br.jus.tjpe.<nome_do_sistema>.dao.api
Access Objects)
package br.jus.tjpe.<nome_do_sistema>.dao.impl
Data Access Objects)

(Interfaces

dos

Data

(Implementao

dos

package
br.jus.tjpe.<nome_do_sistema>.dao.exception
relacionadas camada de persistncia)
package br.jus.tjpe.<nome_do_sistema>.entidade
relativas ao Domnio da aplicao)

(Entidades

package
br.jus.tjpe.<nome_do_sistema>.negocio
mtodos de negcio)

(Classes

package
br.jus.tjpe.<nome_do_sistema>.negocio.exception
relacionadas camada de negcio)

(Excees
bsicas,
com

os

(Excees

Pgina 5 de 16

Manual Padrao Codificacao JAVA

2.2 Classes e Interfaces


Utilizar nomes simples e descritivos, evitando abreviaturas.
Utilizar apenas letras sem acentuao e, quando necessrio, nmeros.
Utilizar letras maisculas somente nas primeiras letras das palavras e nas abreviaturas.
Utilizar o prefixo I na identificao das interfaces.
Exemplos:
class Sistema
class ModuloSistema
interface IEntidadePersistente
interface IEditavel

2.3 Atributos
Utilizar nomes simples e descritivos, evitando abreviaturas.
Utilizar apenas letras sem acentuao e, quando necessrio, nmeros.
Iniciar com letra minscula e utilizar letras maisculas nas primeiras letras das palavras.
Utilizar o plural para nomear atributos do tipo array ou coleo.
Exemplos:
private String nomeSistema;
private String nomeUsuario;
private Date dataNascimento;
private String cep;
private Boolean sexo;
private Integer codigoModuloSistema;
private PerfilAcesso[] perfisAcesso;
private ArrayList telefones;

2.4 Variveis
Utilizar nomes simples e descritivos, evitando abreviaturas.
Utilizar apenas letras sem acentuao e, quando necessrio, nmeros.
Iniciar com letra minscula e utilizar letras maisculas nas primeiras letras das palavras.
Utilizar o plural para nomear variveis do tipo array ou coleo.
Pgina 6 de 16

Manual Padrao Codificacao JAVA

Variveis utilizadas como contadores podem ser nomeadas com apenas uma letra.
Exemplos:
String nomeUsuario;
int valorSaldo;
ArrayList codigos;
int i;

2.5 Constantes
Utilizar nomes simples e descritivos, evitando abreviaturas.
Utilizar apenas letras sem acentuao e, quando necessrio, nmeros.
Utilizar somente letras maisculas separando as palavras com underline (_).
Exemplos:
static final int TIPO_USUARIO_ADMINISTRADOR = 1;
static final String VERSAO_SISTEMA = 1.0;

2.6 Mtodos
Utilizar nomes simples e descritivos, evitando abreviaturas.
Utilizar apenas letras sem acentuao e, quando necessrio, nmeros.
Iniciar com verbos no infinitivo, com exceo dos mtodos de acesso a atributos de classe e
mtodos que retornam boolean.
Os mtodos de acesso a atributos de classe devem iniciar com get e set.
Os mtodos que retornam boolean podem iniciar com o prefixo is, um verbo (no tempo mais
adequado) ou outra palavra qualquer.
Iniciar com letra minscula e utilizar letras maisculas nas primeiras letras das palavras.
Exemplos:
Usuario consultarUsuario();
void atualizarSaldo();
String getNomeUsuario();
void setNomeUsuario();
boolean isUsuarioAdministrador();
boolean temSaldo();

Pgina 7 de 16

Manual Padrao Codificacao JAVA

2.7 Parmetros
Utilizar nomes simples e descritivos, evitando abreviaturas.
Utilizar apenas letras sem acentuao e, quando necessrio, nmeros.
Iniciar com letra minscula e utilizar letras maisculas nas primeiras letras das palavras.
Utilizar letras maisculas somente nas primeiras letras das palavras e nas abreviaturas.
Utilizar o plural para nomear parmetros do tipo array ou coleo.
Exemplos:
Usuario consultarUsuario(Integer codigoUsuario);
void atualizarSaldo(BigDecimal saldoAtual);
boolean temFeriado(Date[] datas);

3 Formatao
3.1 Indentao
A unidade de indentao deve ser formada por quatro espaos em branco.
No deve ser utilizada a tabulao. Caso a ferramenta de desenvolvimento permita, os tabs
devem ser automaticamente convertidos em quatro espaos em branco.
Sempre indentar o cdigo dentro do escopo de cada bloco.

3.2 Comprimento de Linha


Preferencialmente, as linhas de cdigo devem ter no mximo 120 caracteres.

3.3 Quebra de Linha


Quando uma expresso no couber em uma linha, quebr-la de acordo com as regras abaixo :
Quebrar depois de uma vrgula;
Quebrar antes de um operador;
Prefira quebrar uma linha em uma expresso de um nvel mais alto;
A nova linha alinhada com o comeo da expresso do mesmo nvel da linha anterior.
Pgina 8 de 16

Manual Padrao Codificacao JAVA

Veja alguns exemplos de chamadas de mtodos onde necessrio utilizar mais de uma linha:
this.someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = this.someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));

Veja alguns exemplos de expresses aritmticas onde necessrio utilizar mais de uma linha:
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; // PREFIRA !
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; // EVITE !

A quebra de linha da condio do comando if e de mtodos utiliza uma indentao de 8


espaos, conforme ilustrado nos exemplos abaixo:
//No use esta indentao

if ((condition1 && condition2)


|| (condition3 && condition4)
|| !(condition5 && condition6)) {
doSomethingAboutIt();
}

//USE ESTA
if ((condition1 && condition2)
|| (condition3 && condition4)
|| !(condition5 && condition6)) {
doSomethingAboutIt();
}

//OU ESTA

if ((condition1 && condition2) || (condition3 && condition4)


|| !(condition5 && condition6)) {
doSomethingAboutIt();
}

//No use esta indentao

private static synchronized int getQuantidadeEstoque(Produto produto,


Date ateData ) {

//USE ESTA

private static synchronized int getQuantidadeEstoque(Produto produto,


Date ateData ) { ...

4 Organizao do Arquivo
Os elementos que compem uma classe (ou interface) devem estar na seguinte ordem:
Atributos estticos e cdigos de inicializao estticos
Pgina 9 de 16

Manual Padrao Codificacao JAVA

Atributos
Construtores
Mtodos estticos
Mtodos
Mtodos abstratos
Atributos, construtores e mtodos devem estar ordenados de acordo com os modificadores de
acesso, na seguinte ordem:
public
protected
package protected
private

5 Comentrios
As linguagens de programao normalmente suportam comentrios de documentao e
comentrios de implementao.
Os comentrios de documentao servem para descrever a especificao dos
elementos de cdigo (classes, construtores, mtodos, funes, procedimentos, atributos,
variveis, etc.). Para algumas linguagens, existem ferramentas que podem extrair e exportar,
normalmente no formato html, gerando uma documentao tcnica do sistema (Ex.: Java).
J os comentrios de implementao servem para descrever a lgica utilizada em um
trecho de cdigo, facilitando o entendimento.
As regras de obrigatoriedade de comentrios de documentao e implementao para
os elementos do cdigo devem ser definidas para cada sistema, considerando a linguagem de
programao e os detalhes de projeto e construo utilizados (design patterns, frameworks,
etc.).

5.1 Comentrios de documentao


Como regra geral, deve-se comentar o que o elemento de cdigo faz e porque ele foi criado.
Alm disso, para construtores, mtodos, funes e procedimentos devem-se comentar os
parmetros de entrada, o retorno e as excees lanadas.

5.1.1 Comentrio JavaDoc


Comentrio utilizado para documentar o cdigo de forma automtica. Exemplo :
Pgina 10 de 16

Manual Padrao Codificacao JAVA

/**
* Retorna um objeto TipoAusencia para ser mostrado na tela de consulta do sistema.
* passado como parmetro para o mtodo o cdigo do tipo de ausncia.
* @param TipoAusencia objeto do tipo TipoAusencia com atributo ID preenchido
* @return TipoAusencia objeto do tipo TipoAusencia com todos os atributos preenchidos
aps consulta no BD
* @see TipoAusencia
*/
public TipoAusencia get(TipoAusencia tipoAusencia) throws BusinessException {
try {
return this.tipoAusenciaDAO.get(tipoAusencia, tipoAusencia.getId());
} catch (PersistenceException e) {
throw new BusinessException("Erro ao recuperar a entidade", e);
}
}

5.2 Comentrios de implementao


Como regra geral, deve-se comentar o que o trecho de cdigo faz e por qu.

5.2.1 Comentrios iniciais


Todos os arquivos fontes devem iniciar com um comentrio contendo os autores, data de
criao, notas de copyright e uma breve descrio do programa. Exemplo:
/*
* Nome do Projeto: <Nome_do_Projeto>
* Nome da Classe : <Nome_da_Classe>
* Data de Criao: DD/MM/YYYY
*
*
* HISTRICO DE MUDANAS:
* ==========================================================
* <CR_do_Mantis> <Autor>

Pgina 11 de 16

Manual Padrao Codificacao JAVA

* DD/MM/YYYY <Breve descrio da alterao>


* ==========================================================
*/

5.2.2 Comentrio em linha


Pequenos comentrios podem aparecer como uma linha simples anterior ao cdigo. Se
um comentrio no pode ser escrito em uma linha simples dever ser usado o formato
de comentrio de bloco. Exemplo :
if (condition) {
/* Handle the condition. */
...
}

5.2.3 Comentrio de fim de linha


O limitador "//" inicia um comentrio que continua at o final da linha. Este comentrio
pode abranger toda a linha ou apenas uma parte dela. Este comentrio pode ser usado
em mltiplas linhas. Exemplo :
if (foo > 1) {
// Do a double-flip.
...
}
else
return false; // Explain why here.
//if (bar > 1) {
//
// // Do a triple-flip.
// ...
//}
//else
// return false;

Pgina 12 de 16

Manual Padrao Codificacao JAVA

6 Boas Prticas
6.1 Manutenibilidade e extensibilidade
6.1.1 Convenes de nomenclatura
Seguir as convenes de nomenclatura, comentrios e formatao do cdigo.
Isso facilita o entendimento do cdigo e simplifica os trabalhos de manuteno.

6.1.2 Atributos de Classe


Todos os atributos de classe devem ser declarados como private. Para cada atributo,
implementar mtodos de acesso get/set.
Isso fora o encapsulamento e reduz o impacto das mudanas.

6.1.3 Valores Fixos


Valores fixos numricos ou textuais (literais) devem ser declarados como constantes dentro da
classe ou da interface mais apropriada.
Exemplo:
static final int SITUACAO_ATIVO = 1;
...
if (situacao == SITUACAO_ATIVO) {

6.1.4 Reutilizao de variveis


No utilizar um mesmo atributo ou varivel local para mais de uma finalidade
Isso diminui as chances de se introduzir bugs no cdigo decorrentes dos efeitos indesejados de
se ter um atributo ou varivel j preenchida com um valor resultado de uma lgica anterior.

6.1.5 Converso de tipos

Pgina 13 de 16

Manual Padrao Codificacao JAVA

Os tipos numricos devem ser convertidos explicitamente (cast), indicando que a converso
proposital.

6.1.6 Fechamento de recursos


Os recursos abertos (conexes de banco de dados, statements, streams, etc.) devem sempre
ser fechados, mesmo quando ocorrer uma exceo que desvie o fluxo de execuo.

6.1.7 Minimizar cdigo em pginas dinmicas


Implementar o mnimo de regras de negcio ou qualquer outro cdigo de execuo nas pginas
dinmicas.

6.1.8 Instrumentar o cdigo para auxiliar no diagnstico de problemas


funcionais
Implementar os sistemas fazendo uso de algum mecanismo de instrumentao que possa ser
ativado e desativado em tempo de execuo, registrando dados e eventos em arquivos de log
que auxiliem no diagnstico de problemas funcionais no cdigo.

6.2 Performance

6.2.1 Concatenao de Strings


Em cada linguagem de programao existe uma maneira eficiente de se concatenar objetos
String, evitando o custo da construo e da destruio desnecessria de objetos.
Por exemplo, em Java deve-se utilizar um objeto StringBuffer.

6.2.2 Blocos synchronized ou locked


Evitar ou minimizar mtodos e blocos de cdigo synchronized ou locked.

Isso aumenta a capacidade de processamento paralelo de requisies pelo sistema.


Pgina 14 de 16

Manual Padrao Codificacao JAVA

6.2.3 Conexo para acessar o banco de dados


Utilizar pools de conexo para acessar o banco de dados.
Isso permite a reutilizao de conexes de banco de dados e elimina a necessidade de criao
de novas conexes, que tem um custo de performance relativamente alto.

6.2.4 Quantidade de acessos ao banco de dados


Minimizar a quantidade de acessos ao banco de dados em cada operao.
Grande parte dos problemas de performance em sistemas corporativos causada pela m
utilizao do banco de dados. O encapsulamento e o reuso, inerentes ao desenvolvimento
orientado a objetos, podem levar o Programador a implementar uma funcionalidade da maneira
menos eficiente.

6.2.5 Instrumentar o cdigo para auxiliar no diagnstico de problemas


de performance
Implementar os sistemas fazendo uso de algum mecanismo de instrumentao que possa ser
ativado e desativado em tempo de execuo, registrando dados e eventos em arquivos de log
que auxiliem no diagnstico de problemas de performance no cdigo.

6.2.6 ndices no banco de dados


Implementar queries fazendo uso dos ndices no banco de dados.
Isso permite que o banco de dados execute queries realizando menos operaes de I/O e
utilizando menos recursos do sistema.

6.2.7 Implementar queries retornando apenas as colunas necessrias


para a aplicao
Isso permite que o banco de dados execute queries realizando menos operaes de I/O e
gerando um menor trfego de rede.

Pgina 15 de 16

Manual Padrao Codificacao JAVA

6.2.8 Comandos aninhados


No usar comandos aninhados.
Isso trabalho do compilador e raramente melhora a performance.
Exemplo :
d = (a = b + c) + r; // Evitar isso
Em vez disso, escrever dessa forma :
a = b + c;
d = a + r;

Pgina 16 de 16

Você também pode gostar