Introduction Depuis que vous utilisez un ordinateur, vous avez très certainement entendu parler de cette activité mystérieuse qui se nomme “programmer”, exercée par ces êtres étranges appelés “programmeurs”. Tout ce que vous voyez sur votre écran est l’expression de programmes. Nous vous proposons, dans cet ouvrage, de passer de l’autre côté de l’écran, de découvrir la programmation. Un ordinateur est un outil, comme un tournevis. Mais un tournevis est fabriqué pour exécuter une tâche précise et unique. Au contraire, un ordinateur est conçu pour être fortement modulable et adaptable à pratiquement tous les contextes possibles. Pour cela, il a la capacité d’exécuter un certain nombre d’ordres, plus communément appelés instructions, chacune correspondant à une tâche simple et élémentaire. Programmer consiste à définir une succession ordonnée d’instructions élémentaires devant être exécutées par la machine, pour obtenir l’accomplissement d’une tâche complexe. Un aspect essentiel de la programmation est donc la mise en pratique de la méthode cartésienne : décomposer un problème complexe en sous-problèmes simples. Mais peut-être vous demandez-vous : “Pourquoi programmer ?” Simplement par jeu ! Écrire un programme et le voir s’exécuter, chercher pourquoi il ne fait pas ce que vous attendiez est une activité ludique en soi. Plus sérieusement, aussi bien en milieu professionnel que familial, on éprouve fréquemment le besoin d’automatiser certaines choses répétitives et laborieuses, d’obtenir certains résultats, de traiter certaines données pour lesquelles on ne dispose pas de logiciel tout prêt – ou alors ceux qui existent sont mal adaptés ou trop onéreux à acquérir. Dans ce genre de situations, avoir la capacité d’écrire un petit programme peut faire gagner beaucoup de temps et de précision, et limiter les efforts. Voici un autre aspect important de la programmation : elle est bien souvent la meilleure réponse à la paresse ! © 2011 Pearson France – Initiation à la programmation avec Python et C++ – Yves Bailly Book_Prog_initia.indb 1 03/02/11 15:52 2 Initiation à la programmation avec Python et C++ Un peu d’histoire Les premiers ordinateurs étaient programmés à l’aide de cartes perforées, les instructions étant données sous la forme de longues suites de 0 et de 1 qu’il fallait entrer manuellement. Les programmeurs devaient se confronter directement au langage machine, c’est-à-dire au langage brut que comprend la machine – qui n’a rien d’humain. Au milieu des années 1950 apparurent les premiers langages de programmation, dont l’objectif primordial était de détacher le programmeur du langage machine. Dès lors, les programmes sont écrits dans un dialecte relativement compréhensible respectant une syntaxe et une grammaire strictes et précises. Comme ces langages furent développés par nos amis anglo-saxons, on pourrait les qualifier de langue anglaise très simplifiée. Tandis que le langage machine est, par nature, très lié à l’électronique de l’ordinateur, le développement des langages de programmation a ouvert la voie de l’abstraction, principe fondamental qui cherche à éloigner autant que possible le programmeur des contingences matérielles pour le rapprocher des concepts, de la “chose” concrète ou abstraite qu’il doit traiter. Lorsqu’on veut modéliser informatiquement un moteur de voiture ou la courbe subtile d’une fonction mathématique, autant ne pas trop s’encombrer l’esprit avec l’état moléculaire des transistors du microprocesseur… C’est ainsi qu’au fil du temps différents paradigmes (ensembles de règles et de principes de conception) de programmation se sont développés. Programmation structurée, fonctionnelle, orientée objet… À chaque évolution, l’objectif est toujours le même : permettre la meilleure représentation informatique possible, la plus intuitive possible, de l’idée sur laquelle opère le programme. On peut esquisser une sorte d’arbre généalogique des langages de programmation. En donner une liste exhaustive est pratiquement impossible : des milliers sont – ou ont été – utilisés. La Figure I en présente tout de même quelques-uns, les flèches indiquant les sources d’inspiration utilisées pour un langage donné. Figure I Généalogie simplifiée de quelques langages de programmation. 1960 1954 1970 1980 1990 2000 Fortran Ada Pascal Modula Algol Python C Ruby C++ Simula C# Eiffel Lisp Smalltalk Java Perl Basic VisualBasic VB.NET Cobol Il ne s’agit là que d’une vue vraiment très simplifiée, presque caricaturale. Mais vous pouvez constater que les langages s’inspirent fortement les uns des autres. Par ailleurs, la plupart de ceux présentés sur ce schéma sont toujours utilisés et continuent d’évoluer – c’est, par exemple, le cas du vénérable ancêtre Fortran, notamment dans les applications très gourmandes en calculs scientifiques. © 2011 Pearson France – Initiation à la programmation avec Python et C++ – Yves Bailly Book_Prog_initia.indb 2 03/02/11 15:52 Introduction 3 Le choix des langages Il en va de la programmation comme de bien d’autres disciplines : c’est en forgeant que l’on devient forgeron. Cette initiation s’appuiera donc sur deux langages de programmation appartenant à deux grandes familles différentes : celle des langages interprétés et celle des langages compilés. Python C++ Le langage Python a été conçu en 1991, principalement par le Néerlandais Guido Van Rossum, comme successeur du langage ABC, langage interactif luimême destiné à remplacer le langage Basic. Le langage C++ a été conçu en 1983 par Bjarne Stroustrup comme une extension du langage C, langage proche de l’électronique et encore très largement utilisé, pour lui apporter les principes de la POO (programmation orientée objet). Le langage Python est un langage orienté objet interprété. Les programmes écrits dans un langage interprété ne sont pas directement exécutés par l’ordinateur, mais plutôt par un interpréteur. Grossièrement, l’inter­préteur lit les instructions du programme et les transforme en instructions destinées à la machine. L’interpréteur est donc toujours nécessaire pour exécuter un programme en langage interprété. Il figure aujourd’hui en bonne place dans de nombreux domaines, de l’analyse scientifique à la programmation de jeux en passant par la réalisation rapide de petits outils spécialisés ou de sites web dynamiques. Le langage C++ est un langage orienté objet compilé. Les programmes écrits dans un langage compilé doivent subir une phase intermédiaire, la compilation, à l’issue de laquelle on obtient un fichier directement exécutable par la machine. La compilation est effectuée par un compilateur, qui n’est alors plus nécessaire dès que le fichier exécutable a été produit. Le C++ est aujourd’hui l’un des langages les plus utilisés dans le monde, dans toutes sortes de contextes, notamment ceux où la rapidité d’exécution est primordiale. Bien qu’appartenant à deux familles différentes, ces deux langages partagent un point commun essentiel : ce sont des langages objet, c’est-à-dire des langages utilisant les techniques de la programmation orientée objet. Nous verrons plus loin ce que ce terme sibyllin représente. Pour l’heure, disons simplement qu’il s’agit, de très loin, du paradigme de programmation le plus répandu dans le monde. Et maintenant… Que les impatients se rassurent, nous allons très bientôt passer à la pratique. Une première partie présentera quelques-uns des concepts fondamentaux de la programmation au moyen de nombreux exemples, à partir desquels nous construirons progressivement un véritable programme permettant de jouer au problème des Tours de Hanoï (aussi appelé problème des Tours de Brahma). Cela après avoir installé sur votre ordinateur les logiciels nécessaires, essentiellement l’interpréteur Python et le compilateur C++. Une deuxième partie nous emmènera plus loin dans l’exploration des techniques permettant la réalisation d’un logiciel, notamment en décrivant ce qu’est exactement cette mystérieuse programmation objet. Nous aboutirons alors à un programme presque complet, disposant d’une interface graphique attrayante (du moins, espérons-le !). © 2011 Pearson France – Initiation à la programmation avec Python et C++ – Yves Bailly Book_Prog_initia.indb 3 03/02/11 15:52 4 Initiation à la programmation avec Python et C++ Enfin, cet ouvrage se terminera par quelques pistes destinées à vous ouvrir de larges horizons, de l’affichage en trois dimensions aux outils sophistiqués dédiés à la programmation, sans oublier une petite présentation d’autres langages courants. Nous n’aurons pas la prétention de vous faire devenir en quelques pages un ingénieur en développement logiciel : c’est un métier à part entière qui nécessite des années d’études et d’expériences. Ce livre n’est en aucun cas un manuel pour apprendre les langages Python ou C++ : ceux-ci ne sont utilisés que comme support des concepts généraux de la programmation, tels qu’ils se retrouvent dans la plupart des langages de programmation. Les approches qui seront proposées ici ne seront pas toujours les plus efficaces en termes de performances, mais nous recherchons avant tout la compréhension et l’acquisition des concepts. À l’issue de cette lecture, vous serez en mesure de créer vos programmes pour vos propres besoins et d’aller chercher les informations qui vous manqueront inévitablement. Ce sera alors pleinement à vous de jouer. © 2011 Pearson France – Initiation à la programmation avec Python et C++ – Yves Bailly Book_Prog_initia.indb 4 03/02/11 15:52