Programme informatique

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Programme (informatique))
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Programme.

Un programme informatique est une séquence d'instructions qui spécifie étape par étape les opérations à effectuer pour obtenir un résultat. Il est exprimé sous une forme qui permet de l'utiliser avec une machine comme un ordinateur pour exécuter les instructions. Un programme est la forme électronique et numérique d'un algorithme exprimé dans un langage de programmation - un vocabulaire et des règles de ponctuation destinées à exprimer des programmes[1],[2].

  • Un programme source sont les opérations telles qu'elles ont été exprimées par un programmeur, souvent dans un langage de programmation de haut niveau, c'est-à-dire dont la notation s'inspire des langues naturelles - le vocabulaire et la ponctuation utilisée sont typiquement inspirés de l'anglais.
  • Un programme objet ou binaire est la forme finale sous laquelle il pourra être exécuté par un ordinateur: une suite de valeurs binaires correspondant à des instructions natives du microprocesseur équipant la machine. Ce langage machine, difficile à manipuler pour le programmeur, est obtenu par traduction automatique du programme source[3],[4].

Des programmes sont présents dans tous les appareils informatiques: ordinateur, console de jeu, guichet automatique bancaire. Des programmes sont également présent dans des pièces de matériel informatique ainsi que de nombreux dispositifs électroniques: imprimante, modem, GPS, téléphone mobile, machine à laver, appareil photo numérique, décodeur TV numérique, injection électronique ou pilote automatique.

Introduction[modifier | modifier le code]

Un programme est une suite d'instructions qui spécifient étape par étape les opérations à exécuter par un ordinateur. Le programme décrit de manière exacte les différentes étapes d'un algorithme: ce qu'il y a à faire, quand et avec quelles informations[1]. Selon l'architecture de von Neumann crée en 1945, un programme est enregistré dans la mémoire de l'ordinateur, ce qui permet de l'exécuter de manière répétée sans intervention humaine[2].

Un langage de programmation est une notation utilisée pour exprimer des algorithmes et les faire exécuter par un ordinateur. Un algorithme est un procédé pour obtenir un résultat par une succession de calculs, décrits sous forme de pictogrammes et de termes simples dans une langue naturelle[5]. Jusqu'en 1950 les programmeurs exprimaient les programmes dans le langage de l'ordinateur, un langage fait de termes bizarres qui rendait le travail pénible et le résultat sujet à de nombreuses erreurs. Dès 1950 les programmes ont été décrits dans un langage différent - un langage de programmation, ce qui rendait les opérations plus simples à exprimer. Le programme était ensuite traduit automatiquement sous une forme qui permet d'être exécuté par l'ordinateur[4].

Sur demande, l'ordinateur exécutera les instructions du programme. Bien qu'il exécute toujours exactement ce qui est instruit et ne se trompe jamais, il peut arriver que les instructions qu'il exécute soient erronées à la suite d'une erreur humaine lors de l'écriture du programme. Les langages de programmation visent à diminuer le nombre de ces bugs ; ceux-ci sont cependant inévitables dans des programmes de plusieurs milliers de lignes[1]. Un programme de traitement de texte peut être fait de plus de 750 000 lignes de code, et un système d'exploitation peut être fait de plus de 50 millions de lignes. En moyenne un programmeur prépare, écrit, teste et documente environ 20 lignes de programme par jour, et la création de grands programmes est le fait d'équipes et peut nécessiter plusieurs mois voire plusieurs années[6].

La programmation - la création de programmes - est un sujet central en informatique. Les instructions qu'un ordinateur devra exécuter doivent pouvoir être exprimées de manière précise et non ambiguë. Pour ce faire, les langages de programmation combinent la lisibilité de l'anglais avec l'exactitude des mathématiques[7]. Les programmes sont créés par des programmeurs, ou des ingénieurs logiciels. La création d'un programme comprend une série d'activités telles que la conception, l'écriture, le test et la documentation. En vue d'obtenir un programme de meilleure qualité, le travail de programmation se fait selon une démarche systématique et planifiée[8],[6].

Un programme fait généralement partie d'un logiciel: un ensemble qui comporte typiquement plusieurs programmes, ainsi que tout le nécessaire pour permettre leur utilisation: fichiers de données, fichiers de configuration et documentation[9].

En droit un programme est une œuvre écrite, protégée par le droit d'auteur. Le texte peut paraitre à première vue dénué de sens, mais apparaitre très clair et informatif pour un lecteur averti. Le droit d'auteur s'applique au programme du moment qu'il est enregistré de manière permanente, même s'il n'existe pas d'édition sur papier. Le droit d'auteur protège autant le programme source - écrit par le programmeur sous une forme formalisée de l'anglais, que le programme binaire - celui traduit sous forme de bits par le compilateur[10].

Histoire[modifier | modifier le code]

  • En 1842 la comtesse Ada Lovelace crée des diagrammes pour la machine analytique de Babbage, diagrammes qui sont considérés aujourd'hui comme étant les premiers programmes informatiques au monde.
  • En 1936, la publication de l'article fondateur de la science informatique On Computable Numbers with an Application to the Entscheidungsproblem[11] par Alan Turing allait donner le coup d'envoi à la création de l'ordinateur programmable. Il y présente sa machine de Turing, le premier calculateur universel programmable, et invente les concepts modernes de programmation et de programme.
  • Le Harvard Mark I, machine mécanographique construite en 1944 est le premier appareil construit selon le principe du calculateur universel machine de Turing.
  • Dans les années 1950 les programmes informatiques étaient des inscriptions sur des cartes en carton perforé. La programmation consistait à percer des trous dans le carton. Ce travail fastidieux était souvent effectué par des femmes. Exécuter un programme consistait à soumettre une pile de cartes — préalablement triées — à un lecteur de carte. un appareil dont la mécanique est semblable à celle des piano mécaniques. Cette technique a subsisté jusqu'en 1980.
  • L'avènement de la programmation structurée en 1970 a grandement simplifié le travail des programmeurs et permis la création de programmes traitant des tâches plus nombreuses et plus complexes. Il en va de même avec l'avènement de la programmation orientée objet entre 1980 et 1990, Conformément à la phrase d'Edsger Dijkstra : « Les progrès ne seront possibles que si nous pouvons réfléchir sur les programmes sans les imaginer comme des morceaux de code exécutable ».
  • Le premier système d'exploitation a été créé en 1954. La même année sont apparus les premiers assembleurs, et le premier compilateur pour le langage FORTRAN.
  • C'est l'invention des mémoires à tore de ferrite en 1950 qui a marqué le début des programmes enregistrés, programmes qui sont chargés dans la mémoire avant d'être exécutés et qui utilisent la mémoire pour stocker des informations temporaires dans des variables comme cela se fait encore aujourd'hui.
  • De 1980 à 1990 la généralisation des programmes avec interface utilisateur graphique ont permis l'utilisation des programmes moyennant avec très peu de formation et contribué à la démocratisation de l'utilisation de l'ordinateur. Auparavant les programmes étaient utilisés par des professionnels.

Langage de programmation[modifier | modifier le code]

Article détaillé : langage de programmation.

Un langage de programmation est un vocabulaire et un ensemble de règles d'écriture utilisées pour instruire un ordinateur d'effectuer certaines tâches[12]. La plupart des langages de programmation sont dits de haut niveau, c'est-à-dire que leur notation s'inspire des langues naturelles - le vocabulaire et la ponctuation utilisée sont typiquement inspirés de l'anglais[3].

Le processeur est le composant électronique qui exécute les instructions. Chaque processeur est conçu pour exécuter certaines instructions, dites instructions machine[13]. La palette d'instructions disponibles sur un processeur forme le langage machine. Par exemple le processeur Intel 80486 a une palette de 342 instructions[14].

Le langage d'assemblage est une représentation textuelle des instructions machine[15], un langage de bas niveau, qui permet d'exprimer les instructions machines sous une forme symbolique plus facile à manipuler, où il y a une correspondance 1-1 entre les instructions machines et les instructions en langage d'assemblage[14].

Les langages de programmation de haut niveau permettent d'exprimer des instructions de manière synthétique, en faisant abstraction du langage machine. Par rapport au langage d'assemblage, ils permettent d'exprimer des structures, permettent d'écrire des programmes plus rapidement, avec moins d'instructions, les programmes écrits dans des langages de haut niveau sont plus simples à modifier et portables - ils peuvent fonctionner avec différents processeurs[14]. Cependant un programme exprimé en langage de haut niveau, puis compilé est moins efficace et comporte plus d'instruction que s'il avait été exprimé en langage d'assemblage[16].

Entre 1950 et 2000, plus de 50 langages de programmation sont apparus. chacun apportait un lot de nouveaux concepts, de raffinements et d'innovations. Jusque dans les années 1950, l'utilisation des langages de programmation était semblable à l'écriture d'instructions machines. L'innovation des années 1960 a été de permettre une notation proche des mathématiques pour écrire des instructions de calcul. Les innovations des années 1970 ont permis l'organisation et l'agrégation des informations manipulées par les programmes - voir structure de données et structure de contrôle. Puis l'arrivée de la notion d'objet a influencé l'évolution des langages de programmation postérieurs à 1980[17].

Ci-dessous le programme Hello world exprimé en langage de programmation Java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!"); 
    }
}

Le même programme, exprimé dans le langage d'assemblage des processeurs x86:

main proc      
jmp debut
mess db 'Hello world!$'
debut:
mov dx, offset mess
mov ah, 9
int 21h
ret
main endp      
cseg ends
end main

Programmation[modifier | modifier le code]

Article détaillé : programmation.

La programmation consiste à parcourir le chemin qui va d'une idée - souvent vague - jusqu'à une suite d'instructions précises exécutées par une machine[18]. Les langages de programmation ont été créés dans l'optique de faciliter le travail du programmeur en raccourcissant le chemin qui va de l'idée au code source[19].

Les programmes sont créés par des programmeurs, ou des ingénieurs logiciels. Les programmeurs travaillent principalement sur l'écriture de programmes tandis que les ingénieurs logiciels travaillent à toutes les étapes de la création du programme. Ils appliquent une démarche formelle et rigoureuse basée sur le génie industriel et les techniques de management[6].

Avant de commencer à écrire un programme destiné à résoudre un problème, le programmeur doit déterminer les caractéristiques du problème à résoudre. Ceci se fait en plusieurs étapes indépendantes du langage de programmation utilisé. La technique courante est celle d'un cycle de développement, qui comporte des étapes de définition, de conception, d'écriture, de test, d'installation et de maintenance[12]:

  • Le problème est tout d'abord examiné en détail en vue de connaitre l'étendue du programme à créer. L'étape suivante consiste à choisir des solutions et des algorithmes, puis décrire leur logique sous forme de diagrammes, en vue de clarifier le fonctionnement du programme et faciliter son écriture[12].
  • Une fois le programme écrit, celui-ci subit une suite de tests. Les résultats produits par le programme sont comparés avec des résultats obtenus manuellement. De nombreux tests sont nécessaires et les mêmes tests sont exécutés plusieurs fois. Ensuite de quoi le programme est installé dans la machine de l'utilisateur final, qui fera ses premières observations. Le programme sera ensuite modifié en fonction des commentaires faits par l'utilisateur, et des inconvénients qu'il a signalés[12].
  • Les besoins des utilisateurs et des systèmes informatiques varient continuellement, et le programme est régulièrement reconstruit et modifié en vue d'être adapté aux besoins. De nouvelles fonctions y sont ajoutées, et des erreurs qui n'avaient pas été décelées auparavant sont corrigées[12].

Le but du cycle de développement est de réduire les coûts de fabrication tout en augmentant la qualité du programme[6]. Les qualités recherchées sont l'efficacité, la flexibilité, la fiabilité, la portabilité, et robustesse, il doit également être convivial et facile à modifier[8]:

Il est attendu d'un programme qu'il demande peu d'effort de programmation, que les instructions demandent peu de temps et nécessitent peu de mémoire, qu'il peut être utilisé pour de nombreux usages et donne les résultats attendus quels que soient les changements - permanents ou temporaires - du système informatique[8].

Il est également attendu qu'il peut être facilement transféré sur un modèle d'ordinateur différent de celui pour lequel il est construit, qu'il produit des résultats probants y compris lorsque les informations entrées sont incorrectes, qu'il peut être facilement compris par un usager novice et que le code source peut être facilement modifié par la suite[8].

Exécution[modifier | modifier le code]

Des programmes peuvent être exécutés non seulement par les ordinateurs, mais par les nombreux appareils qui sont basés sur des composants informatique, par exemple certains robots ménagers, téléphones, fax, instruments de mesure, récepteur de télévision, ainsi que les pièces de matériel informatique telles que disque durs, routeurs, imprimantes, les consoles de jeu vidéo, les assistants personnels et les automates bancaires. Contrairement aux ordinateurs, ces appareils ne contiennent souvent pas de système d'exploitation, les programmes sont enregistrés dans l'appareil lors de la fabrication, et la vitesse d'exécution des programmes est souvent d'importance mineure[20].

Sans contre-indication, les instructions d'un programme sont exécutées une après l'autre, de manière linéaire. Les langages de programmations permettent d'exprimer des alternatives : une suite d'instructions est exécutée uniquement si une condition donnée est remplie, dans le cas contraire une autre suite est exécutée. Les langages de programmation permettent également de faire répéter l'exécution d'une suite d'instructions jusqu'à ce qu'une condition donnée soit remplie[6].

L'exécution se déroule de manière différente suivant si le langage de programmation s'utilise avec un compilateur ou un interpréteur[21]:

  • Un compilateur lit le programme source en entier, et le transforme en instructions machines. La transformation peut se faire en plusieurs étapes et nécessiter plusieurs lectures du programme. Une fois traduit, le programme est ensuite enregistré en vue d'être plus tard copié en mémoire et exécuté par le processeur tel quel[21].
  • Un interpréteur par contre, opère ligne par ligne: lit une ligne de programme source, puis exécute immédiatement les instructions machines correspondantes. L'avantage d'un intepréteur c'est que les erreurs peuvent être immédiatement corrigées. Le désavantage est que l'exécution du programme est 5 à 25 fois moins rapide que si le programme avait été préalablement traduit et exécuté tel quel[21].

L'exécution des programmes est basé sur le principe de la machine à programme enregistré, de John von Neumann[22]: les instructions de programme sont exécutées par un processeur; ce composant électronique exécute chaque instruction de programme par une succession d'opérations charger-décoder-exécuter: l'instruction est tout d'abord copiée depuis la mémoire vers le processeur, elle est ensuite décomposée bit par bit pour déterminer l'opération à effectuer, puis cette opération est exécutée. La plupart des opérations sont d'ordre arithmétique (addition, soustraction), ou logiques. L'exécution de programmes par le processeur central (anglais CPU) contrôle la totalité des opérations effectuées par l'ordinateur[23].

L'exécution du cycle charger-décoder-exécuter est rythmé par une horloge branchée au processeur[24]. En 2011 la fréquence d'horloge supportée par les processeurs contemporains se compte en mégahertz ou en gigahertz, ce qui corresponds à des millions voire des milliards de cycles par seconde[21].

Les processeurs contemporains peuvent traiter plusieurs instructions simultanément: lorsqu'une instruction est chargée, le processeur charge immédiatement l'instruction suivante, sans attendre que cette instruction soit décodée puis exécutée, et les processeurs peuvent également charger / décoder / exécuter plusieurs instructions en un seul cycle d'horloge[24].

Le système d'exploitation est un ensemble de programme qui surveille l'exécution des autres programmes. Il est activé automatiquement lorsque l'ordinateur est mis en marche[6],[8]. Les systèmes d'exploitation contemporains permettent d'exécuter simultanément plusieurs programmes, au service de plusieurs utilisateurs, et en utilisant plusieurs processeurs. Un seul processeur exécute typiquement plusieurs programmes. Dans les faits, le processeur n'exécute qu'un seul programme à la fois à un instant donné, et un programme planificateur (anglais scheduler) du système d'exploitation effectue une rotation, ou régulièrement il interrompt le programme en cours d'exécution, pour exécuter le programme suivant[25]. Le rythme de rotation est cependant tellement rapide qu'il donne l'illusion que les programmes sont exécutés en même temps[26].

Sujets connexes[modifier | modifier le code]

Un appareil informatique est une machine qui effectue des opérations sur des informations. Les opérations sont exécutées en suivant les instructions de programmes informatique, selon le modèle du calculateur universel imaginé par Alan Mathison Turing en 1936.

Un processeur est un composant électronique qui effectue des opérations en suivant des instructions. En 2009 les processeurs peuvent exécuter plusieurs centaines de millions d'instructions par seconde.

Un programme est typiquement composé d'un ensemble de procédures et de fonctions. Une procédure est une suite d'instructions destinées à réaliser une opération - par exemple trier une liste. Une fonction est une suite d'instructions destinées à produire un résultat - par exemple un calcul.

En mathématiques et en informatique, un algorithme est une suite d'opérations de calcul qui, réalisées de façon systématique, permettent d'obtenir un résultat. La suite d'opération peut être exécutée par un humain ou par un appareil informatique. Les programmes informatiques contiennent de nombreux algorithmes.

Un compilateur est un programme qui crée un programme exécutable en transformant les instructions d'un programme source écrit dans un langage de programmation donné en les instructions machines équivalentes d'un processeur donné.

Un assembleur est un compilateur simplifié, qui transforme des instructions machine écrites sous forme de mots clés (langage d'assemblage) en les suites de bits correspondantes.

Un interprète est un programme qui exécute les instructions machines équivalentes aux instructions d'un programme source formulées dans un langage de programmation donné.

Un langage de programmation est un ensemble de règles d'écriture de programmes source - vocabulaire et règles de ponctuation - qui permettent d'exprimer des programmes qui pourront être transformés en instruction machines à l'aide des algorithmes contenus dans un compilateur ou un interprète. Les instructions qu'un processeur exécute sont des suites de bits difficiles à comprendre et à manipuler par un humain, mais faciles à automatiser par des circuits électroniques. L'écriture du programme dans un langage de programmation donné est destinée à faciliter le travail du programmeur.

Un logiciel est un bien composé d'un ou de plusieurs programmes, associés à un contrat de licence par lequel l'auteur octroie au détenteur le droit d'utiliser le programme.

Un bug est un défaut de construction dans un programme. Les instructions que l'appareil informatique exécutent ne correspondent pas à ce qui est attendu, ce qui provoque des dysfonctionnements et des pannes.

Notes et références[modifier | modifier le code]

  1. a, b et c (en)A. Michael Noll,Principles of modern communications technology,Artech House - 2001,(ISBN 9781580532846)
  2. a et b (en) V. Rajaraman, Introduction to Information Technology, PHI Learning Pvt. Ltd.,‎ 2004 (ISBN 9788120324022)
  3. a et b (en) Jisuk Woo,Copyright law and computer programs: the role of communication in legal structure,Routledge - 2000,(ISBN 9780815334712)
  4. a et b (en) Michael Sheetz,Computer forensics: an essential guide for accountants, lawyers, and managers,John Wiley and Sons - 2007,(ISBN 9780471789321)
  5. (en) Carl Reynolds, Paul T. Tymann,Schaum's outline of principles of computer science,McGraw-Hill Professional - 2008,(ISBN 9780071460514)
  6. a, b, c, d, e et f (en) June Jamrich Parsons, Dan Oja,New perspectives, computer concepts,p. 675, Cengage Learning - 2008,(ISBN 9781423925187)
  7. (en) Alistair Edwards,Get Set for Computer Science,Edinburgh University Press - 2006,(ISBN 9780748621675)
  8. a, b, c, d et e (en)J.B. Dixit,Computer Programming,Firewall Media - 2007,(ISBN 9788131800683)
  9. (en) Ian Sommerville,Software engineering,Pearson Education - 2007,(ISBN 9780321313799)
  10. (en) Tamara S. Eisenschitz,Patents, trade marks and designs in information work,Routledge - 1987,(ISBN 9780709909583)
  11. (en) Alan Turing, « On Computable Numbers, with an Application to the Entscheidungsproblem », Proc. London Math. Soc., 2e série, vol. 42,‎ 1937, p. 230-265 (DOI 10.1112/plms/s2-42.1.230) et « [idem] : A Correction », Proc. London Math. Soc., 2e série, vol. 43,‎ 1938, p. 544-546 (DOI 10.1112/plms/s2-43.6.544, lire en ligne)
  12. a, b, c, d et e (en)I. T. L. Education Solutions Limited, Itl,Introduction to Information Technology,Pearson Education India - 2009,(ISBN 9788177581188)
  13. (en)D.A.Godse A.P.Godse,Computer Organization,Technical Publications - 2008,(ISBN 9788184313789)
  14. a, b et c (en) D.A. Godse et A.P. Godse, Computer Architecture & Organisation, Technical Publications,‎ 2007 (ISBN 8184317719)
  15. (en) Rajat Moona,Assembly Language Programming In Gnu/Linux For Ia32 Architectures,PHI Learning Pvt. Ltd. - 2007,(ISBN 9788120331563)
  16. (en)T. Radhakrishnan,Essentials of Assembly Language Programming for the IBM PC,PHI Learning Pvt. Ltd. - 2004,(ISBN 9788120314252)
  17. (en) John C. Mitchell, Concepts in programming languages, Cambridge University Press - 2003, (ISBN 978-0-521-78098-8)
  18. Christian Piguet - Heinz Hügli, Du zéro à l'ordinateur: Une brève histoire du calcul, PPUR presses polytechniques - 2004, (ISBN 978-2-88074-469-4)
  19. (en) National Research Council (États-Unis). Committee on the Fundamentals of Computer Science: Challenges and Opportunities, Computer science: reflections on the field - reflections from the field, National Academies Press - 2004, (ISBN 978-0-309-09301-9)
  20. (en) Raj Kamal,Embedded systems: architecture, programming and design,Tata McGraw-Hill Education - 2003,(ISBN 9780070494701)
  21. a, b, c et d (en)A.p.godse,Computer Organisation,Technical Publications - 2009,(ISBN 9788184310009)
  22. (en) Nithyashri,System Software,Tata McGraw-Hill Education - 2010,(ISBN 9780070671928)
  23. (en) Sivarama P. Dandamudi,Guide to assembly language programming in Linux,Springer - 2005,(ISBN 9780387258973)
  24. a et b (en) Jon Stokes,Inside the machine: an illustrated introduction to microprocessors and computer architecture,No Starch Press - 2007,(ISBN 9781593271046)
  25. (en) Daniel Pierre Bovet et Marco Cesati,Understanding the Linux kernel ,O'Reilly Media Inc. - 2002,(ISBN 9780596002138)
  26. (en) Nell B. Dale et John Lewis,Computer science illuminated,Jones & Bartlett Learning - 2007,(ISBN 9780763741495)

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes[modifier | modifier le code]