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 :

[POO] MVC Half-Edge et polymorphisme


Sujet :

C++

  1. #1
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut [POO] MVC Half-Edge et polymorphisme
    Bonjour,

    J'ai un problème d'implémentation C++ pour une modélisation MVC utilisant la structure Half-Edge (structure particulière d'un maillage) en vue d'une intégration dans un modèle d'arbre de Qt. Plus d'informations sur ce post :

    http://www.developpez.net/forums/d65...f/#post3851364

    Nous en sommes venus à la conclusion qu'il fallait faire un héritage des différentes structures et utiliser le polymorphisme pour l'intégration dans le modèle d'arbre. Le problème est que je voudrais éviter l'utilisation de méthodes virtuelles dans les classes pour des raisons de coût mémoire et d'exécution.

    Ma question est donc la suivante : existe-t-il d'autres alternatives avec le langage C++ ? Par exemple en utilisant des templates, ou autre ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Le problème est que je voudrais éviter l'utilisation de méthodes virtuelles dans les classes pour des raisons de coût mémoire et d'exécution.
    Tu as une vraie bonne raison ? (contraintes temps-réel, ou quelque chose du genre ?). Parce que ajouter 4 octets à une structure, c'est pas la mort en général, et côté perf, pareil...

    Cela dit, tu peux peut-être passer par une union.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    J'ai regardé l'autre fil, et j'ai envie de dire que tu te retrouves dans cette situation parce que tu as un problème dans ta modélisation. Tes nœuds portent la structure de l'arbre. Il y a un mélange entre la structure arbre et le type des nœuds. (je suis pas sûr de me faire comprendre).
    Tu devrais couper en deux: une modélisation pour l'arbre et une pour les données (essentiellement les sommets). Ensuite, la seule chose qui t'intéresse au vue de ce que tu as posté est d'associer les feuilles aux sommets. Triangle et half-edge ne sont que des éléments de structures et ne contiennent pas de valeur par eux-même. Donc, tu dois pouvoir les gérer par des contraintes sur la forme de ton arbre: profondeur 3 obligatoire. Niveau(1)=triangle, Niveau(2)=half-edge, et Niveau(3)=sommet.

    [EDIT]: en fait, tu peux associer la donnée au nœud avec boost::variant, ce qui te permet de mettre une donnée différente suivant la profondeur du nœud.

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Tu as une vraie bonne raison ? (contraintes temps-réel, ou quelque chose du genre ?). Parce que ajouter 4 octets à une structure, c'est pas la mort en général, et côté perf, pareil...

    Cela dit, tu peux peut-être passer par une union.
    Appeler une méthode virtuelle est quand même beaucoup plus long mais bon c'est vrai que je me prends la tête pour pas grand chose là. En fait je voulais savoir s'il y avait une autre alternative que je ne connaissais pas (on sait jamais), mais bon :p.

    Citation Envoyé par 3DArchi
    J'ai regardé l'autre fil, et j'ai envie de dire que tu te retrouves dans cette situation parce que tu as un problème dans ta modélisation. Tes nœuds portent la structure de l'arbre. Il y a un mélange entre la structure arbre et le type des nœuds. (je suis pas sûr de me faire comprendre).
    Tu devrais couper en deux: une modélisation pour l'arbre et une pour les données (essentiellement les sommets).
    Non faire cela consiste en une duplication des données qui posent plus de problèmes qu'autre chose. Je ne dois pas changer ma structure half-edge, c'est une structure on va dire "standardisée" . Je peux y rajouter des choses mais pas enlever d'informations.

    Je vais continuer la discussion dans l'autre post pour éviter des duplications.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Salut,
    Citation Envoyé par TanEk Voir le message
    Appeler une méthode virtuelle est quand même beaucoup plus long mais bon c'est vrai que je me prends la tête pour pas grand chose là. En fait je voulais savoir s'il y avait une autre alternative que je ne connaissais pas (on sait jamais), mais bon :p.
    N'oublie jamais le principe de base:
    dans mettons 80% des cas, une optimisation prématurée est le chemin de toutes les enfers
    ni le fait que 90% du temps de traitement est occupé par 10% du code

    Dés lors, j'aurais personnellement tendance à te conseiller de ne pas t'inquiéter dans un premier temps de la présence éventuelle de méthodes virtuelles.

    Si vraiment tu te rend compte - à l'occasion d'un profiling complet, après optimisation des algorithmes - que ces méthodes virtuelles sont réellement la cause d'une chute des perfs, cela signifiera que tu es sans doute parti sur une mauvaise base de conception
    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

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par TanEk Voir le message
    Non faire cela consiste en une duplication des données qui posent plus de problèmes qu'autre chose. Je ne dois pas changer ma structure half-edge, c'est une structure on va dire "standardisée" . Je peux y rajouter des choses mais pas enlever d'informations.
    Je me suis mal expliqué. Je ne voulais pas dire dupliquer les données mais séparer la structure d'arbre des valeurs de chaque noeud. D'où l'utilisation d'un variant pour cette valeur.

  7. #7
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Heu... je ne vois pas trop ce que tu veux dire ?

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    deux discussions ouvertes pour le meme probleme...¨
    ... et ma reponse finale:

    http://www.developpez.net/forums/d65...f/#post3856542

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par epsilon68 Voir le message
    deux discussions ouvertes pour le même probleme...¨
    en faite y as deux problème:
    - ses structuresqui à la base est du C (ce thread)
    - l'affichage de la structure (le thread Qt)


    Il me semble que c'est ce qui est fait sur les vieux compilateur qui avais du mal à géré le rtti. Si je comprend bien le truc c'est équivalent à ce que l'on fait en C:
    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
    struct A
    {
        int type;
    };
     
    struct B
    {
       int type;
    /* autres paramètres*/
    };
     
    struct C
    {
    int type;
    /* autres paramètres*/
    };
    si une des struct est passé par void*,
    on peut caster le pointeur en A pour connaitre le type.
    Par contre, je sais plus s'il ne risque pas d'y avoir un problème avec les destructeurs comme il ne sont pas virtuel. Je me souviens plus de la règles

Discussions similaires

  1. POO : difference entre heritage et polymorphisme
    Par Melvine dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 13/07/2009, 19h14
  2. [POO] POO & MVC => arborescence ?
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2007, 19h34
  3. Réponses: 2
    Dernier message: 14/09/2007, 08h55
  4. [POO] MVC : Gestion des "pages"
    Par Dinan dans le forum Langage
    Réponses: 4
    Dernier message: 18/02/2007, 19h44
  5. [POO] MVC : Vue composée
    Par Neuromancien2 dans le forum Langage
    Réponses: 3
    Dernier message: 18/02/2007, 10h38

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