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 statique et dynamique


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Polymorphisme statique et dynamique
    Hello,

    Le polymorphisme dynamique (virtual) est plus gourmand que le polymorphisme statique (CRTP).
    Mais il est également plus lisible.

    Ma question est donc : quand le polymorphisme statique (CRTP) est suffisant, l'utilisez-vous systématiquement ?
    Ou seulement après profiling (théorique ou pratique) ?

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    A mes yeux, ils n'ont surtout pas du tout le même rôle.

    Le crtp est là pour faciliter le partage de code, en conservant une grande précision de typage.
    Le virtual permet au contraire de manipuler ensemble et de la même manière des références vers des types distincts mais liés (cousinage)

    Ils n'interviennent pas au même moment.
    J'aurai tendance à faire intervenir le crtp par un héritage privé ou protégé.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par leternel Voir le message
    A mes yeux, ils n'ont surtout pas du tout le même rôle.
    Je connais bien les cas d'utilisation de chacun, leurs avantages et leurs inconvénients.

    Mais avant que chacun d'entre nous ne découvre le CRTP, nous avons tous utilisé du polymorphisme dynamique là où du statique aurait mieux convenu.
    Et force est de reconnaître que je tombe souvent sur du code fonctionnant sur ce mode, et que je me pose alors la question : dois-je refactorer ?

    Enfin, le code CRTP est moins lisible (on repère moins facilement la notion de virtualité), et donc je me posais la question.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Pour ta question de lisibilité: mais justement, on ne veut pas proposer de virtualité dans le CRTP.

    Pour la question du réfactor: "ça dépend"

    Ca dépend de si tu y es autorisé.
    Ca dépend aussi de l'avantage que l'application y gagne.
    Le premier problème de la reconstruction, c'est le risque de régression.

    Si tu peux diviser par deux la taille du code, à fonctionnalité égale, et sans passer par des siouxeries, c'est probablement une bonne idée.
    Si tu peux réduire la taille du code utilisateur, quitte a grossir un peu le code interne, pourquoi pas.

    Si tu améliore la maintenabilité en augmentant la clarté, je t'encourage à militer pour ce changement, voire à le faire dans ton coin, et montrer après que c'est clairement mieux.

    Si ca ne change rien: même code d'appel, performance similaire et, surtout, même maintenabilité, ne le fait pas.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par leternel Voir le message
    Pour ta question de lisibilité: mais justement, on ne veut pas proposer de virtualité dans le CRTP.
    Je voulais dire que le mot-clé virtual permettait de rendre visible la redéfinition.

    Je suis assez d'accord sur le reste.

    Autre sujet : parfois, on ne sait pas toujours à l'avance si le polymorphisme aura besoin d'être un jour dynamique.
    Le CRTP peut s'imposer d'évidence quand l'architecture est stabilisée. D'ici là : statique (blindé) ou dynamique (simple à lire et coder) ?

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Je pense que ça dépend de l'usage prévisible.

    Si une variable polymorphique spécifique est amenée à contenir plusieurs valeurs de types différents, le dynamique est de rigueur.
    Si cette variable ne reçoit que des valeurs du même type, c'est du template/CRTP.

    Et je considère la variable au sens de champ d'une instance spécifique de la classe à coder.

Discussions similaires

  1. Polymorphisme Dynamique et Polymorphisme statique
    Par ABAM3194 dans le forum Visual C++
    Réponses: 9
    Dernier message: 15/11/2013, 19h02
  2. [conception]polymorphisme statique ou dynamique ?
    Par vandamme dans le forum C++
    Réponses: 7
    Dernier message: 15/07/2007, 10h14
  3. Agrégation: statique ou dynamique
    Par icer dans le forum C++
    Réponses: 13
    Dernier message: 04/03/2006, 15h48
  4. char *, string et tableau statique ou dynamique
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 05/12/2005, 11h33
  5. Réponses: 2
    Dernier message: 19/08/2005, 16h02

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