IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)



Dois-je apprendre le C avant le C++ ?
auteur : LFE
Il s'agit sûrement de la question la plus posée et pour laquelle la réponse est sujette à une controverse interminable.

Il n'est pas nécessaire ni obligatoire de connaître le C pour faire du C++. Il est tout à fait possible et raisonnable d'apprendre le C++ directement.

La connaissance du C peut être une aide (syntaxe semblable). Par contre, cela peut donner lieu à l'utilisation d'habitudes qui sont mauvaises en C++ (par exemple, utilisation excessive des pointeurs, alors que les références permettent le même comportement).


Le C++ est-il un langage pratique ?
auteur : Marshall Cline
Oui, C++ est un langage pratique.
Dans le monde de l'industrie logicielle, C++ est vu comme un outil solide, mature et sans surprises. Il est largement utilisé et supporté par l'industrie, ce qui le valorise d'un point de vue productif en général.


C++ est-il un langage parfait ?
auteur : Marshall Cline
Le C++ n'a pas été créé pour démontrer à quoi ressemblait un langage Orienté Objet pafait. Il a été conçu pour être un outil pratique, pour répondre à des problèmes pratiques.
Il présente quelques défauts, mais les seuls endroits où il serait judicieux d'apporter des modifications, pour atteindre la perfection, n'auraient qu'un but purement académique, ce qui n'est pas le but du C++.


Quels sont les enjeux associés aux techniques Orientées Objets ?
auteur : Marshall Cline
Les techniques OO sont la meilleure façon connue de développer de grosses applications ou des systèmes complexes.

L'industrie du logiciel n'arrive pas à satisfaire les demandes pour des systèmes logiciels aussi imposants que complexes, mais cet échec est dû à nos succès : nos réussites ont habitué les utilisateurs à toujours en demander plus. Malheureusement, nous avons ainsi créé une demande du marché que les techniques 'classiques' de programmation ne pouvaient satisfaire. Cela nous a obligé à créer un meilleur paradigme.

le C++ permet de programmer OO, mais il peut aussi être utilisé comme un langage classique ("un C amélioré"). Si vous comptez l'utiliser de cette façon, n'espérez pas profiter des bénéfices apportés par la programmation OO.


Le C++ est-il un meilleur langage que .... ?
auteur : Marshall Cline
Il s'agit sûrement de la question qui genère le plus de bruit par rapport à l'information utile qui en ressort. Veuillez lire ce qui suit avant de vous lancer dans ce genre de débat.

Dans 99% des cas, le choix d'un langage de programmation est fait en fonction de considérations financières ou commerciales, mais pas en fonction des considérations techniques.
Les choses réellement importantes qui pèsent lors de la décision sont la présence d'un environnement de développement, la possibilité de faire fonctionner le logiciel sur la machine cible, les licences, la disponibilité de développeurs expérimentés, de consultants, sans oublier la "culture de l'entreprise".
Ces considératons financières et commerciales jouent souvent un rôle plus important que la vitesse de compilation, la vitesse d'exécution, le typage dynamique ou le typage statique, etc ....

Quiconque argumente en faveur d'un langage par rapport à un autre de façon purement technique (c'est-à-dire en ignorant les éléments commerciaux) s'expose à être traité de 'technicien extrémiste' et à ne pas être écouté.


Qui utilise le C++ ?
auteur : Marshall Cline
Enormément de sociétés et d'administrations.

Le nombre important de développeurs (et par conséquent le grand nombre d'infrastructures de support, y compris vendeurs, outils, cours, ....) est une des caractéristiques importantes du C++.


Combien de temps faut-il pour apprendre le C++ ?
auteur : Marshall Cline
Des sociétés arrivent à prodiguer des cours intensifs, où un semestre de cours de niveau universitaire est compressé en une semaine de 40 heures. Mais, indépendemment du lieu où vous suivrez vos cours, assurez-vous que les cours ont des séances 'pratiques', étant donné que la plupart des gens apprennent mieux en ayant des projets sur lesquels travailler et faire des essais. Mais même avec la meilleure formation, ils ne sont pas encore prêts.

Cela prend de 6 à 12 mois pour devenir productif en technique OO / C++, moins si les développeurs ont accès facilement à un groupe local d'experts, plus si il n'y a pas de bonne librairie des classes à usage général de disponible.
Devenir un de ces experts capable de guider les autres prend à peu près 3 ans.

Certaines personnes n'y arrivent jamais. Vous n'avez aucune chance à moins que vous n'acceptiez que l'on vous apprenne et que vous soyez motivé. Un minimum de receptivité signifie que vous devez être capable de reconnaître quand vous vous êtes trompé. Un minimum de motivation signifie que vous devez être disposé à investir quelques heures supplémentaires (Il est nettement plus facile d'apprendre quelques nouveautés que de modifier votre paradigme [par ex., de changer votre façon de penser, la notion du bien, etc....])

Il y a 2 choses que vous devriez faire :

  • trouver un mentor, un guide
  • fournir 2 livres à vos elèves : un pour leur expliquer ce qui est légal, l'autre pour ce qui est moral.

et 2 que vous ne devriez pas faire

  • considérer le C comme un passage obligé pour apprendre le C++
  • considérer SmallTalk comme un passage obligé pour apprendre le C++


Quelques caractéristiques du langage C++ d'un point de vue 'business'
auteur : Marshall Cline

  • Le C++ bénéficie d'une large base installée, ce qui veut dire qu'il y a un support de plusieurs vendeurs pour les outils, environnements, services de consultance, ...
  • Le C++ permet aux développeurs de fournir des interfaces simplifiées, ce qui réduit la quantité de défauts rencontrés lorsqu'elles sont réutilisées.
  • Le C++ permet d'exploiter l'intuition des développeurs grâce à l'utilisation de la surcharge d'opérateur, ce qui permet de réduire la courbe d'apprentissage pour les utilisateurs.
  • Le C++ permet de "localiser l'accès" à une partie du logiciel, ce qui réduit la charge de travail causée par les changements.
  • Le C++ permet de réduire le compromis fiabilité / utilisabilité, donc le coût d'utilisation ou de réutilisation du logiciel.
  • Le C++ permet de réduire le compromis fiabilité / vitesse, donc d'améliorer la qualité sans dégradation des performances.
  • Le C++ offre les techniques d'héritage et d'appel dynamique, ce qui permet d'appeler du nouveau code à partir de code plus ancien, permettant donc d'ajouter de nouvelles fonctionnalités ou d'adapter vos programmes à la demande du marché.


Les fonctions virtuelles sont-elles un mécanisme important en C++ ?
auteur : Marshall Cline
OUI

Sans les fonctions virtuelles, le C++ ne serait pas un langage orienté objet. La surchage d'opérateur et les fonctions membres non virtuelles sont très pratiques, mais ne sont, finalement qu'une variante syntaxique de la notion beaucoup plus classique de passage de pointeur sur une strucutre à une fonction. La librairie standard contient de nombreux templates illustrant les techniques de "programmation générique", qui sont aussi très pratiques, mais les fonctions virtuelles sont le coeur même de la programmation orientée objet.

D'un point de vue 'business', il y a très peu de raison de passer du C pur au C++ sans les fonctions virtuelles (pour le moment, nous ferons abstraction de la programmation générique et de la librairie standard). Les spécialistes pensent souvent qu'il a une grande différence entre le C et le C++ non orienté objet ; mais sans l'orientation objet, la différence n'est pas suffisante pour justifier le coût de formation des développeurs, des nouveaux outils, ....
En d'autres termes, si je devais conseiller un gestionnaire concernant le passage du C au C++ sans orientation objet (c'est-à-dire changer le langage sans changer de paradigme), je le découragerais probablement, à moins qu'il y ait des contraintes liées aux outils utilisés. D'un point de vue gestion, la programmation orientée objet permet de concevoir des systèmes extensibles et adaptables, mais la syntaxe seule sans l'orientation objet ne réduira jamais le coût de maintenance, mais augmentera probablement les coûts de formation de façon significative.

Nota : le C++ sans virtualité n'est pas orienté objet. Programmer avec des classes mais sans liaison dynamique est une programmation basée sur des objects, mais n'est pas de la programmation objet. Ignorer la virtualité est équivalent à ignorer l'orientation object. Tout ce qui reste est une programmation basée sur des objets, tout comme la version originale d'ADA. (Soit dit en passant, le nouvel ADA supporte la véritable orientation objet, et non plus simplement la programmation basée sur les objets).


Pouvez-vous me donner une raison simple pour laquelle la virtualité est si importante ?
auteur : Marshall Cline
L'appel dynamique permet d'augmenter la réutilisabilité en autorisant le 'vieux' code à appeler du nouveau code.

Avant l'apparition de l'orientation objet, la réutilisation du code se faisait en appelant du vieux code à partir du nouveau code. Par exemple, un programmeur peur écrire du code appelant du code réutilisable comme printf(), ....

Avec l'orientation objet, la réutilisation peut aussi être accomplie via l'appel de nouveau code par de l'ancien. Par exemple, un programmeur peut écrire du code qui est appelé par un framework qui a été écrit par son arrière grand-père. Il n'y a pas besoin de modifier le code écrit par l'arrière grand-père. En fait, il n'a même pas besoin d'être recompilé. Et si jamais il ne restait que le fichier objet, et que le code écrit par l'arrière grand-père ait été perdu depuis 25 ans, cet ancien fichier objet appelera le code avec les nouvelles fonctionnalités sans rien changer d'autre.

C'est cela l'extensibilité, et c'est cela l'orientation objet.


Le C++ assure-t'il la compatibilité avec le C ?
auteur : Marshall Cline
Quasiment.

f();
ne prend pas de paramètres, alors qu'en C, on peut passer un nombre arbitraire de paramètres.

Il y a d'autres différences parfois très subtiles. Par exemple

sizeof('x')
vaut

sizeof(char)
en C++, alors qu'en C, cela vaut

sizeof(int)
Un autre exemple est celui des étiquettes de structures qui sont stockées dans le même namespace que les autres identificateurs. Là où le C exige la déclaration explicite d'une structure, cela devient redondant en C++. Par exemple, l'écriture suivante est valide en C++ mais est redondante, alors qu'elle est obligatoire en C.

typedef struct Fred Fred;

Le C++ est-il normalisé ?
auteur : Marshall Cline
Oui.

Le standard du C++ a été finalisé et adopté par l'ISO (International Organization for Standardization) et par d'autres organismes de normalisation tels que l'ANSI (The American National Standards Institute), le BSI (The British Standards Institute), le DIN (The German National Standards Organization).
L'adoption du standard s'est faite à l'unanimité le 14 novembre 1997.

Le comité ANSI C++ est appelé "X3J16". Le groupe de travail de l'ISO se nomme "WG21". Le processus de normalisation implique un grand nombre d'acteurs : des représentants de l'Australie, du Canada, du Danemark, de la France, de l'Allemangne, de l'Irelande, du Japon, de la Hollande, de la Nouvelle-Zélande, de la Suède, du Royaume-Uni, et des Etats-Unis ainsi que des représentants d'une centaine de sociétés, ansi que de nombreux particuliers impliqués. Les acteurs majeurs incluent AT&T, Ericsson, Digital, Borland, Hewlett Packard, IBM, Mentor Graphics, Microsoft, Silicon Graphics, Sun Microsystems et Siemens. Après 8 ans de travaux, le standard est maintenant finalisé. Le standard à été approuvé par un vote à l'unanimité des représentants présents à Morristown le 14 novembre 1997.


Où puis-je obtenir une copie du standard ?
auteur : Marshall Cline
Il y a au moins 3 façons d'obtenir une copie électronique du standard

Note : le document fourni par l'ISO est plus de 10 fois plus onéreux que celui de l'ANSI, alors que le contenu technique est identique. La page de garde est différente, mais le contenu technique est identique. Ne me demandez pas pourquoi l'ISO demande aussi cher par rapport aux autres pour la même chose ; c'est la technique commerciale de l'ISO ; si malgré tout vous voulez poser la question, faites-le à leur service commercial.

Il y a au moins 2 façons d'obtenir une copie papier du document :

  • 175 $ (publié par l'ANSI) : allez sur cette page http://www.techstreet.com/cgi-bin/detail?product_id=49964, sélectionnez "HardCopy" dans la liste, et cliquez sur "Place this in your shopping basket".
  • Prix non connu (publié par l'ANSI) : appelez le NCITS (National Committee for Information Technology Standards ; c'est le nouveau nom du commité autrefois connu sour le nom de "X3"). La personne de contact est Monica Vega, 202-626-5739 ou 202-626-5738. Demandez le document FDC 14882. Soyez prêt à dépenser un peu d'argent, il n'est sûrement pas gratuit.

Il y a 2 autres moyens d'obtenir (gratuitement) un document intéressant à consulter :


Quelles sont les questions à poser pour savoir si un candidat connait vraiment son sujet ?
auteur : Marshall Cline
Cette question se destine tout d'abord aux responsables non-techniques et au personnel des ressources humaines qui essaient de faire un travail de bonne qualité quand ils interviewent des candidats développeurs C++. Si vous êtes un programmeur C++ sur le point d'être interviewé, et que vous consultez cette FAQ en espérant savoir à l'avance quelles questions vont vous être posées de façon à ne pas devoir apprendre réellement le C++, honte à vous. Prenez le temps de devenir un développeur compétent et vous n'aurez pas besoin d'essayer de tricher.

Pour revenir aux non-techniciens et au personnel des ressources humaines : il est évident que vous êtes parfaitement qualifiés pour juger si un candidat a un profil correspondant à la culture de votre entreprise. Cependant, il y a assez de charlatans, de menteurs et de frimeurs pour que vous ayez besoin de faire équipe avec quelqu'un qui est techniquement compétent pour s'assurer que le candidat a le niveau technique adéquat. Assez de sociétés ont souffert d'avoir engagé des gens sympathiques mais incompétents, des gens globalement incompétents malgré le fait qu'ils connaissent les réponses à quelques questions très pointues. La seule façon de démasquer les menteurs et les frimeurs est d'avoir à vos cotés une personne capable de poser des questions techniques pointues. Il n'y a aucun espoir que vous y arriviez par vous-même. Même si je vous donnais une série de questions pièges, elles ne vous permettraient pas de démasquer ces personnes.

Votre partenaire technique n'a pas besoin d'être qualifié (et bien souvent, elle ne l'est pas) pour juger la personnalité du candidat, donc, par pitié, n'oubliez pas que vous êtes le seul juge au final. Mais ne pensez pas que vous pouvez poser une demi-douzaine de question sur le C++ et avoir la moindre chance de savoir si le candidat sait de quoi il parle, du moins d'un point de vue technique.

Par contre, si vous avez un niveau techique suffisant pour lire cette FAQ, vous pouvez y piocher quantité de bonnes questions pour une interview. La FAQ contient bon nombre de choses permettant de séparer le bon grain de l'ivraie. La FAQ se concentre sur ce que les programmeurs doivent faire, plutôt que d'essayer de voir ce que le compilateur leur laisse faire. Il y a des choses en C++ qu'il est possible de faire mais qu'il vaut mieux éviter. La FAQ sert à faire le tri là-dedans.


Que signifie exactement "mauvais" dans cette FAQ ?
auteur : Marshall Cline
Cela signifie que c'est quelque chose que vous devez éviter la plupart du temps, mais pas tout le temps. Par exemple, vous finirez par utiliser la solution "mauvaise" quand elle est la moins mauvaise solution possible. C'est de l'humour. Ne le prenez pas au premier degré.

La véritable raison de l'utilisation de ce terme (je vous entend dire : "il y a un motif réel caché derrière cela". Et bien c'est tout à fait le cas) est de pousser les nouveaux programmeurs C++ à remettre en question leux vieilles habitudes. Par exemple, les programmeurs C qui passent au C++ utilisent souvent des pointeurs, des tableaux, des #define plus que nécessaire. Cette FAQ liste ces choses commes "mauvaises" afin de pousser ces nouveaux programmeurs C++ dans la bonne direction. Le but des métaphores du genre "les pointeurs sont mauvais" est de convaincre les nouveaux programmeurs C++ que le C++ n'est pas "simplement du C avec les commentaires //".

Un peu plus sérieusement, je ne veux pas dire que les macros, les tableaux, les pointeurs sont criminels comme un meurte ou un enlèvement. Bien que pour les pointeurs ... (ceci est une PLAISANTERIE). "Mauvais" , dans le cas présent, veut dire "choquant". Ne cherchez donc pas une définition technique pour savoir ce qui est "mauvais" ou ne l'est pas.

Autre chose : les choses étiquetées "mauvaises" ne le sont pas dans toutes les situations. Quand elles sont la moins mauvaise des solutions, utilisez-les !


Est-ce que j'utiliserai un jour ces constructions sataniques ?
auteur : Marshall Cline
Bien sûr !

Ce qui convient à l'un ne convient pas à un autre. Gardez toujours à l'esprit que "Développer des programmes, c'est Prendre des Décisisons". PENSER n'est pas qu'un mot. Il y a très peu de règles du genre "Il faut toujours ..." ou "Il ne faut jamais ...." dans le développement, le genre de règle que l'on applique sans réfléchir, les règles qui conviennent à tout le monde.

En bon français, vous devrez prendre des décisions, et la justesse de vos décisions affecteront la valeur commerciale de votre software. Et dans certains cas, vous devrez faire le choix parmi une série de solutions toutes plus ou moins mauvaises. Qaund cela arrive, le mieux que vous puissiez espérer est de choisir la moins mauvaise de ces solutions.

Finalement, vous finirez par utiliser des techniques "mauvaises". Si cela vous dérange, changez "mauvais" en "généralement indésirable" (mais ne quittez pas votre travail pour cela, ce changement de terme permet juste aux gens de mieux dormir).


Comment le C++ permet-il d'améliorer le compromis entre fiabilité et simplicité d'utilisation ?
auteur : Marshall Cline
En C, l'encapsulation se faisait en définissant les static dans un fichier compilé ou dans un module. Cela permettait d'éviter qu'un autre module n'accède à la partie déclarée statique. (Au passage, les données statiques dans la limite d'un fichier est dépréciée en C++, ne le faites donc plus).

Malheureusement, cette approche ne permet pas de supporter plusieurs instances des données, étant donné qu'il n'y a pas de support direct pour créer des instances multiples des données statiques d'un module. Si plusieurs instances étaient nécessaires en C, les programmeurs utilisaient généralement une structure. Mais, pas de chance, les structures C ne supportent pas l'encapsulation. Cela dégradait le compromis entre fiabilité (le fait ce dissimuler l'information) et facilité d'utilisation (les instances multiples).

En C++, vous pouvez avoir des instances multiples et l'encapsulation en utilisant les classes. La partie publique de la classe contient son interface, qui consiste habituellement en ses fonctions membres publiques et ses fonctions amies. Les parties protégées et/ou privées contiennent l'implémentation de la classe, ce qui est habituellement l'endroit où sont stockées les données.

Le résultat final est comme une "structure encapsulée". Cela améliore le compromis entre fiabilité (dissimulation de l'information) et facilité d'utilisation (les instances multiples).



Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.
Certaines parties de ce document sont sous copyright Marshall Cline