[[TOC(heading=This section pages, WikiStart, AnalisisDominio16, IdentificacionFuncionalidades16, PropuestaDesarrollo16, EstandaresDesarrollo16, AnalisisyDiseno16, PrototipoInterfaz16, Codificacion16, Pruebas16, Liberacion16, noheading, heading=Tabla de Contenido)]] [[TOC(heading=This section pages, WikiStart, noheading, AnalisisDominio, PropuestaDesarrollo, PlanProyecto, EstandaresDesarrollo, IdentificacionFuncionalidades, Codificacion, PrototipoInterfaz, Liberacion, heading=Tabla de Contenido)]] = 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ /* 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ /* 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ /* 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ /* 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ /* 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: {{{ #!div style="font-size: 80%" Code highlighting: {{{#!C++ /* Clase que representa una lista mediante arreglos Autor: José Ruiz */ class MainWindow : public QMainWindow { // ... Otras implementaciones ... const size_t & getSize() const { return size; } }; }}} }}}