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 :

Gestion de classe


Sujet :

C++

  1. #1
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut Gestion de classe
    Bonjour,

    j'ai un problème de conception que je n'arrive pas à résoudre d'une façon qui me conviennent.

    Je dois gérer différentes protocoles qui me viennent d'un buffer.

    Exemple :
    1. Je reçois des données brutes
    2. Je les passe à une classe qui va me permettre d'accéder aux différents champs selon la pile de protocole (Exemple IPv4/TCP/HTTP).

    Mon problème est la conception des classes jusqu'à présent je ne gérait qu'un protocole et j'avais une structure qui ressemblait à :




    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
     
    Class TCP
    {
       TCP(char* data);
       //...
    }
     
    Class IPv4 : public TCP
    {
       IPv4 (char* data);
    //...
    }
     
    Class IPv6 : public TCP
    {
       IPv6 (char* data);
    //...
    }
     
    Class Http : public IPv4
    {
       Http(char* data);
      // ...
    }
     
    Class Http : public IPv6
    {
       Http(char* data);
      // ...
    }
    Le problème avec cette architecture et qu'à chaque fois que je rajoute un protocole c'est comme si j'ajoutais une branche à un arbre et je dois créer x classes. Cela n'est pas viable si le projet se développe.

    Est-ce qu'il existe des outils en c++ qui permettent de résoudre ce problème ? Ou une meilleur conception ?

    Sachant que je veux toujours accéder aux données brute


    Merci de votre aide.

    p.s. je sais que la logique dirait d'avoir des héritages dans le sens des couches OSI, mais je ne vais gérer que le TCP. Donc je préfère hériter de TCP.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut !

    En quoi est-ce un problème ? Tu devras bien écrire du code spécifique à chaque protocole. Donc il faudra ranger ce code spécifique quelque part. Et dans une classe me paraît assez pertinent.

    Ce qui va influer la conception ici, c'est ce que fait le reste du code avec ces classes, et là tu ne nous donnes pas trop d'infos. Dans l'idéal, il te faut une interface commune à toute les classes qui est manipulée par le reste du code. Ensuite tu n'as plus qu'à écrire un builder ou une factory qui est fonction du stream sera en mesure de le stocker dans la bonne classe sous-jacente.

    Difficile de proposer plus sans mieux connaître le contexte
    Find me on github

  3. #3
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    En quoi est-ce un problème ? Tu devras bien écrire du code spécifique à chaque protocole. Donc il faudra ranger ce code spécifique quelque part. Et dans une classe me paraît assez pertinent.
    En faite, je pensais avoir un héritage entre les protocoles pour créer un paquet qui contient toute la pile de protocole.

    Mais en imaginant la suite du projet, j'ai vite vu que c'était pas une bonne solution, le nombre de classe explosent (à chaque nouveau protocole, il faut implémenter tous les héritages).

    Et je connais assez mal les factory/builder du coup je me suis pas dirigé vers cette solution.

    Donc je vais faire quelques choses dans ce genre la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Class packet
     
        private:
            m_layer3Protocole;
            m_layer4Protocole;
    En faisant comme tu me le conseils avec un builder à qui je donne le stream.

    Merci de ton aide.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pas tout a fait, il faudrait plutot avoir un paquet templaté sur les différentes couches.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename L3, typename L4> class packet {
        private:
            L3 m_layer3Protocole;
            L4 m_layer4Protocole;
    };
    Ce qui permet d'avoir un type packet<UDP, HTTP>, totalement distinct du type packet<UDP, FTP>
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Ce qui permet d'avoir un type packet<UDP, HTTP>, totalement distinct du type packet<UDP, FTP>
    Oui cela parait juste et bon

    Merci

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/09/2008, 18h00
  2. [POO] Gestion de classes
    Par dahu29 dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2008, 22h18
  3. [classe abstraite] gestion des classes abstraites en memoire
    Par noOneIsInnocent dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2007, 11h53
  4. Gestion des classes entre elles et organisation.
    Par Hybrix dans le forum Développement 2D, 3D et Jeux
    Réponses: 54
    Dernier message: 29/08/2007, 19h54
  5. [POO] PHP et la gestion des classes
    Par Acti dans le forum Langage
    Réponses: 7
    Dernier message: 23/09/2005, 00h06

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