Document du 22/11/02 - Retrouvez la version la plus récente sur http://www.up.u

Document du 22/11/02 - Retrouvez la version la plus récente sur http://www.up.univ-mrs.fr/wcpp/lecons.htm Centre Informatique pour les Lettres et les Sciences Humaines C++ : Leçon 1 Principes de base 1 - Du langage machine aux langages de haut niveau..............................................................2 2 - Programmer ......................................................................................................................3 3 - Codage de l'information en mémoire ..................................................................................4 La case mémoire vue comme un nombre entier sans signe ........................................ 6 La case mémoire vue comme un nombre entier relatif ............................................... 6 Autres façons de voir dans la mémoire une quantité numérique ................................ 6 Et pour représenter autre chose que des nombres ? .................................................. 7 Récréation................................................................................................................ 8 4 - Traiter l'information ..........................................................................................................9 Accéder à l'information ............................................................................................10 Modifier l'information ..............................................................................................11 5 - Bon, c'est gentil tout ça, mais ça fait déjà 11 pages. Qu'est-ce que je dois vraiment en retenir ?..........................................................................................................................12 6 - J'ai rien compris, est-ce que quelqu'un d'autre pourrait m'expliquer ça un peu plus clairement ? ....................................................................................................................12 Pour aller moins vite................................................................................................12 Pour aller plus loin ..................................................................................................13 7 - Pré-requis de la Leçon 2 ..................................................................................................13 C++ - Leçon 1 Principes de base 2/13 J-L Péris - 22/11/02 1 - Du langage machine aux langages de haut niveau Le fonctionnement d'un ordinateur repose sur l'exécution de programmes. Au sens propre, un programme est une liste d'instructions dont l'exécution produit un résultat utile ou agréable à l'utilisateur de la machine1. Pour qu'une liste d'instructions soit exécutable, il faut qu'elle ne se compose que d'instructions faisant partie du "vocabulaire" de base du processeur2. Rédiger de telles listes présente deux inconvénients majeurs : - Le vocabulaire de base d'un processeur ne comporte que des instructions correspondant à des opérations très élémentaires. Exprimer la décomposition d'une tâche humainement significative dans ce "langage machine" est très long et très difficile. - Les différents processeurs disponibles sur le marché ont chacun leur vocabulaire de base. Ce qui constitue un programme pour l'un d'entre eux n'est qu'un charabia inutilisable pour les autres. Etant donné la difficulté d'écriture des programmes et la rapidité de l'évolution technologique des processeurs, la complexité maximale d'un programme pouvant être écrit pour un processeur donné avant que celui-ci ne cesse d'être fabriqué est sévèrement limitée. Ces deux inconvénients ont, depuis longtemps, conduit à une conséquence très simple : on n'écrit plus que très exceptionnellement des programmes. Comme, par ailleurs, le besoin de faire sans cesse effectuer de nouvelles tâches par les ordinateurs semble à peu près universellement répandu, il a fallu trouver un artifice rendant possible la production de programmes dans des conditions économiquement acceptables : les programmes ne sont plus écrits (par des humains) mais générés automatiquement (par les ordinateurs eux-mêmes). Cette stratégie repose sur la mise au point de deux éléments essentiels : un langage informatique permettant de décrire facilement la tâche à effectuer, et un dispositif de traduction automatique permettant de produire un programme dont l'exécution effectue la tâche décrite. Ce double objectif (facilité de description des tâches / possibilité d'une traduction automatique) donne évidemment naissance à des contraintes contradictoires : le langage de programmation idéal devrait être aussi proche que possible du langage naturel, ce qui le rendrait facile à apprendre et permettrait de décrire aisément les traitements souhaités3, tout en évitant de trop s'éloigner du langage de la machine, parce que cela augmente la difficulté de la traduction automatique (ou la rend même irréalisable) et diminue généralement l'efficacité des programmes générés. La nécessité de trouver un compromis entre ces deux pôles, jointe à la diversité des tâches envisagées, a donné naissance à une pléiade de langages qui ont connu des fortunes diverses : Fortran, Cobol, Basic, Algol, Pascal, Lisp ou Ada ne sont que quelques-uns des plus connus. Selon les estimations disponibles, plus de 1000 langages de programmation ont été mis au point (c'est à dire qu'on ne les a pas simplement conçus, mais qu'on a effectivement produit les outils de traduction automatique correspondants) au cours de la seconde moitié du XX° siècle. A l'heure actuelle, la technique de traduction automatique la plus souvent employée est la compilation : le programmeur écrit un texte source dans le langage de programmation de son choix, puis fait appel à un programme capable de traduire ce texte en une suite d'instructions exécutables par le processeur visé (ce qu'on appelle le code objet). Pour réellement donner naissance à un programme exécutable, ce code objet doit encore être adapté à son contexte d'utilisation (et, en particulier, aux us et coutumes imposés par le système d'exploitation en vigueur) et, éventuellement, combiné avec d'autres fragments de code objet préexistants, auxquels il peut sous-traiter certains aspects de sa tâche. Cette opération, connue sous le nom d'édition de liens, est exécutée par un programme qu'on appelle un linker. L'ensemble du processus de création d'un programme comporte donc trois phases, et peut être résumé par le tableau suivant : 1 Par "utilisateur de la machine", il faut entendre "celui qui est à l'origine de l'exécution du programme". Dans le cas d'un virus, par exemple, le résultat est rarement utile ou agréable à celui qui est assis en face de l'écran… 2 Le processeur est le composant (ou le groupe de composants) électronique(s) qui, au sein d'un ordinateur, assure l'exécution des programmes. 3 Ce point mériterait sans doute d'être débattu, mais cela nous entraînerait un peu loin de notre sujet. C++ - Leçon 1 Principes de base 3/13 J-L Péris - 22/11/02 Nom de l'opération Produit Responsable Objectif Rédaction Texte source Programmeur (être humain) Décrire la procédure à suivre pour parvenir au résultat souhaité Compilation Code objet Compilateur (programme) Traduire le texte source en une suite d'instructions exécutables par le processeur visé. Edition de liens Programme exécutable Linker (programme) Greffer sur le code objet tout ce qui lui manque pour devenir un programme exécutable dans le contexte visé. Il est évident que, même si de nouveaux compilateurs et linkers peuvent souvent être écrits en faisant appel à des versions antérieures de ces programmes, il faut bien que, à un moment donné, quelqu'un se donne le mal d'écrire directement un programme (en langage machine). En fait, la création d'un compilateur n'est pas entreprise a posteriori, une fois le processeur fabriqué. C'est au contraire une opération étroitement liée à la conception même d'un nouveau processeur, car l'avenir commercial de celui-ci dépend de façon cruciale de la possibilité de réaliser des compilateurs efficaces. Ces définitions étant posées, il nous faut bien reconnaître que le langage courant emploie presque systématiquement le mot programme pour désigner un texte source. Bien que ce terme soit clairement impropre (puisque aucun processeur n'est capable d'exécuter directement un texte écrit dans un langage de programmation), ce raccourci verbal est justifié par le fait qu'il est possible de traduire, de façon entièrement automatique, le texte source en un programme. La nuance n'a donc d'importance réelle que pour les programmeurs eux-mêmes (notamment parce qu'ils doivent mettre en œuvre le processus de traduction), et, sauf s'ils sont vraiment extrêmement débutants, il n'y a aucun risque de confusion dans leur esprit ! On considère habituellement que, dès la deuxième page d'un cours de programmation, le lecteur a atteint un niveau de compétence tel qu'il n'y a plus de risque d'erreur, et on s'autorise donc à lui parler normalement : le mot programme peut alors, selon le contexte, désigner soit du texte source, soit du code exécutable, et c'est seulement lorsque l'ambiguïté est réelle que la terminologie exacte est mobilisée. 2 - Programmer Même si le recours à un langage de haut niveau nous isole de façon assez efficace du détail des instructions composant le "vocabulaire" d'un processeur, il n'est pas réellement possible d'écrire des programmes sans avoir conscience de certaines réalités bassement matérielles. La première de ces réalités incontournables est que la seule chose sur laquelle le processeur peut agir directement est la mémoire de l'ordinateur. Fondamentalement, toutes les instructions exécutables ne font que modifier le contenu de certaines parties de la mémoire, en fonction du contenu d'autres parties de cette même mémoire. L'écriture d'un programme traitant un problème quelconque exige donc de surmonter trois difficultés : - Il faut représenter l'état initial de la situation sous forme de données contenues dans la mémoire. - Il faut énumérer les opérations qui transforment les données représentant l'état initial en données représentant l'état souhaité (ce qu'on appelle les résultats). - Il faut permettre à l'utilisateur du programme d'interpréter les résultats obtenus comme une représentation de la solution qu'il attend. Dans un exemple très simple, ces difficultés sont surmontées si facilement qu'on risque d'avoir du mal à les percevoir. Ainsi, si le problème à résoudre est le calcul de la surface d'un rectangle à partir de sa largeur et de sa longueur, représenter l'état initial se résume à stocker ces deux valeurs en mémoire, et le traitement qui conduit au résultat désiré est une simple multiplication dont il suffit, pour satisfaire l'utilisateur, d'afficher le résultat. Notons tout de même, au passage, que cette simplicité provient en grande partie du fait que la plupart des langages de programmation permettent de manipuler directement les quantités numériques (que ce soit pour les stocker en mémoire, les multiplier entre uploads/Industriel/ 01-principes-de-base.pdf

  • 10
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager