Mudanças entre as edições de "Manual do Desenvolvedor"

De Grupo Acert
Ir para: navegação, pesquisa
(Organização dos projetos)
 
Linha 26: Linha 26:
 
'''Protected''' - Somente métodos declarados na classe, ou qualquer subclasse, ou qualquer classe existente no mesmo pacote poderão acessar.
 
'''Protected''' - Somente métodos declarados na classe, ou qualquer subclasse, ou qualquer classe existente no mesmo pacote poderão acessar.
  
'''--Default --''' Somente métodos declarados na classe ou qualquer classe que esteja no mesmo pacote. O uso do default se faz pela ausência de qualquer keyword para especificar visibilidade.
+
'''-- Default --''' Somente métodos declarados na classe ou qualquer classe que esteja no mesmo pacote. O uso do default se faz pela ausência de qualquer keyword para especificar visibilidade.
  
 
'''Public''' - Todas as classes podem acessar.
 
'''Public''' - Todas as classes podem acessar.
Linha 43: Linha 43:
 
Em seguida, tem-se a declaração do nome da classe que faz parte da codificação do sistema.
 
Em seguida, tem-se a declaração do nome da classe que faz parte da codificação do sistema.
  
 +
<pre>
 
  /**
 
  /**
   * Descrição da classe
+
   * Descrição da classe.
   * //
+
   *
 
   * Exemplo de uso:
 
   * Exemplo de uso:
   * <pre>
+
   * &lt;pre&gt;
   * algum Código
+
   *   algum Código
   * </pre>
+
   * &lt;/pre&gt;
   * //
+
   *
 
   * Limitações:
 
   * Limitações:
   * //
+
   *
 
   * @author <nome do autor>
 
   * @author <nome do autor>
 
   * @version <versão da classe>
 
   * @version <versão da classe>
   * @see br.gov.agricultura.Componente
+
   * @see br.exemplo.Componente
 
   */
 
   */
 +
</pre>
  
 
== Documentação de um método ==
 
== Documentação de um método ==
Linha 64: Linha 66:
 
Exemplo:
 
Exemplo:
  
 +
<pre>
 
/**
 
/**
* Consulta dados de pessoa física.
+
* Consulta dados de pessoa física.
*
+
*
* @param cpf CPF da pessoa a ser consultada.
+
* @param
* @return entidade PessoaFisica.
+
*    CPF CPF da pessoa a ser consultada.
* @see PessoaFisica
+
* @return
* @throws IOException Indica que os dados passados são
+
*     Entidade PessoaFisica.
* inválidos.
+
* @throws
* @throws ClassNotFoundException Indica que a classe PessoaFisica
+
*    IOException Indica que os dados passados são inválidos.
* não foi encontrada.
+
* @throws
*/
+
*    ClassNotFoundException Indica que a classe PessoaFisica não foi encontrada.
public PessoaFisica consultaPorCPF (String CPF) throws IOException,
+
* @see br.exemplo.PessoaFisica
ClassNotFoundException {
+
*/
..
+
public PessoaFisica consultaPorCPF(String CPF) throws IOException, ClassNotFoundException {
return pessoaFisica;
+
    ...
 +
    return pessoaFisica;
 
}
 
}
 +
</pre>
  
 
== Documentação de uma sessão do código ==
 
== Documentação de uma sessão do código ==
Linha 91: Linha 96:
 
== Regras de Nomeação ==
 
== Regras de Nomeação ==
  
4.1Regra Geral pág. 10 até pag. 11 (5.Declaração)
+
O Java não tem limite para o nome de classes, métodos ou variáveis. Seguem algumas regras a serem adotadas para compor os nomes:
 +
 
 +
* '''Constantes:''' use sempre letras maiúsculas separando os nomes por underscore. Por exemplo: MAX_VALUE. O nome da constante deve ser claro e sua definição deve pertencer a uma classe cujo objetivo tenha afinidade com a função da constante. Também é utilizada a regra para utilização dos tipos enumerados. <p> Nota: Constantes são variáveis para serem definidas como final e static. Em geral as constantes devem ser utilizadas para representar literais.</p>
 +
 
 +
* '''Variáveis privadas e parâmetros:''' utilize letras minúsculas para o primeiro nome. Os nomes devem estar em português e fazer sentido para a função da variável. Eles serão compostos de tantos nomes quanto forem necessários emendados entre si (sem espaços) e sem utilizar o underscore (_) respeitando um máximo de não mais de 30 caracteres. Não use nomes abreviados. <p> Nota: O nome da variável deve ser totalmente legível.</p>
 +
 
 +
* '''Métodos:''' use letra minúscula no primeiro nome. Os nomes devem estar em português e fazer sentido para o objetivo do método. Eles serão compostos de tantos nomes quanto forem necessários emendados entre si (sem espaços) e sem utilizar o underscore (_). Não use nomes abreviados. A utilização do português como padrão se excetua na utilização de prefixos já comumente utilizados em programas e que tem um contexto já bem definido como por exemplo:
 +
 
 +
<blockquote>
 +
{| border=1 cellspacing=0 cellpadding=5
 +
|-
 +
! Prefixo
 +
! Função
 +
|-
 +
| get
 +
| Para acessors de leitura de variáveis de classes.
 +
|-
 +
| set
 +
| Para acessors de gravação de variáveis de classes.
 +
|-
 +
| on
 +
| Utilizado para indicar métodos que possuem a funcionalidade de se comportar como eventos
 +
|-
 +
| is
 +
| Métodos que fazem teste e retornam um valor booleano
 +
|}
 +
</blockquote>
 +
 
 +
* '''Classes e interface:''' use letra maiúscula na primeira letra do nome. Use nomes descritivos. Para interfaces, o nome deve possuir o prefixo I (letra i maíucula)
 +
 
 +
<blockquote>
 +
{| border=1 cellspacing=0 cellpadding=5
 +
! Sufixo
 +
! Função
 +
|-
 +
| DAO
 +
| Para classes de acesso ao banco de dados
 +
|-
 +
| BO
 +
| Para classes de regras de negócio Business Object
 +
|-
 +
| APS
 +
| Para classes que implementam os casos de uso (Application Services)
 +
|-
 +
| Bean
 +
| Para o serviço (ou comumente bean)
 +
|-
 +
| Remote
 +
| Para a interface remota do Bean
 +
|-
 +
| BD
 +
| Para classes cuja função seja de Busines Delegate action Para as classes que tem o papel de actions da camada de apresentação
 +
|}
 +
</blockquote>
 +
 
 +
* '''Packages:''' use letras minúsculas em todos os nomes.
 +
 
 +
* '''Outros objetos:''' os nomes devem estar sempre com todos os caracteres minúsculos.
 +
 
 +
<blockquote>
 +
{| border=1 cellspacing=0 cellpadding=5
 +
! Extensão
 +
! Função
 +
|-
 +
| .java
 +
| Classes java no formato de código-fonte
 +
|-
 +
| .properties
 +
| Arquivos de propriedades
 +
|-
 +
| .class
 +
| Classes java no formato de código-objeto
 +
|-
 +
| .jsp
 +
| Páginas de código web para apresentação da aplicação
 +
|-
 +
| .xml
 +
| Arquivos no formato XML
 +
|}
 +
</blockquote>
  
 
== Expressões e Sentenças ==
 
== Expressões e Sentenças ==
Linha 109: Linha 193:
 
Exemplo
 
Exemplo
  
 +
<pre>
 
package com.acme.dados;
 
package com.acme.dados;
 +
 
import java.util.ArrayList;
 
import java.util.ArrayList;
 +
 
public class PessoaFisicaHelper {
 
public class PessoaFisicaHelper {
public static ArrayList colecao = new ArrayList (); // NÃO FAZER
+
    public static ArrayList colecao = new ArrayList (); // NÃO FAZER
public void add(Pessoa p) {
+
 
colecao.add(p); // pessoa nunca mais será liberado
+
    public void add(Pessoa p) {
 +
          colecao.add(p); // pessoa nunca mais será liberado
 +
    }
 
}
 
}
 +
</pre>
  
 
NOTA: Se for extremamente necessário este tipo de armazenamento, limitar a quantidade de objetos armazenados. Este tipo de necessidade deve ser avisado e planejado antecipadamente.
 
NOTA: Se for extremamente necessário este tipo de armazenamento, limitar a quantidade de objetos armazenados. Este tipo de necessidade deve ser avisado e planejado antecipadamente.
Linha 141: Linha 231:
  
 
O objetivo do construtor é inicializar um objeto. Se o método puder ser acessado por uma subclasse, poderá ser feito um override, gerando um resultado não esperado.
 
O objetivo do construtor é inicializar um objeto. Se o método puder ser acessado por uma subclasse, poderá ser feito um override, gerando um resultado não esperado.
 +
 +
=== Quantidade de colunas por linha ===
 +
 +
Não ultrapassar a marcação 80 colunas do eclipse
  
 
== Encapsulamento e Controle de Acesso ==
 
== Encapsulamento e Controle de Acesso ==
Linha 173: Linha 267:
 
Como definição, a utilização de break será permitida em estruturas switch. E em estruturas de laço (for) com teste de saída. Por exemplo:
 
Como definição, a utilização de break será permitida em estruturas switch. E em estruturas de laço (for) com teste de saída. Por exemplo:
  
for(int i=0;i<ponto; i++){
+
<pre>
if(item[i] == ‘A’){
+
for(int i = 0; i < ponto; i++) {
resposta = item[i];
+
    if(item[i] == "A") {
break;
+
          resposta = item[i];
}
+
          break;
 +
    }
 
}
 
}
 +
</pre>
  
 
== Não utilizar blocos catch com corpo vazio ==
 
== Não utilizar blocos catch com corpo vazio ==
  
 
A utilização de blocos catch com corpo vazio leva a erros inexplicáveis dentro do código. Evite sempre a utilização de tratamento específico nas camadas internas sem o repasse das exceções para as camadas externas ao sistema, onde o erro será efetivamente logado e/ou apresentado ao usuário.
 
A utilização de blocos catch com corpo vazio leva a erros inexplicáveis dentro do código. Evite sempre a utilização de tratamento específico nas camadas internas sem o repasse das exceções para as camadas externas ao sistema, onde o erro será efetivamente logado e/ou apresentado ao usuário.
 +
 +
== Diversos ==
 +
 +
=== Escrever no código um statement por linha ===
 +
 +
Como boa prática manter sempre uma sentença (statement) por linha em um programa.
 +
 +
== Organização dos projetos ==
 +
 +
'''Nome de projeto:''' o nome do projeto deve estar em minúsculo e composto pela funcionalidade e módulo.
 +
 +
Exemplo:
 +
 +
* logs-core
 +
* logs-view
 +
* hibernate-core
 +
 +
'''Nome de pacotes:''' o nome do pacote deve se composto pela funcionalidade, módulo e recursos.
 +
 +
Exemplo:
 +
 +
* logs.core
 +
* logs.core.model
 +
* logs.core.view
 +
* logs.core.control
 +
* logs.core.util
 +
* logs.core.properties
 +
 +
'''Estrutura de pacotes para testes unitários e funcionais:''' devem estar no diretório ''src-test''
 +
 +
Exemplo:
 +
 +
* logs.core.test
 +
* logs.core.test.model
 +
* logs.core.test.view
 +
* logs.core.test.control
 +
* logs.core.test.util
 +
* logs.core.test.properties
 +
 +
 +
'''Estrutura de diretórios:''' estrutura de diretórios de um projeto web.
 +
 +
: '''<funcionalidade-modulo>'''
 +
:: '''build'''
 +
::: '''producao''' - diretório contendo as configurações do ambiente de produção
 +
:::: '''empresa_x''' - configurações específicas da empresa x
 +
:::: '''empresa_y''' - configurações específicas da empresa y
 +
::: '''homologacao''' - diretório contendo as configurações do ambiente de homologação
 +
:::: '''empresa_x''' - configurações específicas da empresa x
 +
:::: '''empresa_y''' - configurações específicas da empresa y
 +
::: '''teste''' - diretório contendo as configurações do ambiente de testes
 +
:::: '''empresa_x''' - configurações específicas da empresa x
 +
:::: '''empresa_y''' - configurações específicas da empresa y
 +
:: '''src''' - diretório contendo os arquivos fontes do projetos
 +
:: '''src-test''' - contendo os testes unitários e funcionais
 +
:: '''WebContent'''
 +
::: '''resources''' - diretório contendo imagens, scripts e folha de estilos
 +
::: '''WEB-INF'''
 +
:::: '''relatorios''' - arquivos .jasper
 +
:::: '''paginas''' - arquivos .jsp/.xhtml/.html/.ftl
 +
::: '''META-INF'''
 +
::: arquivos .swf

Edição atual tal como às 09h55min de 29 de setembro de 2011