IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Comment structurer l'arborescence en C++ ?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Comment structurer l'arborescence en C++ ?
    Bonjour,

    Dans le cadre d'un apprentissage du C++, j'ai repris un programme Java que j'avais effectué pour le réécrire en C++.

    Toutefois, je ne suis pas sûr de quel type d'arborescence adopter.

    En Java, j'avais séparé les "types" d'objets en différents packages et donc quand on avait un certain package sous les yeux, on savait qu'on y trouverait que certaines classes précises.
    Dois-je faire de même en C++ ?

    J'ai fais un peu de C avant et je structurais en créant des répertoires src, include et bin. Dans src et include, je créeais d'autres répertoires permettant de séparer les TAD, l'IHM et la logique métier.
    Dois-je aussi adopter la même structuration en C++ ?

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il n'y a pas de règle précise. Dans certains langages objets, on encourage (voire force) le développeur à avoir un module (fichier+entête) par classe. Du coup, on se retrouve assez vite avec beaucoup de tout petits fichiers, qu'on organise dans un système arborescent et complexe de répertoires.

    C'est faisable en C++, mais le plus souvent on fait des modules "plus gros": quelques classes qui collaborent entre elles (ou pas d'ailleurs, souvent tu finis avec un fichier "utils.cpp" qui contient tout ce que tu n'as pu mettre ailleurs), et qui communiquent avec le monde extérieur au travers d'une interface, contenue dans les fichiers entete, qu'on essaye de rendre minimale. La règle de base, c'est d'essayer d'avoir une interface aussi simple et cohérente que possible.

    Quant à la taille des fichiers, c'est comme celle des fonctions: une question de gout. Il y a des gens qui considèrent que 30 lignes pour une fonction, c'est déjà trop, d'autres qui considèrent que c'est plutot au dela de 300. C'est pareil pour les modules. Je connais des programmeurs qui ne veulent rien voir au delà de 200 lignes, et d'autres qui pensent que 2000 ca va.

    La question de fond, c'est de savoir si toi (et tes coprogrammeurs si tu travailles en groupe) te sent mieux dans un projet avec 25 fichiers de 2000 lignes, ou 250 fichiers de 200.

    Dans le premier cas, le découpage en répertoire n'est pas nécessaire, dans le second il est indispensable.

    Francois
    Dernière modification par Invité ; 13/02/2010 à 13h45.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Comme l'a fais remarquer fcharton, il n'y a pas de règle définitive sur l'organisation de l'arborescence des fichiers.

    Cependant, la plupart des EDI nous incitent à créer une unité de compilation par classe (une unité de compilation étant un couple *.h + *.cpp).

    De plus, il existe le concept d'espace de noms en C++ qui correspond, en gros, à des "boites" dans lesquelles on regroupe tout ce qui "va bien ensemble":

    Par exemple, si tu veux créer un jeu video, tu auras vraisemblablement un ensemble de classes qui travaille ensemble pour gérer les sons, un autre pour gérer l'affichage, un troisième pour gérer l'intelligence artificielle, etc.

    On peut décemment estimer que chaque espace de noms risque de communiquer avec un ou plusieurs autre(s): l'espace de noms "game" risque, en effet, de communiquer avec à peu près tous les autres.

    Cependant, on tentera autant que possible de limiter au maximum les "points de communications" entre les différents espaces de noms.

    Ce qui s'en rapproche le plus en java, bien qu'il y ait un certain nombre de différences est la notion de package

    L'habitude que j'ai prise est de créer une arborescence qui rappelle l'organisation des espaces de noms.

    Ainsi, dans le dossier de mes projets, si j'ai les espaces de noms Game, AI, Sound, Screen, on trouvera des dossiers portant les mêmes noms dans lesquels les différentes unités de compilation prendront place.

    Evidemment, dans chaque dossier tu trouvera au minimum un dossier include (contenant les fichiers d'en-tête) et un dossier src (contenant les fichiers d'implémentation), et sans doute un dossier test (contenant les tests unitaires), mais tu peux, le cas échéant, ajouter des dossiers "particuliers" comme priv pour contenir ce qui est à usage exclusivement interne

    Maintenant, ce que fcharton a bien expliqué reste tout à fait vrai: je préfères personnellement n'avoir qu'une classe (et ses classes imbriquées, s'il y en a) par unité de compilation, ce qui tend à créer des fichiers relativement "peu importants" mais nombreux...

    D'autres préféreront créer des unités de compilation regroupant plusieurs classes qui "vont bien ensemble".

    Cela diminue le nombre de fichiers, mais augmente en retour d'autant la taille des fichiers
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. comment structurer une modél. UML - projet J2EE avec pattern
    Par RocketArena dans le forum Architecture
    Réponses: 18
    Dernier message: 20/07/2007, 19h20
  2. Comment structurer une arborescence
    Par kase74 dans le forum Schéma
    Réponses: 1
    Dernier message: 24/05/2007, 11h40
  3. Réponses: 2
    Dernier message: 13/07/2006, 12h05
  4. [HTML] Comment faire une arborescence en html
    Par jehlg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/02/2006, 23h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo