OVH Cloud OVH Cloud

organisation des .cpp

10 réponses
Avatar
Cyril.Gruau
Est-ce que cela vous arrive
de separer l'implementation d'une meme classe en plusieurs .cpp ?

J'en suis venu a cette idee car les classes
de la bibliotheque sur laquelle je travaille,
sont tellement imbriquees
que si je veux developper un projet
qui fait appel a tres peu de classes et de methodes,
je suis quasiment oblige de recompiler toutes les methodes.

Sans aller jusqu'a : une methode par fichier .cpp,
est-ce que vous avez une politique sur la specialisation des .cpp ?

10 réponses

Avatar
Christophe Lephay
Cyril Gruau wrote:
En fait, je cherche un moyen de dire a l'editeur de lien :
ne resoud que les symboles dont tu as besoin,
et non pas tous ceux que tu vois
afin de ne pas m'obliger a tout compiler.


Il y a un peu contradiction dans les termes...

en général, l'éditeur de lien ne prend que ce dont il a besoin. Le cas
échéant, tu peux l'aider en lui fournissant certaines options (la manière
est propre à chaque éditeur de lien). Concernant la compilation, il n'y a
pas de raison que le compilateur compile du code inutilisé, à moins que tu
n'es tout mis dans des fichiers entêtes. Par ailleurs, si les entêtes sont
de taille conséquente, beaucoup de compilateurs permettent de les
précompiler si elles ne sont pas modifiées (là encore, spécifique à chaque
compilateur).

Chris

Avatar
Jacti

Est-ce que cela vous arrive
de separer l'implementation d'une meme classe en plusieurs .cpp ?


C'est plutôt un problème de conception.
Ce n'est pas du tout recommandé car ça complique les dépendances
et bonjour la maintenance...
Personnellement, ça ne m'est jamais arrivé.

J'en suis venu a cette idee car les classes
de la bibliotheque sur laquelle je travaille,
sont tellement imbriquees
que si je veux developper un projet
qui fait appel a tres peu de classes et de methodes,
je suis quasiment oblige de recompiler toutes les methodes.


Je ne suis pas sûr de comprendre ce que tu dis.
Veux-tu dire que la bibliothèque que tu utilises est mal fichue ?

Sans aller jusqu'a : une methode par fichier .cpp,
est-ce que vous avez une politique sur la specialisation des .cpp ?


Pour les classes qu'on développe : à un fichier .h doit correspondre
un fichier .ccp.
Dans le cas de l'héritage, si les classes dérivées sont petites, on peut
les regrouper
dans un seul .h.
Ma politique c'est que les classes abstraites sont toujours seules dans
un .h
car elles représentent l'interface (donc le contrat avec les classes
"clientes").

La règle c'est de modulariser au maximum.
J'ai fait un simulateur de processeur dont la plus grosse méthode
faisait 6 lignes (oui six !) d'instructions (je ne compte pas l'en-tête
ni les déclarations).

Jacti

Avatar
Cyril.Gruau
On Wed, 29 Oct 2003 17:27:14 +0100, Jacti
wrote:

Je ne suis pas sûr de comprendre ce que tu dis.


En fait, je cherche un moyen de dire a l'editeur de lien :
ne resoud que les symboles dont tu as besoin,
et non pas tous ceux que tu vois
afin de ne pas m'obliger a tout compiler.

Cyril

Avatar
Luc Hermitte
(Cyril Gruau) wrote in news:3f9fd807.80483158
@news.cma.fr:

Est-ce que cela vous arrive de separer l'implementation d'une meme classe
en plusieurs .cpp ?


Une fois. Dans le cas d'un gros composant COM qui implémentait plusieurs
interfaces.


--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Avatar
Jean-Marc Molina
Bonjour Cyril,

1 classe = 1 .h et 1.cpp
Après tu peux organiser tes classes en paquets/modules en utilisant les
namespaces.
Niveau compilation en utilisant des outils pros comme Visual C++ tu n'auras
pas de problèmes de compilation, c'est incrémental et seuls les fichiers
modifiés et les dépendances sont recompilés. Gain de temps :).
Sinon il existe aussi des design patterns pour te faciliter la vie, en
utilisant les facades et Visual C++ on peut arriver à quelque chose de pas
mal, moi je préfère en rester aux systèmes des includes à inclure pour
compiler un .cpp en particulier. Au moins on garde le contrôle et on sait ce
qu'on utilise. Par contre niveau maintenance ça peut être laborieux.

JM

--
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Avatar
Cyril.Gruau
On Wed, 29 Oct 2003 17:10:29 +0100, "Christophe Lephay"
wrote:

en général, l'éditeur de lien ne prend que ce dont il a besoin.


Et pourtant : j'ai un editeur de lien qui veut resoudre tous les
symboles qu'il trouve dans le fichier objet (.o ou .obj),
ce qui m'oblige a lui fournir d'autres fichiers objet,
pour lesquels il essaie a nouveau de resoudre tous les symboles.

Finalement, je sui oblige de lui fournir tous les fichiers objets ou
presque, ce qui m'oblige a compiler tous les fichiers sources
(ou presque).

Le cas échéant, tu peux l'aider en lui fournissant certaines options (la manière
est propre à chaque éditeur de lien).


Pour l'editeur de lien de gcc, quelles sont ces options par exemple ?
Pour l'editeur de lien de VC++ ?
Pour celui de Portland group ?

Ca m'interesse beaucoup !

Cyril

Avatar
Cyril.Gruau
On Thu, 30 Oct 2003 11:20:57 +0100, "Jean-Marc Molina"
wrote:

Bonjour Cyril,

1 classe = 1 .h et 1.cpp


Oui, on m'a aussi appris cette regle.
Je suis en train de me demander si elle n'est pas idiote.

Cyril

Avatar
Zouplaz
Cyril Gruau - :

On Thu, 30 Oct 2003 11:20:57 +0100, "Jean-Marc Molina"
wrote:

Bonjour Cyril,

1 classe = 1 .h et 1.cpp


Oui, on m'a aussi appris cette regle.
Je suis en train de me demander si elle n'est pas idiote.

Cyril




Bin moi je suis confronté à ce problème : j'ai une série de classes
Action_X, Action_Y et ainsi de suite. Chaque classe est une spécialisation
de Action et la définition est relativement légère (redefinition d'une
méthode Init pour chaque classe). Quant au code il est court aussi, j'ai
donc groupé toutes mes classes Action_ dans un .h et le code dans un .cpp
sinon j'aurais 30 fichiers fois 2... Un peu lourdingue quand même !!


Avatar
kanze
(Cyril Gruau) wrote in message
news:...
On Thu, 30 Oct 2003 11:20:57 +0100, "Jean-Marc Molina"
wrote:

1 classe = 1 .h et 1.cpp



(En passant, ce sont des .hh et des .cc.)

Oui, on m'a aussi appris cette regle. Je suis en train de me demander
si elle n'est pas idiote.


Comme toute règle, elle est bien ou elle convient, et idiote où elle ne
convient pas. Pour les classes de base, comme ma GB_String pré-norme,
c'est bien une fonction pro .cc ; c'est un peu fastidieux pour
l'écriture, mais quand l'interface est large, l'utilisateur ne doit être
obligé à n'incorporer que le minimum dont il a besoin. Dès qu'il y a des
fonctions virtuelles, en revance, c'est bien un .cc pour la classe
entière.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Jean-Marc Molina
En effet ça dépend du contexte. Pour les projets sur lesquels j'ai
travaillés, on a toujours opté pour 1 .cpp et 1 .h par classe.
Dans le cas d'héritage on peut préfixer ses noms de fichier par le nom de la
classe de base. On peut aussi utiliser des répertoires pour classer ces
classes par catégories, de même pour gérer ses modules/espaces de noms.

JM

--
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)