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 :

Bonnes pratiques : regroupement de classes et namespace


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut Bonnes pratiques : regroupement de classes et namespace
    Bonjour à tous,


    Je débute la programmation en C++, et étant plutôt habitué au java j'ai une question relative aux bonnes pratiques :

    En JAVA, je suis habitué à avoir un fichier par classe, j'ai donc par habitude commencé mon programme C++ de la même manière.
    Seulement je me suis retrouvé confronté à un petit soucis en implémentant un Pattern State : deux classes qui ont besoin de se connaitre mutuellement (en JAVA ça passe, mais en C++ ...). La solution de ce problème semble être de mettre ces deux classes dans les mêmes .h et .cpp
    Pourquoi pas, mais du coup, concernant mes autres classes, serait-il judicieux de les regrouper également (par affinité), voir de créer un namespace (chose que je découvre tout juste ) ?
    Le binôme .cpp/.h peut-il, du coup, être vu comme une sorte de package ?

    Je vous remercie par avance de votre aide

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Je pense que cette entrée de la FAQ pourra répondre à ta question.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut
    Merci, ça résout en effet le problème initial.
    Par contre, concernant le questionnement sur le regroupement : c'est une question existentielle ou il existe une vraie bonne pratique ?

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par qlt654 Voir le message
    Merci, ça résout en effet le problème initial.
    Par contre, concernant le questionnement sur le regroupement : c'est une question existentielle ou il existe une vraie bonne pratique ?
    Généralement on fait une classe par couple de fichier .cpp et .h.

    Après, pour de très petites classes comme certains foncteurs, il peut arriver qu'on les regroupe ou qu'on les intègre à un .cpp ou .h d'une classe un peu plus grande.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut
    Merci beaucoup pour ton aide

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Concernant les espaces de noms ("namespace" ), on peut faire (à peu près) le parallèle avec les packages de java:

    tous deux regroupent un "ensemble de classes et de fonctions" qui travaillent ensemble dans un but déterminé

    La différence essentielle est que java est un peu plus stricte sur les conventions de nommage (tout en minuscule, première partie parmi com, edu, gov, mil, net, org ou les deux lettre représentant le pays, ...) alors que les espaces de noms de C++ sont valides à partir du moment où le nom peut effectivement être considéré comme un identifiant.

    La deuxième différence est à mettre en relation avec la dernière réponse de Neckara et tient au fait qu'il est tout à fait possible de définir plusieurs espaces de noms (imbriqués ou non) dans un seul et même fichier d'en-tête.

    Nous pourrions ainsi parfaitement avoir un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef MYFILE_HPP
    #define MYFILE_HPP
    namespace MonProjet{ // l'espace de noms "global" au projet
    namespace Metier { // Toutes les "données métier" se retrouvent dans l'espace
                      // de noms MonProjet::Metier
     
    } // namespace Metier
     
     
    namespace Utils { // je veux rajouter quelque chose à MonProjet::Utils qui
                     // directement corrélé aux donnée métier que j'ai définie plus haut
        /*... */
    } // namespace Utils
    } // namespace MonProjet
    alors que tu aurais sans doute du avoir plusieurs fichiers dans lesquels tu aurais trouvé quelque chose comme
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    package be.koala01.monprojet.metier; 
    /* la classe que j'aurais définie :D */
    class MaClasse{
        /* ... */
    };
    ou
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    package be.koala01.monprojet.utils;
    import be.koala01.moprojet.metier.maclass;
    /* l'utilitaire qui manipule MaClasse */
     /* ... */
    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

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En dehors des en-têtes de fonctions, je ne regroupe qu'une seule classe principale, les fonctions libres importante qui s'y réfèrent et éventuellement des classes indispensable à la première, et qui ne servirait pas sans elle.

    Typiquement, j'aurais donc tendance à regrouper ensemble les classes graphe et noeud, mais pas le visiteur_graphe serait dans un en-tete séparé.

    Par contre, toutes les trois seraient dans le même namespace (graph::, math::graph::, voire leternel::graph:

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bonnes pratiques de protections individuelles
    Par Community Management dans le forum Sécurité
    Réponses: 23
    Dernier message: 11/06/2024, 11h23
  2. Réponses: 2
    Dernier message: 20/02/2007, 21h26
  3. [Bonne pratique]Stratégie d'allocation
    Par jowo dans le forum C
    Réponses: 1
    Dernier message: 05/10/2005, 14h47
  4. [FOREIGN K] Valeur de champ = nom de table. Bonne pratique ?
    Par Seb des Monts dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/05/2005, 10h56

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