Principes des langages de programmation
INF 321
Eric Goubault
24 mars 2014
2
Table des mati`eres
1 Introduction 7
2 Programmation imp´erative 11
2.1 Variables et types . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Codage des nombres . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Expressions arithm´etiques et instructions . . . . . . . . . . . . . 14
2.3.1 L’affectation . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.2 Le branchement conditionnel . . . . . . . . . . . . . . . . 15
2.3.3 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4 S´emantique ´el´ementaire . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.1 S´emantique des expressions . . . . . . . . . . . . . . . . . 18
2.4.2 S´emantique des instructions ´el´ementaires . . . . . . . . . 19
2.5 Lestableaux ............................. 20
2.6 S´emantique des r´ef´erences . . . . . . . . . . . . . . . . . . . . . . 21
2.7 La equence d’instructions . . . . . . . . . . . . . . . . . . . . . . 22
2.8 Conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.9 It´eration la boucle . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.10Fonctions ............................... 25
2.11 Passage d’arguments aux fonctions . . . . . . . . . . . . . . . . . 26
2.12 Variables locales, variables globales . . . . . . . . . . . . . . . . . 28
2.12.1 Passages de tableaux en param`etres . . . . . . . . . . . . 29
2.13 R´ef´erences, pointeurs, objets . . . . . . . . . . . . . . . . . . . . 31
2.14 R´ecapitulation : un peu de syntaxe . . . . . . . . . . . . . . . . . 37
3 Structures de donn´ees 41
3.1 Types produits, ou enregistrements . . . . . . . . . . . . . . . . . 41
3.2 Enregistrements et appels de fonctions . . . . . . . . . . . . . . . 43
3.3 Egalit´e physique et ´egalit´e structurelle . . . . . . . . . . . . . . . 44
3.3.1 Partage ............................ 45
3.4 Tableaux et types produits . . . . . . . . . . . . . . . . . . . . . 48
3.4.1 D´efinition et manipulation des tableaux 1D . . . . . . . . 48
3.4.2 Exemple de code en C, Java et OCaml, utilisant des ta-
bleaux1D........................... 49
3.4.3 Tableaux de dimension sup´erieure . . . . . . . . . . . . . 50
3
4TABLE DES MATI `
ERES
3.5 Typessomme............................. 51
3.6 Types de donn´ees dynamiques . . . . . . . . . . . . . . . . . . . . 54
3.6.1 Listes ............................. 54
3.6.2 Les listes lin´eaires . . . . . . . . . . . . . . . . . . . . . . 57
3.6.3 Application aux tables de hachage . . . . . . . . . . . . . 57
3.6.4 Listes et partage . . . . . . . . . . . . . . . . . . . . . . . 59
3.7 Le ramasse-miette, ou GC . . . . . . . . . . . . . . . . . . . . . . 62
4 Programmation orient´ee objet, en JAVA 65
4.1 Statique versus dynamique . . . . . . . . . . . . . . . . . . . . . 65
4.2 Types somme, revisit´es . . . . . . . . . . . . . . . . . . . . . . . . 68
4.3 H´eritage................................ 70
4.4 Exceptions .............................. 73
4.5 Interfaces ............................... 75
4.6 H´eritage et typage . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.7 Classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.8 Paquetages .............................. 77
4.9 Collections .............................. 78
4.10 Les objets en (O)Caml . . . . . . . . . . . . . . . . . . . . . . . . 78
5 ecursivit´e, calculabilit´e et complexit´e 81
5.1 La r´ecursivit´e dans les langages de programmation . . . . . . . . 81
5.2 Piledappel.............................. 82
5.2.1 R´ecursion et it´eration . . . . . . . . . . . . . . . . . . . . 82
5.2.2 D´er´ecursivation . . . . . . . . . . . . . . . . . . . . . . . . 86
5.3 R´ecurrence structurelle . . . . . . . . . . . . . . . . . . . . . . . . 87
5.4 Partage en m´emoire et r´ecursivit´e . . . . . . . . . . . . . . . . . . 89
5.5 Les fonctions ecursives primitives . . . . . . . . . . . . . . . . . 90
5.6 Fonctions r´ecursives partielles . . . . . . . . . . . . . . . . . . . . 92
5.7 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.8 Quelques ´el´ements de complexit´e . . . . . . . . . . . . . . . . . . 94
6 emantique d´enotationnelle 101
6.1 S´emantique ´el´ementaire . . . . . . . . . . . . . . . . . . . . . . . 101
6.2 Probl`emes de points fixes . . . . . . . . . . . . . . . . . . . . . . 104
6.3 S´emantique de la boucle while ................... 107
6.4 S´emantique des fonctions ecursives . . . . . . . . . . . . . . . . . 109
6.5 Continuie et calculabilit´e . . . . . . . . . . . . . . . . . . . . . . 110
7 Logique, mod`eles et preuve 113
7.1 Syntaxe ................................ 113
7.2 S´emantique .............................. 114
7.3 D´ecidabilit´e des formules logiques et probl`eme de l’arrˆet . . . . . 116
7.4 Pour aller plus loin... . . . . . . . . . . . . . . . . . . . . . . . . . 117
7.5 Un peu de th´eorie de la emonstration . . . . . . . . . . . . . . . 117
TABLE DES MATI `
ERES 5
8 Validation et preuve de programmes 125
8.1 La validation, pour quoi faire ? . . . . . . . . . . . . . . . . . . . 125
8.2 Preuve `a la Hoare . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9 Typage, et programmation fonctionnelle 133
9.1 PCF (non typ´e) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
9.2 S´emantique op´erationnelle . . . . . . . . . . . . . . . . . . . . . . 134
9.3 Ordres d’´evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.4 Appel par nom, appel par valeur et appel par n´ecessit´e . . . . . . 137
9.5 Combinateurs de point fixe . . . . . . . . . . . . . . . . . . . . . 139
9.6 Typage ................................ 141
9.7 Th´eorie de la emonstration et typage . . . . . . . . . . . . . . . 144
9.8 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10 Programmation r´eactive synchrone 149
10.1Lustre .................................149
10.2 Cadencement et «calcul d’horloges »................153
10.3 Pour aller plus loin... . . . . . . . . . . . . . . . . . . . . . . . . . 154
10.4 R´eseaux de Kahn et emantique de Lustre . . . . . . . . . . . . . 155
1 / 159 100%