Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
terralib:padraocodigo [2008/04/01 11:55] laercio |
terralib:padraocodigo [2008/04/02 11:32] (current) laercio |
||
---|---|---|---|
Line 4: | Line 4: | ||
===== Padronização de Nomes ===== | ===== Padronização de Nomes ===== | ||
[[C:Nomes|Padronização de nomes de arquivos, classes, estruturas, métodos, etc.]] | [[C:Nomes|Padronização de nomes de arquivos, classes, estruturas, métodos, etc.]] | ||
+ | |||
+ | |||
===== Padronização de Código ===== | ===== Padronização de Código ===== | ||
- | [[C:FormatacaoCodigo|Padrões de Estilo para Programar em TerraLib]] | + | [[C:FormatacaoCodigo|Formatação do código - indentação, espaços, etc.]] |
===== Padronização de Documentação DOxygen ===== | ===== Padronização de Documentação DOxygen ===== | ||
+ | [[padraodocumentacao|Comentários para documentação com DOxygen.]] | ||
===== Convenção de Programação ===== | ===== Convenção de Programação ===== | ||
+ | [[convencaoprograma|Recomendações para programação em C++]] | ||
- | ===== Resumo e Exemplos ===== | ||
- | [[resumo|Resumo]] | ||
- | ===== Padronização de Nomes ===== | ||
+ | ===== Resumo e Exemplos ===== | ||
+ | [[resumo|Resumo]] | ||
- | ===== 1. Arquivo ===== | + | [[terralib:exemplo1|Exemplo 1]] - Arquivo **.h** com uma classe |
- | + | ||
- | + | ||
- | + | ||
- | ==== 1.1 Nome ==== | + | |
- | * UpperCamelCase + prefixo **Te** | + | |
- | * Extensão **.h** e **.cpp** | + | |
- | * Mesmo nome da classe, estrutura ou namespace do seu conteúdo | + | |
- | * Para siglas usar todas as letras em maiúsculas | + | |
- | + | ||
- | + | ||
- | + | ||
- | ==== 1.2 Estrutura ==== | + | |
- | * ''<Enter>'' na última linha | + | |
- | * Máximo de 80 colunas por linha | + | |
- | * Uma classe ou estrutura por arquivo | + | |
- | * Toda a implentação deve estar no **.cpp** exceto as funções e métodos ''inline'' e que usam templates | + | |
- | * Identação com 2 espaços ao invés da tabulação | + | |
- | * Todo **.h** deve ter a macro associada ao arquivo | + | |
- | * Ordem no **.h**: | + | |
- | - Definição da macro associada ao arquivo | + | |
- | - Definição de outras macros | + | |
- | - Inclusão de arquivos | + | |
- | - Includes de arquivos C | + | |
- | - Includes de arquivos locais | + | |
- | - Includes de arquivos de plataforma | + | |
- | - Includes de arquivos STL | + | |
- | - Declaração forward | + | |
- | - Namespace | + | |
- | * Inclusão de arquivos | + | |
- | * Usar ''<...>'' para externos e ''"..."'' para locais | + | |
- | * Usar path relativo | + | |
- | * Usar explicitamente os namespace externos. Ex: //std::string | + | |
- | // | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== 1.3 Comentário ==== | + | |
- | * Todo **.h** terá um cabeçalho padrão contendo informações sobre licença, parceiros, etc. | + | |
- | * Os comentários para gerar a documentação DOxygen: | + | |
- | * Devem seguir o estilo Qt (http://www.stack.nl/~dimitri/doxygen/docblocks.html) sem os *'s intermediários | + | |
- | * Devem seguir o padrão abaixo e ter no mínimo as tags **\file**, **\brief** e **\author**: | + | |
- | <code cpp> | + | |
- | /*! | + | |
- | \file file name | + | |
- | \brief brief description about the file. | + | |
- | Brief description continued. | + | |
- | + | ||
- | More detailed description. | + | |
- | + | ||
- | \author (?) | + | |
- | */ | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== 1.4 Exemplo ==== | + | |
- | [[terralib:exemplo1|Veja exemplo]] | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== 2. Macro ===== | + | |
- | + | ||
- | ==== Nome ==== | + | |
- | * Usar prefixo //TE_// | + | |
- | * Usar UPPERCASE e underscores //(_)// para separar palavras | + | |
- | * Para macros associadas a arquivos **.h** usar a extensão como sufixo //_H// | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Comentário ==== | + | |
- | O comentário para gerar a documentacao DOxygen deve seguir o padrão abaixo. A descrição breve | + | |
- | é obrigatória e a descrição detalhada é opcional no caso de macros: | + | |
- | <code cpp> | + | |
- | //! A brief description. | + | |
- | /*! | + | |
- | A more elaborate description. | + | |
- | */ | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | ==== Exemplo ==== | + | |
- | <code> | + | |
- | #ifndef TE_CONNECTION_POOL_H | + | |
- | #define TE_CONNECTION_POOL_H | + | |
- | .... | + | |
- | #define TE_MAX_FLOAT 3.4e37 | + | |
- | .... | + | |
- | #endif //end TE_CONNECTION_POOL_H | + | |
- | </code> | + | |
- | + | ||
- | [[terralib:exemplo1|Veja exemplo completo]] | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===== Namespace ===== | + | |
- | Usar sempre o namespace **TerraLib** para todo o kernel. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Comentário ==== | + | |
- | O comentário para gerar a documentacao DOxygen deve seguir o padrão abaixo. A descrição breve | + | |
- | é obrigatória e a descrição detalhada é opcional no caso de namespace: | + | |
- | <code cpp> | + | |
- | //! A brief description. | + | |
- | /*! | + | |
- | A more elaborate description. | + | |
- | */ | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Exemplo ==== | + | |
- | [[terralib:exemplo1|Veja exemplo]] | + | |
- | + | ||
- | + | ||
- | ===== Classe e Estrutura ===== | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Nome ==== | + | |
- | * Nome | + | |
- | * UpperCamelCase + prefixo **Te** | + | |
- | * Usar substantivo | + | |
- | * Usar o plural para nomes de coleções | + | |
- | * Para siglas usar todas as letras em maiúsculas | + | |
- | + | ||
- | * Nome dos membros | + | |
- | * lowerCamelCase + sufixo "_" | + | |
- | + | ||
- | * Nome dos métodos | + | |
- | * lowerCamelCase | + | |
- | * Usar sempre os prefixos "get" e "set" para acessar os membros. No caso de membro booleano, usar o prefixo "is" no método para acessá-lo. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Estrutura ==== | + | |
- | + | ||
- | * Os métodos e membros devem seguir a seguinte ordem: | + | |
- | - Métodos públicos | + | |
- | - Métodos protegidos | + | |
- | - Métodos privados | + | |
- | - Membros protegidos | + | |
- | - Membros públicos | + | |
- | * Usar explicitamente a palavra //public// | + | |
- | * No valor de retorno dos métodos usar sempre que possível //const// e referência | + | |
- | * Usar //const// nos métodos que não alteram o estado do objeto, ou seja, que não alteram os valores dos membros | + | |
- | * Nos parâmetros dos métodos usar sempre que possível //const// e referência | + | |
- | * Sempre usar nomes nos parâmetros | + | |
- | * Quando o método retorna uma estrutura, essa deve ser passada como parâmetro do método por referência. Nesse caso, o método não deve limpar essa estrutura antes de preenchê-la | + | |
- | * Usar “other” para nomes de parâmetros nos construtores de cópia e operadores de atribuição | + | |
- | * Usar os mesmos nomes dos membros nos métodos que os acessam diretamente | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ==== Comentário ==== | + | |
- | * Os comentários para gerar a documentação DOxygen: | + | |
- | * Devem seguir o estilo Qt (http://www.stack.nl/~dimitri/doxygen/docblocks.html) sem os *'s intermediários | + | |
- | + | ||
- | === Classe e Estrutura === | + | |
- | * No caso de classes e estruturas é obrigatório colocar as descrições breve e detalhada. A tag **\sa** é opcional: | + | |
- | + | ||
- | <code cpp> | + | |
- | //! A brief description of class or struct. | + | |
- | /*! | + | |
- | A more elaborate description of class or struct. | + | |
- | \sa other definitions related to the class or struct | + | |
- | */ | + | |
- | </code> | + | |
- | + | ||
- | === Método === | + | |
- | * Os métodos devem conter no mínimo uma descrição breve, a descrição de todos os seus parâmetros (tag **\param**) e do seu valor de retorno (tag **\return**). A descrição detalhada é opcional. | + | |
- | + | ||
- | <code cpp> | + | |
- | //! A brief description. | + | |
- | /*! | + | |
- | A more elaborate description of class or struct. | + | |
- | \param name description | + | |
- | \return description | + | |
- | */ | + | |
- | </code> | + | |
- | + | ||
- | === Membro === | + | |
- | * A descrição do membro deve vir depois de sua definição. | + | |
- | + | ||
- | <code cpp> | + | |
- | int member01_; //!< Brief description after the member | + | |
- | int member02_; //!< Brief description after the member | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | ==== Exemplo ==== | + | |
- | [[terralib:exemplo1|Veja exemplo]] | + | |
+ | [[terralib:exemplo2|Exemplo 2]] - Arquivo **.cpp** com uma classe |