wiki:EstandaresDesarrollo

Estándares de Desarrollo del Proyecto

Sobre los archivos

Los nombres de los archivos de cabecera deben terminar con la extensión ".H" mientras que los archivos de fuentes deben terminar con la extensión ".C".

Si un par de archivos (cabecera y fuente) son contenedores de una clase, éstos deben tener el mismo nombre de la clase que contienen con la extensión respectiva en letras minúsculas.

Por cada clase deben existir un par de archivos para su definición (archivo de cabecera) y su implementación (archivo fuente).

Cada archivo que se cree debe comenzar con un bloque de comentario multilínea que contenga el texto de la licencia, por ejemplo:

Code highlighting:

/*
   Texto de la licencia
*/

Luego se coloca otro bloque de comentario multilínea que contenga una breve descripción del archivo, autor o autores y la fecha de creación, por ejemplo:

Code highlighting:

/*
   Este archivo contiene la implementación de ...

   Autor(es): José Ruiz, Julie Vera

   Fecha de Creación: 15/04/2015
*/

Normas de Codificación

Las Variables

Asignarles nombres significativos a lo que almacenan y plantearlos como sustantivos.

No todo el tiempo una variable tiene un nombre significativo por sí mismo, en esos casos agregar un comentario a la derecha de la declaración que explique brevemente su significado, si el comentario es multilínea, agregarlo antes de la declaración de la variable.

Escribir el nombre de las variables comenzando con una letra minúscula. Cada palabra consecutiva en un nombre de variable debe comenzar con una letra mayúscula.

Inicializarlas al momento de declararse y si se coloca una explicación a su lado.

Usar una línea diferente para cada declaración.

Por ejemplo:

Code highlighting:

int age = 18; 
int x = 0; // Componente x de un punto 
/*
  Componente y de un punto
  Ejemplo multilínea
*/
int y = 0;

Las Funciones

Asignarles nombres significativos a la operación que efectúen y plantearlos como verbos.

Escribir un bloque de comentario multilínea que contenga una breve explicación de lo que hacen antes de su definición. Nota: Si es muy evidente la operación que ésta realice, se puede ignorar este paso.

Escribir el nombre comenzando con una letra minúscula. Cada palabra consecutiva en un nombre de función debe comenzar con una letra mayúscula.

Para los parámetros de las funciones usar las mismas especificaciones de las variables.

Por ejemplo:

Code highlighting:

/*
  Efectúa la división de dos números reales (a / b), si b es igual a 0 arroja
  excepción de error de dominio.
*/
float divideFloat(const float & a, const float & b)
{
  if (b == 0)
    throw std::domain_error("Division by 0");

  return a / b;
}

Clases

Escribir mediante un comentario multilínea una breve explicación de los que representa la clase así como el autor o autores de ésta.

Asignarles nombres significativos de lo que éstas representen y plantearlos como sustantivos.

Escribir los nombres con el estilo de nombres propios, es decir, la primera letra de cada palabra que lo conforme en mayúscula y el resto en minúscula. Cada palabra consecutiva en un nombre de clase debe comenzar con una letra mayúscula.

Ejemplo de definición de una clase:

Code highlighting:

/* Clase que representa una lista mediante arreglos

   Autor: José Ruiz
 */
class MainWindow : public QMainWindow
{

};

A los atributos de una clase aplicarle las mismas especificaciones de una variable.

A los metodos de una clase aplicarle las mismas especificaciones que a las funciones.

Consideraciones especiales sobre métodos

Constructores

Asignarle valor inicial a todos los atributos de la clase, usar el espacio de inicialización del constructor para el valor inicial y el espacio de implementación para cualquier operación adicional sobre los atributos.

Siguiendo con el ejemplo de la clase definida anteriormente:

Code highlighting:

/* Plantilla que representa una lista mediante arreglos

   Recibe como parámetro plantilla el tipo de elemento que va a almacenar.

   Autor: José Ruiz
 */
class MainWindow : public QMainWindow
{
  size_t size;  // Almacena el tamaño del arreglo
  T *    array; // Arreglo de elementos de tipo T

public:
  MainWindow(const size_t & _size)
    : size(_size), array(nullptr)
  {
    array = new T[size];
  }
};

Modificadores y Observadores

A los observadores colocarles como nombre el mismo nombre del atributo al cual observa con el prefijo 'get'.

A los modificadores colocarles como nombre el mismo nombre del atributo al cual observa con el prefijo 'set'.

Por ejemplo para consultar el tamaño de la lista:

Code highlighting:

/* Clase que representa una lista mediante arreglos

   Autor: José Ruiz
 */
class MainWindow : public QMainWindow
{

  // ... Otras implementaciones ...

  const size_t & getSize() const
  {
    return size;
  }
};
Last modified 8 years ago Last modified on Aug 16, 2016, 4:04:46 PM