2 Boas práticas para codificação e entendimento
2.1.1 Regras para nomenclaturas de Classes, Interfaces e Superclasses
- ClienteGUI;
- NotaFiscalGUI;
- AgendaGUI;
- IFramePadraoGUI;
- IButtonPanelGUI;
- IMenuPanelGUI.
2.1.2 Regra para nomenclatura de atributos, métodos seletores e atribuidores
Caso para a linguagem Java.
class Cliente {
private Object objetoPadrao;
private int quantidadePedidos;
public Object getObjectPadrao() {
return this.objetoPadrao;
}
public void setObjetoPadrao(Object o){
this.objetoPadrao = o;
}
}
public Object getTotalCompras(Cliente c) {
Double total = c.getTotalCompras();
return ( (total * 25) * 10000);
}
Exemplo para o caso de linguagem PHP:
<?
public function get_total_compras(Cliente $c)
{
$total = $c->get_total_compras();
return ( ($total * 25) * 10000);
}
2.1.3 Nomenclatura de variáveis para estruturas de repetição (locais)
$aux = null;
foreach ($arquivos_enviados as $indice => $arquivo)
{
$aux = $arquivo.” – processado...”;
}
$aux = null;
for($i=0; $i < sizeof($arquivos_enviados); $i++)
{
$aux = $arquivos_enviados[$i++][0];
$arquivos_enviados[$i++][0]=$arquivos_enviados[$i][0];
}
Nos casos acima, as variáveis $i e $aux, são utilizadas apenas para auxiliar na execução dos laços de repetição.
2.2 Documentação e comentário para o código fonte
2.2.1 Comentários de linha de execução
// Inicia uma variável local como NULA.
$aux = null;
// Percorre todos os arquivos enviados pelo Cliente.
for($i=0; $i < sizeof($arquivos_enviados); $i++)
{
// Guarda a próxima posição do arquivo em $aux.
$aux = $arquivos_enviados[$i++][0];
// Troca a próxima posição pela posição atual.
$arquivos_enviados[$i++][0]=$arquivos_enviados[$i][0];
}
2.2.2 Documentação da API do projeto
- Documentação (comentários) de linhas de execução;
- Documentação de classes, superclasses e Interfaces além dos seus respectivos métodos, funções e atributos. Este tipo de documentação geralmente pode ser compartilhado com outras pessoas (colaboradores, programadores, etc.);
- Superclasses;
- Classes;
- Interfaces;
- Métodos e funções;
/**
* @package componentes/session/SessionManager.class.php
*/
Na convenção utilizada, toda a documentação deve ser iniciada pelo prefixo ‘/**’ e terminada com ‘*/’. A maioria das ferramentas que geram a documentação do projeto para outros formatos trabalham com essa notação para prefixo e sufixo.
2.2.3 Parâmetros para a documentação de uma API
TAG
DESCRIÇÃO
@author
Para armazenar o nome do programador que criou a classe, superclasse ou Interface.
@date
Data em que foi criado o arquivo.
@package
Caminho absoluto do arquivo dentro do projeto ou apenas o nome do pacote/pasta onde o mesmo se encontra.
@version
Número da versão estável, geralmente associada ao número gerado pelo servidor SVN do projeto.
@copyright
Informações de direitos autorais do autor.
@license
Informações sobre o tipo da licença. Geralmente utilizado para frameworks e bibliotecas de terceiros.
@params
Informações sobre um determinado parâmetro da função ou método. Deve-se especificar o nome do parâmetro, tipo, e uma descrição do motivo.
@returns
Informações sobre o retorno do método ou função, definindo o tipo do retorno e as informações que são retornadas com a variável de retorno.
@since
Utilizado para definir se uma função, método ou atributo está presente a partir somente de um determinado número de versão.
@see
Atalho ou nome de referência para uma leitura ou consulta de outro recurso ou componente do projeto.
@decrapted
O atributo, método ou função que não seja mais utilizado, mas esteja ainda ‘em modo legado’ recebe esse atributo na sua documentação como forma de aviso para que não seja mais utilizado para futuras atualizações.
@exception
Relação das exceções capturas do método ou função atual.
Nada impede que sejam criadas chaves especificas para representar alguma informação julgada como importante, como por exemplo:
@last_commit 12/12/2008 14:55 Juca Aparecido
Um exemplo de uma classe documentada pode ser visualizado logo abaixo:
<?
/**
* Classe responsável por gerenciar toda a lógica de acesso a
* dados para os Clientes da aplicação.
*
* @author Carlos Alberto Junior
* @package modelo/dao/
*
* @version 1.1.4
* @see componentes/conexao/Connection.class.php
*/
class ClienteDAO extends Connection
{
/**
* Ponteiro de result set para esta classe.
*/
private $result_set = null;
/**
* Retorna uma lista de clientes aplicando um filtro para
* não trazer os clientes que foram marcados como
* excluídos.
*
* @params string $ordem nome do campo para realizar a
* ordenação da consulta dos clientes.
* @returns array $this->result_set uma coleção de objetos
* do tipo ‘Cliente’.
*/
public function busca_clientes($ordem = ‘c.nome_completo’)
{
$sql = “select
c.nome_completo,
c.idade,
c.email
from
cliente c
where
c.excluido = ‘N’
order by
”.$ordem;
try
{
$this->result_set = mysql_query($sql);
}
catch(Exception $e)
{
echo “Problema na execução da SQL”;
return null;
}
return $this->result_set;
}
}
?>
3 Referências
Colocar tudo por escrito, disponível em: http://producingoss.com/pt-pt/written-rules.html
Documentando seus códigos Java, disponível em: http://webinsider.uol.com.br/index.php/2000/09/14/documentando-seus-codigos-java/
How to write Doc comments for the Javadoc Tool, disponível em: http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
Version Control, disponível em: http://producingoss.com/pt-pt/vc.html#vc-singularity




