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

Langage C++ Discussion :

Problème de conception


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut Problème de conception
    Bonjour à tous,
    Je développe actuellement mon premier projet en C++. J'ai étudié ce langage en cours, mais rien de très sérieux, toujours deux ou trois classes maximum pour comprendre les concepts de base... J'ai donc simplement quelques notions de programmation orientée objet.

    Et aujourd'hui, je dois avouer que certains points me semblent un peu flous, j'ai du mal à concevoir et à articuler mon programme autour des classes. Je m'explique :

    Le projet part de zéro, aucun développement n'a été fait au préalable. Le point de départ est de définir un problème mathématique, un ensemble de fonctions (1), qui seront utilisées par mon programme principal. L'utilisateur donne alors les dimensions du problème, et fait quelques choix. On doit ensuite discrétiser le résultat de ces fonctions sur un intervalle donné (créer des vecteurs (2) contenant la valeur de chaque fonction en un certain nombre de points). Puis ces vecteurs sont exploités par d'autres fonctions (3) pour calculer des intégrales ou des dérivées (au sens "discret"). L'utilisateur peut choisir parmi plusieurs méthodes d'intégration (4)...

    Je souhaiterais créer un grand ensemble "Probleme" regroupant :
    - les fonctions continues et les dimensions (1)
    - les vecteurs (2) de résultats discrétisés, et les fonctions qui discrétisent le problème
    - les fonctions (3) utilisant les vecteurs (2)
    - les différentes méthodes d'intégration (4)

    J'ai pris l'exemple de la discrétisation, mais en réalité, l'utilisateur aura plusieurs choix à faire, pour différentes options.

    Pour le moment, j'ai créé une grande classe "problème", qui possède toutes les fonctions, mais celles-ci sont en dur (pas de choix de discrétisation possible) pour une discrétisation simple... Je commence à douter de l'utilité des classes pour ce projet, je ne vois pas où les bénéfices qu'elles apportent pourraient m'être utiles.

    Je souhaiterais que la méthode de discrétisation apparaisse sous la forme d'une fonction "discretisation" dont le contenu (et le nombre de variables d'entrée) varierait selon le choix de méthode fait par l'utiilisateur...
    En gros le choix de la discrétisation va également intervenir dans les fonctions (3), qui appellent la fonction de discrétisation. On pourrait imaginer un simple switch, à chaque fois que la fonction de discrétisation est appelée, selon le choix fait par l'utilisateur, on appelle l'une ou l'autre fonction... Cependant, ce switch serait évalué très fréquemment, ce qui ne me parait pas optimal. Je ne vois donc pas comment organiser mon programme.

    Mes deux questions donc :
    - Les classes peuvent-elles m'aider?
    - Comment faire pour gérer les choix de l'utilisateur?

    J'espère que je suis à peu près clair, c'est pas facile à expliquer...
    Merci d'avance à tous pour vos réponses

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    As-tu pensé à l'héritage et au polymorphisme ? J'ai l'impression que ça pourrait correspondre à ta recherche.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Par exemple, pour la méthode d'intégration, tu peux définir une classe de base abstraite qui présente juste l'interface utilisateur nécessaire pour intégrer numériquement, puis toute une série de classe dérivées, qui implémentent chacune une méthode d'intégration.

    Ta classe Problème contiendrait alors un pointeur sur une méthode d'intégration, qui pourrait à un instant particulier pointer sur du RK4, par exemple.

    C'est ce qu'on appelle le design pattern Strategy.

    De même, il pourrait y avoir plusieurs façons de représenter tes fonctions (par exemple une fonction, et les dérivées sont calculées discrètement, ou bien deux fonctions, et les dérivées sont calculées en exécutant la seconde fonction). Si cette dimension de variabilité t'intéresse, c'est encore une fois l'occasion de mettre en œuvre le pattern Strategy.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut
    Bonjour,
    Merci à tous les deux pour vos réponses, ça m'aide bien!
    J'ai regardé le concept du design pattern Strategy, ça semble très adapté à ce que je veux faire en effet! Par contre, est-il possible de faire ça sans pointeur de fonctions? L'exemple donné sur Wikipedia n'utilise pas de pointeurs... (Wiki : Strategy)

    Citation Envoyé par dragonjoker59
    As-tu pensé à l'héritage et au polymorphisme ? J'ai l'impression que ça pourrait correspondre à ta recherche.
    Concernant le polymorphisme, j'avais imaginé une telle solution, mais ça me semble moins clair. La fonction "intégration" par exemple, aurait plusieurs définitions selon le type de ses arguments. Le problème, c'est que je peux avoir deux méthodes d'intégration avec exactement les mêmes paramètres en entrée et en sortie, donc je ne pense pas que le polymorphisme soit adapté... Pour l'héritage, est-ce que tu penses au même type d'implémentation que le design pattern Strategy, ou est-ce qu'il peut y avoir d'autres solutions?

  5. #5
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Pour l'héritage, j'y pensais en le couplant au polymorphisme, mais effectivement, si tes fonctions n'ont pas toujours le même nombre de paramètres ni le même type de retour, ça ne correspond pas vraiment à ce que tu recherches.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 599
    Par défaut
    Tu peux peut être utiliser des foncteur pour modéliser tes fonction. Un foncteur est une classe possédant un operator(). Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Class Sum{
     
      float operator(std::vector<float> list){
         float res = 0;
         for( int i = 0; i < list.size(); ++i)
           res += list[i]
         return res;
      }
    }
    Tu peux l'utiliser de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sum s;
    float a = s(maList);
    Ainsi, tu peux imaginer une classe mère Integral avec un operator() virtuel, et des classes filles IntegralRectangle, IntegralTrapeze, etc... qui implémentent l'operator() selon algorithme voulu.

    Comme les foncteurs sont des objets comme les autres, tu peux les passer en paramètre d'autre fonction, sans passer par des pointeurs de fonctions.

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 12h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 23h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 19h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 14h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/05/2004, 00h13

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