Définition et mise en œuvre du polymorphisme statique

J'ai quelques questions sur le concept de polymporhisme statique dont j'entends parler; vous pouvez les interpréter principalement dans le contexte du C++, mais j'apprécierais les réponses langagières agnostiques le cas échéant ( d'où le marquage à la fois C++ et langagier).

  1. Comment définissons-nous le polymorphisme statique en général? a titre d'exemple, je crois que la fonction std::sort de C++ doit être considérée comme statiquement polymorphe car elle dépend de certains interface fournie par certains objets qui se comportent comme des itérateurs , et le comportement exact sous l'interface des itérateurs fournis peut être déterminé au moment de la compilation. Est-ce une explication de la façon dont nous définissons le polymorphisme statique, ou est-ce juste une description d'un cas spécifique et il y a plus?

  2. Quels sont les modèles de code communs d'utilisation du polymorphisme statique en C++? Aussi: SP est-il seulement atteint via des modèles en C++?

  3. Est-il vrai que un diagramme de classe UML donné ne décrit pas directement Comment le polymorphisme est géré et, par conséquent, il peut être au moins partiellement implémenté statiquement ou dynamiquement? En d'autres termes: le choix du polymorphisme statique vs dynamique est-il indépendant du modèle POO, et donc à l'implémenteur de décider?

  4. Le polymorphisme statique est-il uniquement spécifique au C++ et lié au fonctionnement des modèles? Si non, est-il présent dans tout autre langues grand public en plus de C++? Pouvons-nous avoir un équivalent de polymorphisme statique en Java, C#.. n'importe quoi, et apportera-t-il des avantages?

  5. La plus importante... Quels sont les avantages réels de l'utilisation du polymorphisme statique? je pense que nous pouvons convenir que cela réduit la flexibilité du code; quels sont les avantages, en plus - dans le cas de c++ - économiser un déréférencement de pointeur (fonction virtuelle / pointeur à fonction / coût délégué)? Quelle est la classe des problèmes où le polymorphisme statique est particulièrement utile, le bon choix pour la mise en œuvre?

27
demandé sur Kos 2010-12-29 22:23:22

3 réponses

  1. le comportement polymorphe statique est le polymorphisme de type qui se produit au moment de la compilation plutôt qu'au moment de l'exécution.
  2. Oui.
  3. UML concerne la façon dont les classes interagissent à l'exécution-Je ne crois pas qu'il existe un format UML pour décrire les modèles, mais je pourrais me tromper.
  4. pour autant que je sache, c'est spécifique au C++, mais je ne suis pas positif étant donné que je n'ai pas utilisé toutes les langues jamais inventées. :) Cela dit, les langages JIT'd comme C# et Java sont souvent très bons pour supprimer le impact sur les performances des appels indirects dans certains cas en utilisant des informations glanées au moment de l'exécution plutôt qu'au moment de la compilation. Que ce soit au moment de la compilation ou non est un peu sur l'air cependant... après tout, on l'appelle un compilateur juste à temps .
  5. le principal avantage est simplement la performance. Le polymorphisme d'exécution peut faire tout ce que le polymorphisme statique peut faire (en fait, il peut faire plus), mais il porte le coût des appels indirects (ce qui peut être coûteux s'il y en a assez de "em)

Maintenant, les modèles eux-mêmes ont de nombreuses utilisations au-delà du polymorphisme de compilation-par exemple, la magie SFINAE qui fait fonctionner boost::bind n'est certainement pas polymorphe-elle est simplement là pour lisser les incohérences dans le langage lui-même.

13
répondu Billy ONeal 2010-12-29 19:39:07

Comment définissons-nous le polymorphisme statique en général?

La meilleure façon de le comprendre en utilisant des exemples. La conception basée sur des politiques est un exemple de polymorphisme statique. Et à mon avis, c'est une technique très puissante pour atteindre le polymorphisme statique.

Un autre exemple est, modèle de modèle curieusement récurrent (CRTP) qui est également une technique puissante.

5
répondu Nawaz 2010-12-29 19:57:01
  1. Non. En plus des modèles, la méthode oveloading est également-polymorphisme statique. https://en.wikipedia.org/wiki/Function_overloading
0
répondu Alex Blokha 2014-10-21 08:13:29