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 :

Polymorphisme en évitant les casts


Sujet :

Langage C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut Polymorphisme en évitant les casts
    Bonjour,

    Je me lance dans la conception d'un nouveau soft là, donc j'ai champ libre pour son architecture. Il y a un problème auquel j'ai été confronté plusieurs fois, c'est l'utilisation de l'héritage et du polymorphisme ... Je trouve des solutions qui, d'un point de vue UML, sont propre (enfin, je pense ), mais qui une fois amené au C++ demandent beaucoup trop de de casts à mon gout.

    J'ai deux exemples en tête :

    1. Deux classes d'interfaces, fortement liées entre elles, qui ont toutes deux un système d'héritage.

    Je prend l'exemple d'une classe de traitement, et sa classe de configuration.
    J'ai fait un petit diagramme UML pour que ça soit plus clair :



    Dans cette exemple, je sais d'avance que la classe TraitementVideo, aura un objet de type Configuration Video, de même pour l'audio. Par contre, la donnée sera stocké sous forme de TraitementConfigurationInterface, ce qui m'oblige à faire un cast à chaque fois. Au niveau performance ce n'est pas très grave, vu qu'il s'agira d'un static_cast, mais je trouve pas ça super propre.
    J'ai pensé à utiliser des templates sinon, qui seront spécifié par les classes filles lors du constructeur, mais ça m'a pas l'air dans la philosophie du polymorphisme ...


    2. Mon second problème concerne le polymorphisme pour un objet recu en parametre d'une fonction.

    Là en encore, un petit exemple d'héritage pour que ça soit clair :



    Si l'on reprend mes classes de traitement décrite plus haut, ces dernières vont avoir une méthode de type "computeMessage( const Message & msg)".
    Le problème, c'est que les messages dans mon application vont suivre un chemin de classes de traitement définit à la configuration.
    Ces classes de traitement devront spécifié les messages, du coup je pense être obligé de faire un dynamic_cast pour m'assurer de recevoir le bon type de message. Le problème c'est que les dynamic_cast, niveau performance ca me rebute un peu, mais je ne suis pas sur d'avoir le choix là dessus ... :/
    Comme il ne s'agit pas d'une application destiné au grand public, les plantages pour mauvaise configuration sont tolérés. Est il possible de faire un static_cast et de trouver un moyen de lever une exception sur plantage du à un mauvais type d'objet reçu ?
    De cette manière on peut utiliser des static_cast ce qui nous fait gagner en performance, et en cas de plantage la source d'erreur sera rapide à trouver.
    Images attachées Images attachées   

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/05/2007, 22h36
  2. Optimiser un script forum en évitant les sessions
    Par Janitrix dans le forum Langage
    Réponses: 15
    Dernier message: 20/03/2007, 21h30
  3. Question sur les casts
    Par nicolas66 dans le forum C++
    Réponses: 3
    Dernier message: 16/03/2006, 19h03
  4. [Début.] Les CAST
    Par Sylvester dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2005, 22h24

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