Style de codage

Le CodingStyle employé par VLE est inpiré de celui du projet Linux de Linus Torvalds. La plupart des questions engendrées par la lecture des paragraphes suivants trouvent leurs réponses dans ce CodingStyle disponible librement sur le site http://www.kernel.org

Format d'une classe
Dans une classe, nous définissons dans l'ordre les parties d'une classe : les définitions, les fonctions et les attributs avec comme priorité : public, protected et private. Cet ordre est défini dans ce sens car elle montre à l'utilisateur de votre classe les fonctions utiles en premier puisqu'il ne peut utiliser que les données et méthodes publiques et protégées. Par exemple :

Toutes les classes ou fonctions que vous déclarez doivent faire parti d'un namespace. Ne polluez jamais l'espace de nom avec des noms de classes ou de fonctions globales. Une manière simple et courament employée dans les projets C++ est d'utiliser la règle : un répertoire = un namespace.

Ainsi, si vous développez un plugin de modélisation, vos classes doivent se trouver dans le namespace vle::gvle::plugins. Par exemple, le plugin de simulation Generator est défini comme :

Règles de nommage

 * dossier : Les noms de répertoires sont en minuscules afin de respecter le nom des namespaces.
 * namespace : Tout en minuscule, comme le noms des dossiers.
 * classe : Les premières lettres de chaque nom en majuscule.
 * méthode : la première lettre des noms de méthodes commence par une minuscule.
 * attribut d'une classe : il commence par la lettre minuscule m (pour member) suivie d'une majuscule.

Tabulations et espaces
Une fonction ne peut dépasser les limites de 50 lignes et 80 colonnes pour permettre une meilleure lecture du code. De même, les indentations se font sur 4 caractères alors que la taille d'une tabulation est de 8 caractères. Enfin, une fonction ne peut contenir plus de six variables locales, et une fonction ou un membre d'une classe ne peut contenir plus de six paramètres locaux.

Dans le même ordre d'idée :

pointeurs :
 * sur un ligne se trouve une seule instruction :
 * Pas d'espace entre un nom de fonction et la parenthèse :
 * Entrez un espace après if, while, switch, etc. :
 * Entrez un espace après une virgule et un point-virgule :
 * Entrez un espace avant et après =, +, /, etc. :
 * Pas d'espace entre le type de la variables et les cractères références et
 * Pas d'espace entre les opérateurs d'adresses et les variables :

Placement des accolades
La politique de placement des accolades est celles définient par Kernighan et Ritchie c'est-à-dire, une accolade se trouve sur l'instruction de la ligne sauf dans le cas d'une définition de fonction. Les exemples suivants montrent les différents cas de placement :

Gérer les erreurs via les exceptions
L'environnment VLE utilise les exceptions pour détecter les erreurs en cours de fonctionnement. Le fichier vle/utils/Exception.hpp définit quelques classes d'exceptions. Si vous souhaitez lever une exception, celle-ci doit hériter de la classe std::exception (défini dans la bibliothèque standard). Vous pouvez utiliser les exceptions standards :


 * std::logic_error : pour reporter les problèmes survenus dans la logique interne du programme.
 * std::domain_error : pour reporter une erreur de domaine dans le sens mathématique du terme.
 * std::invalid_argument : pour reporter les arguments invalides des fonctions.
 * std::length_error : quand un objet est construit avec une taille qui excède la taille maximum permise.
 * std::out_of_range : représente les arguments dont les valeurs dépassent les limites comme l'accès à un élément d'un tableau.
 * std::runtime_error</tt> : représente les erreurs ne peuvant être révéler que lors de l'exécution du programme.
 * std::range_error</tt> : Pour reporter une erreur de limite sur les types.

Ou les exceptions définies dans VLE (fichier vle/utils/Debug.hpp</tt>) :


 * vle::utils::FileError</tt> : pour reporter une erreur lors de l'accès à un fichier (détection, ouverture, lecture, écriture).
 * vle::utils::ParseError</tt> : pour reporter une erreur lors de la  lecture d'un fichier \texttt{XML}.
 * vle::utils::InternalError</tt> : pour reporter une erreur interne  dans un programme.

Assertions
Une méthode très simple pour détecter les erreurs dans un programme est d'utiliser les fonctions d'assertions définies dans le fichier cassert</tt>. Par exemple :

Attention cependant la commande assert</tt> fait un appel à abort</tt> ce qui a pour effet de fermer l'application sur une erreur. Si vous voulez juste informer l'appelant de votre méthode de l'arrivée d'une erreur, il faut préférer utiliser une levée d'exception classique :

Commentaires
Les commentaires font partis intégrante d'un programme. Dans la plateforme VLE, toutes les fonctions doivent contenir des commentaires décrivant le rôle de la fonction et non son fonctionnement. Aucun commentaire ne doit venir s'insérer dans le code de la fonction.

Le programme doxygen (Une description complète du système doxygen se trouve sur le site : http://www.doxygen.org), à partir des sources commentées et de balises spéciales, réalise une documentation complète.

Les fichiers du projet d'extension .cpp</tt> et .hpp</tt> possèdent une entête identique définissant la licence (de type GNU : GPL) et les informations sur les auteurs :