Next: Referências
Up: Desenvolvimento de Aplicações
Previous: Implementação
  Sumário
Um dos principais objetivos de C ++ é reduzir a ocorrência
de erros em e facilitar a manutenção de projetos de
software. Para atingir estes objetivos de forma efetiva, entretanto,
não basta simplesmente usar
C ++. É preciso usá-lo de forma consistente, livres de erros comuns e
com programas que sejam fáceis de ler e entender, mesmo por outros
programadores que não o autor original.
A seguir, são apresentadas algumas recomendações que,
sendo seguidas durante o desenvolvimento da aplicação, podem
auxiliar que este objetivo seja alcançado.
- Otimize código apenas quando você sabe que você tem um
problema de desempenho, Pense duas vezes antes de fazê-lo.
- Um arquivo de cabeçalho não deve conter mais do que uma
definição de classe.
- Se há código na sua aplicação que depende da
máquina onde a
aplicação será executada, coloque este código em um
arquivo isolado, de forma que seja fácil localizá-lo quando
transferir sua aplicação para outra máquina.
- Todo arquivo que contém código fonte deve ser documentado com
comentários introdutórios dando informação sobre o
nome do arquivo e seu conteúdo.
- Todos arquivos devem incluir informação de copyright.
- Escreva comentários descritivos antes de cada função.
- Todo arquivo de cabeçalho deve conter o mecanismo para evitar
múltiplas inclusões do mesmo arquivo.
- Escolha nomes de variáveis que sugiram o seu uso.
- Na definição de classes, ordene a declaração
de seções na ordem: pública, protegida, privativa.
- Não define funções membro dentro da definição da classe.
- Sempre explicite o tipo de retorno de uma função.
- Não especifique dados na seção pública de uma classe.
- Funções pequenas (por exemplo, simplesmente retornar um valor de
um membro da classe) devem ser definidas como função em linha.
- Contrutores e destrutores não devem ser definidos como funções
em linha.
- Uma função membro que não afeta o estado de um objeto deve ser
declarada como const.
- Se um construtor de uma classe usa new, então um
construtor de cópia deve ser fornecido para esta classe.
- Uma classe que usa new para alocar instâncias gerenciadas
pela classe deve definir um operador de atibuição.
- Use sobrecarga de operadores com parcimônia e de maneira uniforme.
- Quando dois operadores têm usualmente significados opostos (como
==
e !=
), é apropriado definir ambos.
- Evite funções com muitos argumentos.
- Evite o uso de número variável de argumentos.
- Quando sobrecarregando funções, todas as
variações devem ter a
mesma semântica, isto é, devem ser usadas para o mesmo fim.
- Uma função pública nunca deve retornar uma referência ou um
apontador para uma variável local.
- Evite funções longas e complexas.
- Não use a diretiva de processador #define para definir
macros; prefira a definição de funções em linha.
- Define constantes usando const ou enum; nunca use
#define.
- Evite o uso de valores numéricos no código; dê preferência ao
uso de valores simbólicos.
- Variáveis devem ser declaradas dentro do menor escopo possível.
- Toda variável que é declarada deve receber um valor antes de ser
utilizada.
- Evite o uso de apontadores para apontadores.
- Evite o uso de conversões explícitas de tipos (casts).
- Não escreva código que dependa de funções que
usam conversão implícita de tipos.
- O código após um case deve sempre ser seguido por um
comando break.
- Um comando switch deve sempre ter uma opção
default para manipular casos inesperados.
- Nunca use goto.
- Sempre use unsigned para uma variável que se espera que
não vá assumir valores negativos.
- Evite o uso de continue.
- O uso de break para sair de laços deve ser preferido ao
uso de variáveis de flag.
- Use parênteses para deixar claro a ordem de avaliação de
operadores em expressões.
- Não use malloc, realloc ou free.
- Sempre use colchetes vazios ([]) quando removendo arranjos com
delete.
- Evite usar dados globais.
- Não aloque memória esperando que outro alguém
irá desalocá-la mais tarde.
- Verifique os códigos de falhas de funções de bibliotecas por
mais seguro que as chamadas possam parecer.
- Não assuma que um int tem 32 bits ou que tem o mesmo
tamanho de um long ou de um apontador.
- Não assuma que você sabe como um certo tipo de dado é
representado em memória.
Next: Referências
Up: Desenvolvimento de Aplicações
Previous: Implementação
  Sumário
Ivan Luiz Marques Ricarte
2001-06-01