La POO a une composition et une substitution.
C ++ possède plusieurs héritages, une spécialisation de modèle, une intégration et une sémantique de valeur / déplacement / pointeur.
Java possède un héritage et des interfaces uniques, une sémantique d'intégration et de référence.
L'école OOP utilise couramment ces langages pour utiliser l'héritage pour la substitution d'objets et l'incorporation pour la composition. Mais vous avez également besoin d'un ancêtre commun et d'un moyen de lancer le runtime (en C ++ est appelé dynamic_cast
, en Java, il suffit de demander une interface à un autre).
Java fait tout cela par sa propre java.lang.Object
hiérarchie enracinée. C ++ n'a pas de racine commune prédéfinie, vous devriez donc au moins la définir, pour arriver à une même "image" (mais cela limite certaines possibilités C ++ ...).
Après cela, la possibilité d'avoir un polymorphisme au moment de la compilation (pensez au CRTP) et une sémantique de valeur peuvent également offrir d'autres alternatives à la façon dont le concept d '"objet OOP" peut être porté dans un programme C ++.
Vous pouvez même imaginer l'hérésie d'utiliser l'incorporation et la conversion implicite pour gérer la substitution et l'héritage privé pour gérer la composition, en inversant en fait le paradigme scolaire traditionnel. (Bien sûr, cette façon est 20 ans plus jeune que l'autre, alors ne vous attendez pas à un large soutien communautaire pour le faire)
Ou vous pouvez imaginer une base commune virtuelle à toutes les classes, une interface de formulaire (pas d'implémentation) aux classes finales (entièrement implémentées) passant par des interfaces partiellement implémentées et des clusters d'interface pairs, en utilisant la "dominance" comme répartition de l'interface vers les implémentations via un "multi-stacked" -parallelogram "schéma d'héritage.
Comparer OOP à java à C ++ en supposant qu'il n'y a qu'un seul et unique moyen OOP limite les capacités des deux langages.
Forcer C ++ à adhérer strictement aux idiomes de codage Java dénature C ++ car forcer Java à se comporter comme un langage de type C ++ dénature Java.
Ce n'est pas une question de "sensibilité" mais de "mécanismes d'agrégation" différents que les deux langues ont et une manière différente de les combiner qui rend un idiome plus rentable dans une langue que dans l'autre et vice versa.