En effet, on sens que tu n'utilise pas la STL.
Je suis en train de refaire un logiciel de dessin vectoriel open source sur mon temps libre, en C++. (autoREALM pour les connaisseurs, et le mot refaire serait idéalement complété par "from scratch", "traduction du delphi", et "tentative de conception soignée".)
En utilisant la STL, la fonction la plus grosse pèse 40 lignes, je n'ai fait, (et ne ferait probablement), aucun algo genre algo de tri.
Je n'ai aucune gestion de la mémoire, les seuls pointeurs que j'utilise sont la a des fins de polymorphisme. Encapsulé dans ces très confortable unique_ptr d'ailleurs (et la lecture de GotW 102 me fait penser qu'il va falloir que je corrige quelques lignes).
Il n'y a aucun tableau statique.
Pour le dessin à l'écran, je fais comme tout le monde, j'utilise des librairies: openGL pour le rendu, et un framework d'IHM (wxWidgets dans ce cas précis) pour les fenêtres. Pour ce qui concerne les fichiers de config, je fais mumuse avec boost::filesystem.
Je suis extrêmement loin du CIY comme tu dis. Limite je ne refais quasiment rien.
Comment ça se fait que des librairies permettent cette flexibilité et la transparence qui rend le code tout de même simple à lire? Très simple:
_ template
_ surcharge d'opérateur (que java ne propose pas, au passage, donc pour moi java est bien intuitif pour faire des tableaux dynamiques que le C++)
Mais je t'accorde que les gens voient souvent le côté "démerdes-toi" de C++. Il faut admettre que si on veut, on peut tout refaire à la main, mais moi, je suis flemmard, je réutilise la roue que les autres ont inventés. Et quand je n'aime pas la couleur de cette roue, plutôt que de la refaire, je l'enrobe. (je pense au système de menus de wxWidgets la, qui est selon moi assez foireux pour faire un truc dynamique)
Vu que le C++ est multi paradigme, c'est tout le contraire du DIY.
Avec la programmation générique, on peut réutiliser énormément de code.
Avec la programmation impérative fonctionnelle, on peut réutiliser les bibliothèques C, qui sont quand même très puissantes.
Avec la programmation impérative objet, on peut enrober le code générique, fonctionnel, et bas niveau dans des classes qui seront simples comme bonjour à utiliser.
Et j'aimerai beaucoup qu'on me dise en quoi C++ n'est pas portable?
En tout cas, wikipedia n'est pas d'accord avec ceux qui l'affirment:
Je rappelle au passage, que portable, ça veut pas dire qu'il n'y a pas besoin de recompiler. Ca veut dire qu'après compilation, ça peut marcher partout, nuance. C++, étant héritier de C, est aussi portable que celui-ci.Citation:
C fut choisi parce qu'il est rapide, portable et d'usage général. En outre, il était une bonne base pour le principe original et fondateur de C++ : « vous ne payez pas pour ce que vous n'utilisez pas ». Dès le départ, le langage ajoutait à C la notion de classe (avec encapsulation des données), de classe dérivée, de vérification des types renforcés (typage fort), d'« inlining », et d'argument par défaut.
C'est d'ailleurs sûrement pour ça qu'il n'y a pas d'IHM de base dans le standard, parce que les IHM, il n'y a rien de moins de portable.
Pas convaincu par ça? Qt ré-implémente les fonctions dont il a besoin, les IHM de microsoft ne fonctionnent que sur windows, et encore, ça dépend de la version, wxWidgets est bourré de #ifdef, java ré-implémente dans un framework à la façon de Qt, et un autre framework utilise la technique de wxWidgets.
Et de toute façon, une fenêtre ne sera pas la même selon l'écran, alors que je vois beaucoup de code qui précisent les coordonnées des fenêtres/composants en dur. Je pense que c'est dû aux RAD d'ailleurs...
Ce genre de choses qui font que les logiciels sont pénibles à utiliser sur des netbook car les fenêtres sont sur-dimensionnées, j'ai constaté qu'on ne les retrouve pas avec les logiciels qui utilisent ncurses (genre, aptitude pour les débianeux, ncmpcpp pour les utilisateurs de mpd, lynx... et beaucoup d'autres)
Le C++ est effectivement issu du C, mais s'il a pris une orientation qui lui permet de garder les avantages du C, il a aussi évolué pour ajouter des fonctionnalités.
Bon, il y a quelques pertes... Par exemple, mieux vaut prendre l'habitude d'utiliser "++i" au lieu de "i++", histoire de pas le faire pour les objets (pour un int, c'est pas grave, mais pour un itérateur on crée/détruit une copie pour rien. Juste un problème de performances, pas de bug.)
Mais quelques pertes qui ne sont rien quand on peut reléguer la gestion de la RAM au plus profond de son programme.
Je fais peut-être le fanatique, mais je ne vois pas ce que C++ ne peux pas faire face a des langages plus récents... Ah, si, il n'est pas réflexif.
Le reste, de dire que les langages gèrent les IHM, c'est faux. Ce sont les librairies standard de ces langages qui font ça.
Au sujet de la javadoc, GCC utilise doxygen. WxWidgets, et Qt aussi. Javadoc n'est pas un argument recevable, pour moi. Au passage, je trouve la javadoc d'oracle plutôt crade pour s'y retrouver. Ca a dû être organisé à une époque, mais la... (je me suis servi récemment de java en cours, et je me suis pas contenté des miettes que le prof donnait, ce qui m'a encore valu de me faire taper sur les doigts parce qu'en faisais plus que ce qu'il demandait, en moins de lignes de code. Du coup, pour brider mon code, j'ai ajouté un flag genre ifdef... j'ai honte de brider mon code mais bon, c'était ce qui était demandé...)
Les milliers de classes java, je trouve que ça fait trop fouillis.
Tout ça dans le standard? A quoi doit-on se référer du coup? Standard C++ est peut-être complexe, mais l'api est maîtrisable. JAva, j'en doute. D'autant plus quand ça fait doublon. C'est quoi la différence entre Array et Vector en java d'ailleurs? Bon, je suppose que c'est une question d'habitude ou de culture:
Le dev C++ va voir son standard pour les algorithmes les plus commun seulement (tri, aléatoire, trouver une occurrence, extraire une partie de conteneur...), et pour les interactions avec le système va voir l'API du système.
Le dev java va voir son standard pour tout, mais du coup a moins de choix en terme de conception de l'outil qu'il va utiliser.