Méthodologie de la programmation Pablo Rauzy pablo rauzy @ univ-paris8 fr pablo.rauzy.name/teaching/mdlp UFR MITSIC / L1 informatique Séance 0 Présentation du cours Introduction à la programmation (impérative) Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 1 / 28
Présentation du cours Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 2 / 28
L informatique Qu est ce que l informatique? un outil, une technologie, une science. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 3 / 28
L informatique Qu est ce que l informatique? un outil, une technologie, une science. La programmation est au cœur de ces trois aspects. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 3 / 28
La programmation La programmation est l activité centrale du développement de logiciel. Elle consiste à écrire le code source d un programme. Ce code source est ensuite interprété ou compilé pour obtenir du code exécutable. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 4 / 28
La programmation Aperçu historique 1842 Premier programme au monde. Ada Lovelace Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. Cartes perforées Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. Machine analytique Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. Charles Babbage Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. 1936 Turing publie On Computable Numbers with an Application to the Entscheidungsproblem. Alan Turing Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. 1936 Turing publie On Computable Numbers with an Application to the Entscheidungsproblem. 1952 Premier compilateur (A-0). Grace Hopper Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. 1936 Turing publie On Computable Numbers with an Application to the Entscheidungsproblem. 1952 Premier compilateur (A-0). 1950s Premiers langages haut niveau (Fortran, Lisp). John Backus Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. 1936 Turing publie On Computable Numbers with an Application to the Entscheidungsproblem. 1952 Premier compilateur (A-0). 1950s Premiers langages haut niveau (Fortran, Lisp). John McCarthy Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. 1936 Turing publie On Computable Numbers with an Application to the Entscheidungsproblem. 1952 Premier compilateur (A-0). 1950s Premiers langages haut niveau (Fortran, Lisp). 1964 BASIC. John Kemeny Thomas Kurtz Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
La programmation Aperçu historique 1842 Premier programme au monde. 1936 Turing publie On Computable Numbers with an Application to the Entscheidungsproblem. 1952 Premier compilateur (A-0). 1950s Premiers langages haut niveau (Fortran, Lisp). 1964 BASIC. 1972 C. Denis Ritchie Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 5 / 28
Ce cours Objectifs : Apprendre à (apprendre à) programmer. Connaître les outils utiles pour programmer. Voir un peu de théorie de la programmation. Acquérir un socle solide de culture générale sur la programmation. Avoir les moyens de suivre le plus efficacement possible vos études d informatique. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 6 / 28
Ce cours Langages et paradigmes de programmation Aborder plusieurs langages et différents paradigmes de programmation. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 7 / 28
Ce cours Langages et paradigmes de programmation Aborder plusieurs langages et différents paradigmes de programmation. Paradigmes de programmation : concurrente, déclarative, fonctionnelle, impérative, logique, objet, par contrainte, synchrone, événementielle,... Langages de programmation : Assembleur, Bash, C, C++, CSS, Erlang, HTML, Java, LaTeX, Lustre, OCaml, PHP, Prolog, Python, Racket, SQL,... Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 7 / 28
Ce cours Outils Utiliser différents outils utiles à la programmation : compilateurs, moteurs de production, gestionnaires de contrôle de version, débugueurs, profileurs, documentations. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 8 / 28
Ce cours Théorie Voir quelques notions théoriques qui fondent la programmation : logique booléenne, théorie des ensembles, machine de Turing, lambda calcul, calculabilité, complexité. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 9 / 28
Ce cours Organisation Le cours est organisés en 5 cycles : 1. Principaux paradigmes de programmation. 2. Outils pour la programmation. 3. Théorie pour la programmation. 4. Compilation et outils de développement. 5. Ouvertures. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 10 / 28
Ce cours Évaluation L évaluation de ce cours prendra en compte : un projet, les TPs, un examen. À chaque fois, la propreté du code, sa présentation, et son organisation seront prisent en compte. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 11 / 28
Ce cours / Évaluation Ce qui est attendu de vous Correctement écrire du code : indentation propre, nommage cohérent, organisation modulaire des fichiers. Savoir gérer un projet seul ou à plusieurs : utiliser git pour gérer les versions du code source et la collaboration, utiliser Make pour gérer la compilation modulaire. Savoir utiliser les bons outils : connaître les forces et faiblesses de différents langages et paradigmes de programmation, savoir chercher efficacement dans une documentation, utiliser un débugueur (gdb) et un profileur (valgrind). Savoir communiquer sur vos projets : utiliser LATEX pour écrire des rapports. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 12 / 28
Introduction à la programmation (impérative) Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 13 / 28
Programmes Un programme est un ensemble d opérations exécutables par un ordinateur. Quand on parle de programme, il peut s agir de son code source ou d un binaire. Le code source d un programme peut être interprété ou compilé. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 14 / 28
Programmes Interprétation L interprétation d un programme source est réalisée par un autre programme, qu on appelle un interpréteur. Pour chaque opération décrite dans le code source, l interpréteur : lit et analyse l opération, l évalue ou l exécute. + cycle de développement plus rapide, débuguage plus simple optimisation, vitesse d exécution du programme Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 15 / 28
Programmes Compilation La compilation d un programme source est réalisée par un autre programme, qu on appelle un compilateur. Le compilateur traduit le programme une fois pour toutes vers un autre langage. Généralement, vers un langage plus proche de l ordinateur, pour que le code puisse être exécuté directement par le matériel. + optimisation, vitesse d exécution du programme cycle de développement plus lent, débuguage plus complexe Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 16 / 28
Programmes Compilation La compilation d un programme source est réalisée par un autre programme, qu on appelle un compilateur. Le compilateur traduit le programme une fois pour toutes vers un autre langage. Généralement, vers un langage plus proche de l ordinateur, pour que le code puisse être exécuté directement par le matériel. + optimisation, vitesse d exécution du programme cycle de développement plus lent, débuguage plus complexe Il existe des techniques intermédiaires (bytecode, JIT) qui tentent des compromis. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 16 / 28
Code source Les codes sources sont écrits dans divers langages de programmation. Nous allons commencer par étudier des concepts génériques des langages impératifs. Pour cela on va utiliser du pseudo-code. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 17 / 28
Code source Instructions Dans un langage impératif, un programme est composé d instructions. Dans notre pseudo-code, les instructions terminent pas un ;. Une instruction correspond à une commande, telle que : la déclaration d une variable, l affectation de la valeur d une expression à une variable, le test conditionnel, l itération. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 18 / 28
Code source Variables Une variable dans un programme a le même rôle qu une variable en mathématique : elle symbolise (nomme) une valeur qui peut changer au cours du temps. Une variable a un nom est un type. Le type défini les valeurs possibles : un nombre, une chaîne de caractères, un booléen... Dans certains langages le type est attaché à la variable et ne peut pas changer, on parle alors de langages statiquement typés. Dans d autres, le type est seulement attaché aux valeurs et donc le type d une variable peut changer, on parle alors de langages dynamiquement typés. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 19 / 28
Code source Déclarations On déclare une variable en donnant son type : chaine nom ; entier age ; bool majeur ; reel taille ; Optionnellement on peut lui affecter une valeur directement : chaine eleve_nom "Sonia" ; entier eleve_age 20 ; bool eleve_majeur vrai ; reel eleve_taille 1.70 ;! Attention, dans certains langages, se note =, mais n a généralement rien à voir avec celui des mathématiques! Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 20 / 28
Code source Expressions Une expression est une combinaison d éléments du langage qui retourne une valeur quand elle est évaluée : 2 + 3 age > 20 taille * 100 prenom + " " + nom Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 21 / 28
Code source Affectations Une affectation sert à modifier la valeur d une variable. On l écrit var expr. L expression expr est évaluée avant d être affectée à la variable var : a 2 + 3 ; nom_complet prenom + " " + nom ; taille_en_cm taille * 100 ; a a + 1 ; majeur age >= 18 ; Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 22 / 28
Code source Tableaux Pour stocker plusieurs variables liées du même type, on peut utiliser un tableau. Par exemple si on veut stocker les informations de 10 personnes différentes on peut déclarer les tableaux suivants : chaine noms[10] ; entier ages[10] ; reel tailles[10] ; Pour accéder à une cellule d un tableau, avec son indice entre crochets : noms[0] est le nom de la première personne, ages[0] son âge, tailles[0] sa taille. noms[9] est le nom de la dernière personne, ages[9] son âge, tailles[9] sa taille. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 23 / 28
Code source Conditions Un programme doit pouvoir faire des choix dynamiquement, lors de son exécution. On utilise pour cela des tests conditionnels. Ils permettent de n exécuter un bloc (sous partie) du programme que si une expression booléenne est vraie : si ((saison = "été" et temperature < 15) ou temperature < 10) alors { afficher("il fait froid") ; } si (age >= 18) alors { afficher("majeur") ; } sinon { afficher("mineur") ; } Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 24 / 28
Code source Boucles Un programme doit pouvoir répéter certaines opérations plusieurs fois. On utilise pour cela des boucles. Elles permettent de d exécuter un bloc du programme que tant qu une expression booléenne est vraie : entier n 0 ; tant que (n < 10) { afficher_entier(n) ; n n + 1 ; } Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 25 / 28
Code source Fonctions Une fonction est un sous-programme. Elles permettent de réutiliser plusieurs fois le même code à différents endroits. Une fonction reçoit un ou des arguments (ou paramètres) et renvoie un résultat. entier calculer_age (entier annee_naissance) { entier age ; age annee - annee_naissance ; renvoyer age ; }! Attention, la notion de fonction en programmation n est généralement pas équivalente à celle des mathématiques. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 26 / 28
Code source Structures de données Pour mieux organiser les programmes, on utilise des structures de données. Une structure de données est un type qui regroupe plusieurs variables : struct Personne { chaine nom ; chaine prenom ; entier age ; reel taille ; } On déclare une variable instance de cette structure comme avec un type de base : struct Personne eleve ; struct Personne eleves[30] ; On accède aux valeurs des champs (ou membres) d une instance de la structure avec un. : eleve.nom eleves[17].age eleves[21].taille 1.75 ; Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 27 / 28
TD 1. Écrire une fonction qui prend en argument une structure Personne et qui présente la personne en donnant son nom complet et son âge. 2. Écrire une fonction qui prend un entier en argument et calcule sa factorielle. 3. Écrire une fonction qui prend un entier en argument, choisi un nombre aléatoire entre 0 et cet argument, et le fait deviner à l utilisateur en lui donnant un indice après chaque réponse. 4. Écrire un programme qui compte de 0 à 100, mais remplace les nombres divisibles par 3 par Fizz, ceux divisibles par 5 par Buzz, et ceux qui le sont pas 3 et par 5 par Fizz Buzz. Vous disposez des fonctions suivantes : entier hasard(entier min, entier max) renvoie un nombre entre min et max, entier lire_entier() renvoie l entier qui a été saisi au clavier par l utilisateur, rien afficher(chaine msg) affiche le message msg à l utilisateur, rien afficher_entier(entier n) affiche l entier n à l utilisateur. Ces opérateurs binaires sur les entiers peuvent vous être utiles : a!= b renvoie vrai si a b, faux sinon, a % b renvoie le modulo (le reste de la division) de a par b. Autres informations (peut-être) utiles : Dans une chaîne, \n est affiché comme un retour à la ligne. Pablo Rauzy (Paris 8 / LIASD) Méthodologie de la programmation Séance 0 28 / 28