01-prog
Introduction au C++
Imprimer le cours Envoyer à un ami
Le C++ est un langage parmi d'autres. Tous ne sont pas équivalents et peuvent avoir des utilisations différentes. Je te propose ici de te donner quelques informations qui te permettront de mieux orienter ton apprentissage. Tu sais c'est la partie chiante d'un cours quand le prof commence à raconter sa vie...
L'historique
Toutes les machines qui nous entourent fonctionnent grâce à des suites d'impulsions (des bits en base 2: "0" ou "1"). Les premiers programmeurs codaient directement leurs instructions en binaire. Afin de faciliter la communication entre le développeur et la machine, il fut nécessaire de développer une interface, un langage.
Dans un premier temps vinrent des langages bas niveau: les assembleurs. Ces langages sont spécifiques à chaque machine et s'adressent directement aux composants constituant celle-ci. C'est en fait une traduction directe du train binaire en instructions simples. (ex: charger en mémoire une valeur, lire une valeur, faire une addition,...)
Ensuite, dans un souci de simplicité, les langages devinrent de plus en plus complexes, proches de l'anglais écrit. Se succédèrent alors: BASIC, COBOL, FORTRAN. Notons que plus un langage est dit évolué plus il devient spécifique et facile d'utilisation (nous parlons ici uniquement de la syntaxe).
En 1972, Dennis Ritchie créa le C ancêtre du C++. Ce langage peut être qualifié à la fois de bas niveau car il permet de faire appel à toutes les ressources de la machine mais aussi de langage évolué. En effet, il introduit une syntaxe assez complexe par rapport aux langages précités ainsi que de nombreuses fonctions évoluées. Ces fonctions sont regroupées en librairies que tu peux considérer comme des boîtes à outils.
La mise à jour la plus marquante du C fut apportée par Bjarde Stroustup en 1982. Il y intégra la programmation objet. Le C++ est en fait une surcouche du C (C++ signifie une incrémentation du C). Il hérite donc de tous les outils du C.
Principe de la programmation objet
Trois générations de langage se sont succédés et coexistent encore aujourd'hui: les langages dits linéaires, modulaires puis objets.
Tous les premiers langages s'exécutaient de façon linéaire. Chaque ligne du programme était lue puis exécutée jusqu'à la dernière. Il était possible de faire des sauts ou des boucles mais le principe restait le même. Cette approche simpliste ne pouvait pas s'appliquer à des programmes complexes. De plus, les développeurs ne pouvaient pas réutiliser des outils déjà écrits. Le langage assembleur est un exemple de langage linéaire.
Afin, de réutiliser le code et d'éviter les redondances, les langages dits modulaires virent le jour. Le principe est de regrouper un ensemble d'instructions dans des fonctions ou procédures. En effet, chaque tâche exécutée par un programme représente un nombre variable d'instructions. Ces instructions sont réunies afin de pouvoir segmenter le code et de favoriser la réutilisation de celui-ci. Le C fait partie de ces langages.
Enfin, la méthode objet apparue. Elle est en fait une évolution de l'approche modulaire. Elle lui apporte principalement trois aspects primordiaux:
* L'encapsulation: cette technique permet de réunir des variables et des fonctions au sein d'une même entité nommée classe. Les variables sont appelées les données membres, les fonctions sont appelées les méthodes. L'accès aux données et méthodes peut-être aussi réglementé.
* L'héritage: cette technique permet de définir une hiérarchie de classe. Chaque classe fille hérite des méthodes et des données de ces "pères". En pratique, la classe de base est une classe générique, ainsi plus on descend dans la hiérarchie, plus on spécialise cette classe.
* Le polymorphisme (non ce n'est pas un gros mot!): nous verrons que les objets sont définis par leur classe (sorte de moule). Pour expliquer le polymorphisme, retenons que deux objets, héritant une même méthode d'une classe parente, peuvent réagir de façon différente à l'appel de cette méthode.
Par analogie, nous pouvons considérer l'exemple débile de l'ascenseur et de la bombe nucléaire... ben oui... Ces deux objets descendent de l'objet machine et donc héritent de la fameuse fonction "bouton rouge" que chaque machine possède. Maintenant, je te mets au défi d'appuyer sur le bouton rouge d'un ascenseur: c'est beaucoup plus violent que pour la bombe nucléaire. En effet, dans le cas de la bombe H, elle pète loin de toi sur un atol de Polynésie, alors que les coups de balais de ton gardien qui te coure dans la cage d'escalier, ça tu les sens!
L'appel de la même fonction a donc entraîné un comportement différent.
Au cas où tu n'aies pas suivi les dernières notions, ne t'inquiète pas. Premièrement, rappelle toi que tu es un (gros) nul et fier de l'être : NULL POWER, deuxièmement ces notions sont vues en détail dans la partie 2 du cours.
Quel type d'utilisation?
Saches tout d'abord que le C++ est le langage le plus utilisé par la communauté des développeurs. Ce langage est utilisé aussi bien sur UNIX que MacOS ou Windows. Entre autres, la plupart des applications graphiques comportent une partie en C++, ce qui inclut les traitements de textes, utilitaires, jeux,...
Toutefois, il ne faut pas croire que tout est possible avec le C++ ou au contraire que c'est un langage dépassé face au Java ou C#. Tu verras, si l'informatique devient ton métier, que l'on ne peut pas se limiter à un seul langage. Le choix du langage est souvent imposé par différents facteurs: portabilité, rapidité, disponibilité de composants déjà écrits, outils de développement,...
En fait, nous ne rentrerons pas dans un débat stérile afin de savoir quel langage est le plus avancé technologiquement. Le C++ est ici un choix d'apprentissage. En effet, à cause de sa conception le C++ hérite des langages modulaires et objets. Il n'est ni totalement objet ni restreint à un langage modulaire de type C. Ce conflit de génération qui rend le C++ un peu "bâtard" est un avantage pour les débutants. En fait, lorsque tu auras fini cet apprentissage tu auras la possibilité et la compétence de t'orienter tout seul vers le langage de ton choix.
Je te rappelle aussi que ce site à pour vocation de t'apprendre les bases de la programmation. Il n'a pour l'instant pas l'ambition de se spécialiser dans un sous-ensemble du C++. Il ne sera donc pas fait question d'environnement graphique ou de développement spécialisé dans une technologie donnée (Microsoft DirectX, Open GL, Linux, réseau,...)
Différence C/C++
Le C++ introduit un certain nombre d'améliorations syntaxiques, d'extensions et de nouveautés par rapport au C, dont les principales sont essentiellement liées à la programmation orientée objet. On peut décomposer le langage en C++=C+E+S+P avec:
* C désigne la norme AINSI C
* E représente les écarts à la norme
* S représente les spécificités de C++ non liées à la théorie objet
* P représente les possibililités de la programmation objet (la programmation objet n'est pas imposée)
Pour le néophyte, ces différences ne poseront aucun problème. Pour la personne qui sait déjà programmer en C, les quelques incompatibilités ou différences seront exposées tout le long du cours.
Conclusion
Une fois les connaissances de ce site acquises, il te sera facile de trouver des ouvrages permettant d'aller plus loin dans l'apprentissage du C++. Tu passeras alors du stade "gros nul" au stade "nul mais se soigne".