Difference between revisions of "Buenas prácticas"

From Asibot & HOAP3 & TEO Wiki
Jump to navigation Jump to search
Line 8: Line 8:
 
* Utiliza UpperCamelCase para nombres de librerías y de clases.
 
* Utiliza UpperCamelCase para nombres de librerías y de clases.
 
* Utiliza lowerCamelCase para nombres de ejecutables.
 
* Utiliza lowerCamelCase para nombres de ejecutables.
 +
* En C++, evita el uso de variables globales.
 
* Mantén un main() minimalista: implementa tu programa como una clase.
 
* Mantén un main() minimalista: implementa tu programa como una clase.
 
** En C++ solemos hacer que la clase principal herede de [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html yarp::os::RFModule], con lo cual se dispone de un [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#a6c3880961b00b0a7eb527d62214169b7 configure(yarp::os::ResourceFinder& rf)] que recibe un diccionario ([http://www.yarp.it/classyarp_1_1os_1_1ResourceFinder.html rf]) pasado desde el main(), un [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#a58ce26fc6fdcb6eb4af8e8dc678e095e close()] que se llama con la señal CRTL+C, y una función [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#a37ee5baa17ce243458a1dff209e878b7 updateModule()] llamada periódicamente, con una periodicidad lenta [segundos] dada por [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#ace2fdadde1a2690f274079fabd6420d2 getPeriod()]. Si se necesita una función que se llame rápidamente, heredando de [http://www.yarp.it/classyarp_1_1os_1_1RateThread.html yarp::os::RateThread] se obtiene una función [http://www.yarp.it/classyarp_1_1os_1_1RateThread.html#ac3c97e766733b41a45c799aa0c05598f run()] que es llamada con una periodicidad [milisegundos] especificada en el constructor.
 
** En C++ solemos hacer que la clase principal herede de [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html yarp::os::RFModule], con lo cual se dispone de un [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#a6c3880961b00b0a7eb527d62214169b7 configure(yarp::os::ResourceFinder& rf)] que recibe un diccionario ([http://www.yarp.it/classyarp_1_1os_1_1ResourceFinder.html rf]) pasado desde el main(), un [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#a58ce26fc6fdcb6eb4af8e8dc678e095e close()] que se llama con la señal CRTL+C, y una función [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#a37ee5baa17ce243458a1dff209e878b7 updateModule()] llamada periódicamente, con una periodicidad lenta [segundos] dada por [http://www.yarp.it/classyarp_1_1os_1_1RFModule.html#ace2fdadde1a2690f274079fabd6420d2 getPeriod()]. Si se necesita una función que se llame rápidamente, heredando de [http://www.yarp.it/classyarp_1_1os_1_1RateThread.html yarp::os::RateThread] se obtiene una función [http://www.yarp.it/classyarp_1_1os_1_1RateThread.html#ac3c97e766733b41a45c799aa0c05598f run()] que es llamada con una periodicidad [milisegundos] especificada en el constructor.

Revision as of 18:19, 7 June 2016

  • Siempre, para cualquier archivo de trabajo, por muy insignificante o borrador que parezca, utiliza uno de los repositorios compartidos:
    • Software y hardware: GitHub (GIT, público). Consulta con tu tutor (que posiblemente te redirija a Juan, David o Raúl) si dudas en qué repositorio trabajar. Acomoda tu .gitignore al tipo de proyecto, para evitar subir ficheros que no se deberían (binarios, backups, y ficheros residuales varios).
    • Redacción de publicaciones: Consulta con tu tutor (que posiblemente te redirija a Juan) para la URL exacta, distribuidos a través de http://robots.uc3m.es/svn/* (SVN, privado)
  • NO utilizar números en nombres de ficheros para indicar versiones/intentos/iteraciones... ¡Para eso ya existen los hash y tag de los sistemas de control de versiones!

Programación

  • Para crear un nuevo proyecto C/C++, utiliza project-generator.
  • Si hay problema con project-generator, coméntalo en su sección de issues. Si sigues con motivos en contra, por lo menos no dejes de utilizar CMake para cualquier proyecto C/C++.
  • Utiliza UpperCamelCase para nombres de librerías y de clases.
  • Utiliza lowerCamelCase para nombres de ejecutables.
  • En C++, evita el uso de variables globales.
  • Mantén un main() minimalista: implementa tu programa como una clase.
  • Si tienes un dispositivo, impleméntalo como una clase, idealmente como un YARP device.
  • Tests, tests, tests! Idealmente, para cada clase, y desarrollado a la par de la clase.
  • Más (por organizar):