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 :

mieux structurer son programme C++ ?


Sujet :

C++

  1. #1
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut mieux structurer son programme C++ ?
    Bonjour,

    je pose une question d'ordre organisationnel de programmes C++ , comment peut-on au mieux structurer son programme c++ surtout s'il comporte plus que 3000 lignes .


    Merci à vous tous.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    En découpant ton programme en des "modules" plus ou moins indépendants.

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    decoupe les données traitées en classes ! puis rajoute les traitement des données dans les classe correcpondantes.

    Met une classe par fichier.

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Je viens de déposer exactement le meme type de poste....

    Je fais face au meme type de probleme, il faut prendre du recul et bien chercher a savoir s'il est primordiale de raccourcir son code.

    Je suis personnelement à la recherche d'une modélisation plus structurée, mais comme toujours quand tu es dedans depuis le début, les lignes finissent par s'accumuler ...

    Le mieux est de poster les grds principes de ton programme et de demander des idees de modélisations.

    Cdt

  5. #5
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    Merci pour vos réponses , si j'ai bien compris , je mets des fichiers Header pour chaque classe et je les inclus dans mon programme principale , c'est ça ?

    autre question connaissez-vous un IDE , qui peut formater les programmes c++ et les rendre plus lisible ?

    Merci.

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    codeblocks possède un plugin qui fait ça.

  7. #7
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    Super

    Merci Bcp .

  8. #8
    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,

    De manière générale, il y a deux grandes optiques possibles pour structurer ton programe:
    • Mettre chaque classe dans un (couple de) fichier(s) séparé(s), avec l'avantage que cela permet de gagner du temps de compilation et d'avoir des fichiers plus petits permettant de s'y retrouver plus facilement, mais l'inconvéniant que tu risques de te retrouver avec 200 fichiers pour 100 classes, et qu'il peut donc devenir difficile de gérer ces 200 "petits" fichiers, ou
    • regrouper les classes par "concept"/ utilisation( /arbre d'héritage) dans un (couple) de fichier(s), avec les intérets et inconvéniants inversés: moins de fichiers à gérer, mais temps de compilation plus importants et difficulté accrue de se retrouver dans le code

    Selon le projet, chacune de ces optiques peut trouver grace à tes yeux, et il est meme possible que, dans certaines conditions, tu décides de grouper un peu les deux:

    Une interface graphique, avec les méthodes à créer pour la gérer, présentera un intéret certain à etre codée sous la forme des deux fichier pour une classe, alors que dans d'autre cas utilisant de nombreuses mais "petites" classes - peu de méthodes - fort proches, tu préféreras peut etre les regrouper dans un seul couple de 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

  9. #9
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    Très clair.

    Merci koala01

  10. #10
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Citation Envoyé par coyotte507
    codeblocks possède un plugin qui fait ça.
    Oui, c'est un formateur de code, ça s'appele Astyle, mais ça peut s'utiliser en dehors de code::blocks, en ligne de commande par exemple

  11. #11
    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
    Excuses moi de faire remonter le sujet, mais il y a une troisième optique envisageable, qui se trouve, pour ainsi dire, à mi-chemin des deux que j'ai citées plus haut:

    Rien ne t'empeche de regrouper toutes les déclarations de classes qui ont trait à un(e) meme concept/utilisation(/arbre d'héritage) dans un seul fichier d'entete, et à implémenter les différentes fonctions dans des fichiers séparés...

    Cela donnerait:
    Dans arbre.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #ifndef ARBRE_H
    #define ARBRE_H
    class Interface
    {
        public:
            Interface(Interface* parent);
            virtual ~Interface();
            virtual void AddChild(Interface*)=0;
            virtual Interface* Parent();
            base& Data()=0; /* les données pourraient etre co variantes ;) */
    /* simplement parce qu'il sera plus facile pour les classes dérivées d'y
     * accéder ;) */
        protected:
            Interface* _parent;
    };
    class Feuille:public Interface
    {
        public:
            Feuille(Interface* parent, const derivee1& data);
            virtual ~Feuille();
            virtual void AddChild(Interface* child);
            derivee1& Data();
        private:
            derivee1_data;
    };
    class Noeud:public Interface
    {
        public:
            Noeud(Interface* parent, const derivee2& data);
            virtual ~Noeud();
            virtual void AddChild(Interface* child);
            derivee2& Data();
        private:
            derivee2 _data;
            std::vector<Interface*> _childs;
    };
    class Racine:public Interface
    {
        public:
            Racine(Interface* parent, const derivee3& data);
            virtual ~Racine();
            virtual void AddChild(Interface* child);
            derivee3& Data();
        private:
            derivee3 _data;
            std::vector<Interface*> _childs;
    };
    #endif
    Dans interface.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "arbre.h"
    /* implémente les méthodes non virtuelles pures de l'interface */
    Interface::Interface(Interface* parent):_parent(parent)
    {
    }
    Interface::~Interface()
    {
        _parent=NULL;
    }
    Interface* Parent()
    {
        return _parent;
    }
    dans feuille.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include "interface.h"
    /* n'implémente que les fonctions propre à la classe feuille */
    Feuille::Feuille(Interface* parent, const derivee1& data): Interface(parent),
             _data(data)
    {
        /* on peut estimer qu'une feuille doit etre rattachée à un noeud ;) */
        assert(_parent!=NULL);
    }
    Feuille::~Feuille()
    {
     
    }
    Derivee1& Data()
    {
        _return _data;
    }
    void AddChild(Interface*)
    {
        /* on peut estimer qu'une feuille doive le rester ;) */
        assert(!"Impossible d'ajouter un enfant ici");
    }
    Dans noeud.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "interface.h"
    /* n'implémente que les fonctions membres de la classe Noeud */
     
    /* j'ai la flegme... je n'écrirai rien ici :P */
    Dans racine.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "interface.h"
    /* n'implémente que les fonctions membres de la classe racine */
     
    /* j'ai la flegme... je n'écrirai rien ici :P */
    Nota: l'exemple n'a pas pris en compte tous les principes d'utilisation correcte des cvqualifiers
    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

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Pas terrible ta modélisation d'arbre, si tu veux mon avis.
    Ça expose trop de pointeurs et de choses de ce style, la gestion mémoire n'est pas claire.

  13. #13
    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
    Citation Envoyé par loufoque
    Pas terrible ta modélisation d'arbre, si tu veux mon avis.
    Ça expose trop de pointeurs et de choses de ce style, la gestion mémoire n'est pas claire.
    Le but n'était nullement de fournir un arbre fonctionnel, mais de montrer un exemple de ce qui peut etre fait au niveau 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

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/12/2010, 22h28
  2. Font , Xml & structure de programme .
    Par Clad3 dans le forum XML
    Réponses: 11
    Dernier message: 30/03/2005, 22h45
  3. [DiVERS] -> Arrêter et redemarrer son programme ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/08/2003, 15h25
  4. Mettre son programme dans Envoyer Vers ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 11
    Dernier message: 29/07/2003, 19h09
  5. Réponses: 13
    Dernier message: 11/05/2003, 13h25

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