S'initier à la programmation et à l'orienté objet
Avec des exemples en C, C++, C#, Java, Python et PHP
Claude Delannoy
Eyrolles
Chapitre 1 : Ordinateur, programme et langage1
1 - Le rôle de l'ordinateur
1
1.1 La multiplicité des applications1
1.2 Le programme : source de diversité2
1.3 Les données du programme, les résultats2
1.4 Communication ou archivage3
2 - Pour donner une forme à l'information : le codage
3
2.1 L'ordinateur code l'information3
2.2 L'homme code l'information4
2.3 Ce qui différencie l'homme de l'ordinateur4
3 - Fonctionnement de l'ordinateur
5
3.1 À chacun son rôle5
3.2 La mémoire centrale6
3.3 L'unité centrale7
3.4 Les périphériques7
3.4.1 Les périphériques de communication
7
3.4.2 Les périphériques d'archivage
7
4 - Le langage de l'ordinateur
8
4.1 Langage machine ou langage de notre cru8
4.2 En langage assembleur9
4.3 En langage évolué9
5 - Les concepts de base des langages évolués
11
6 - La programmation
12
7 - Notion de système d'exploitation et d'environnement de programmation
13
Chapitre 2 : Variables et instruction d'affectation15
1 - La variable
15
1.1 Introduction15
1.2 Choix des noms des variables16
1.3 Attention aux habitudes de l'algèbre16
2 - Type d'une variable
17
2.1 La notion de type est une conséquence du codage en binaire17
2.2 Contraintes imposées par le type17
2.3 Les types que nous utiliserons18
2.4 Déclaration de type18
3 - L'instruction d'affectation
19
3.1 Introduction19
3.2 Notation19
3.3 Rôle20
3.4 Quelques précautions21
3.5 Échanger les valeurs de deux variables22
4 - Les expressions
23
4.1 Expressions de type entier24
4.1.1 Constantes de type entier
24
4.1.2 Expressions de type entier
24
4.1.3 Les erreurs possibles
25
4.2 Expressions de type réel26
4.2.1 Constantes réelles
26
4.2.2 Les expressions réelles
27
4.2.3 Les erreurs possibles
27
4.3 Expressions mixtes28
4.4 Expressions de type caractère30
4.5 Affectation et conversions30
5 - Les variables non définies
31
6 - Initialisation de variables et constantes
32
6.1 Initialisation de variables32
6.2 Constantes32
6.3 Expressions constantes33
7 - Les fonctions prédéfinies
33
Noms de variables34
Types de base et codage34
Déclaration de types35
Instruction d'affectation35
Opérateurs et expressions36
Chapitre 3 : Instructions d'écriture et de lecture39
1 - L'instruction d'écriture
39
1.1 Rôle39
1.2 Présentation des résultats40
1.2.1 Rien ne les identifie
40
1.2.2 Comment seront-ils présentés ?
41
1.2.3 Affichage de libellés
41
1.2.4 Cas des valeurs réelles
42
2 - L'instruction de lecture
43
2.1 Rôle43
2.2 Intérêt de l'instruction de lecture44
2.3 Présentation des données45
2.4 Exemple45
3 - Autres modes de communication avec l'utilisateur
46
3.1 Mode console ou programmation par événements46
3.2 Mode batch47
3.3 Programmation Internet47
Exemples langages
48
C48
C++49
C#49
Java50
Python50
PHP50
Chapitre 4 : La structure de choix53
1 - Présentation de l'instruction de choix
54
1.1 Exemple introductif54
1.2 Notion de bloc d'instructions54
1.3 Un programme complet56
2 - La condition du choix
56
2.1 Les conditions simples56
2.2 Les conditions complexes58
2.2.1 Présentation
58
2.2.2 Exemple
59
3 - Cas particulier : une partie du choix absente
60
4 - Les choix imbriqués
61
4.1 Exemple61
4.2 En cas d'ambiguïté62
4.3 Choix imbriqués ou succession de choix63
5 - Un nouveau type de base : booléen
65
6 - Nos conventions d'écriture
66
Côté langages
66
Instruction de choix66
Type booléen67
Instruction de choix multiple67
Exemples langages
68
C68
C++69
Java69
C#70
PHP70
Python71
Chapitre 5 : Les structures de répétition73
1 - La répétition jusqu'à
73
1.1 Exemple introductif73
1.2 Nos conventions d'écriture75
1.3 Exemples76
1.3.1 Recherche de la première voyelle d'un mot
76
1.3.2 Doublement de capital
76
1.4 Faire des choix dans une boucle78
2 - La répétition tant que
78
2.1 Exemple introductif79
2.2 Conventions d'écriture79
2.3 Lien entre répétition tant que et répétition jusqu'à80
2.4 Exemple81
3 - Comment réaliser des répétitions inconditionnelles
82
3.1 La notion de compteur de boucle82
3.2 Introduire un compteur dans une répétition83
3.2.1 Exemple 1
83
3.2.2 Exemple 2
84
3.3 Imposer un nombre de tours85
3.3.1 Exemple 1
86
3.3.2 Exemple 2
86
3.3.3 Exemple 3
87
4 - La répétition inconditionnelle
88
4.1. Exemples d'introduction88
4.1.1 Exemple 1
88
4.1.2 Exemple 2
89
4.2 Conventions d'écriture90
4.3 Utiliser le compteur dans une répétition inconditionnelle91
4.4 Éviter d'agir sur le compteur dans la boucle91
4.5 Compteur et boucle pour92
4.6 Un tour pour rien93
4.7 Le compteur en dehors de la boucle94
Côté langages
94
Les répétitions tant que et jusqu'à94
La répétition pour95
Exemples langages
96
C96
C++96
C#97
Python98
PHP98
Chapitre 6 : Quelques techniques usuelles101
1 - Le comptage d'une manière générale
101
1.1 Compter le nombre de lettres e d'un texte102
1.2 Compter le pourcentage de lettres e d'un texte102
2 - L'accumulation
104
2.1 Accumulation systématique104
2.1.1 Un premier exemple
104
2.1.2 Un second exemple
105
2.2 Accumulation sélective106
3 - Recherche de maximum
107
4 - Imbrication de répétitions
108
4.1 Exemple de boucle avec compteur dans une boucle conditionnelle108
4.2 Exemple de boucle conditionnelle dans une boucle avec compteur109
4.3 Exemple de boucle inconditionnelle dans une autre boucle inconditionnelle110
4.3.1 Premier exemple
110
4.3.2 Second exemple
110
4.4 Une erreur à ne pas commettre112
5 - L'itération
113
Chapitre 7 : Les tableaux115
1 - Notion de tableau à une dimension
116
1.1 Quand la notion de variable ne suffit plus116
1.2 La solution : le tableau116
1 - Utilisation d'un tableau à une dimension
117
2.1 Déclaration117
2.2 Manipulation des éléments d'un tableau118
2.3 Affectation de valeurs à des éléments d'un tableau118
2.4 Lecture des éléments d'un tableau119
2.5 Écriture des éléments d'un tableau120
2.6 Utilisation de variables indicées dans des expressions120
2.7 Initialisation d'un tableau à une dimension122
3 - Quelques techniques classiques appliquées aux tableaux à une dimension
122
3.1 Somme et maximum des éléments d'un tableau122
3.2 Test de présence d'une valeur dans un tableau123
4 - Exemple d'utilisation d'un tableau
124
5 - Tri d'un tableau à une dimension
125
6 - Contraintes sur la dimension d'un tableau
126
7 - Débordement d'indice d'un tableau à une dimension
127
8 - Introduction aux tableaux à deux dimensions
128
9 - Utilisation d'un tableau à deux dimensions
130
9.1 Déclaration130
9.2 Affectation de valeurs130
9.3 Lecture des éléments131
9.4 Écriture des élements132
10 - Quelques techniques classiques appliquées aux tableaux à deux dimensions
134
11 - Gestion de l'emplacement mémoire d'un tableau
134
12 - Notion de tableau associatif
135
Côté langages
136
C/C++136
Java, C#137
PHP138
Python138
Exemples langages
139
C++139
C140
C#141
Java142
Python143
PHP144
Chapitre 8 : Les fonctions145
1 - Notion de fonction
146
1.1 Premier exemple146
1.2 Notion de paramètre147
1.3 Paramètres formels ou effectifs149
1.4 Notion de variable locale149
1.5 Notion de résultat150
1.6 Exemple de fonctions à plusieurs paramètres152
1.7 Indépendance entre fonction et programme153
2 - Mode de transmission des paramètres
155
2.1 Introduction155
2.2 Conséquences de la transmission par valeur156
2.3 La transmission par référence156
2.4 Nature des paramètres effectifs158
2.5 Un autre exemple de transmission par référence158
3 - Tableaux en paramètres
159
3.1 Cas des tableaux de taille déterminée159
3.2 Cas des tableaux de taille indéterminée160
3.3 Exemple161
4 - Les fonctions en général
162
4.1 Propriétés des variables locales162
4.1.1 Les variables locales ne sont pas rémanentes
162
4.1.2 Initialisation des variables locales
163
4.1.3 Tableaux locaux
164
4.1.4 Imposer à une variable locale d'être rémanente
164
4.2 Propriétés du résultat165
4.3 Appels imbriqués166
4.4 Variables globales167
4.5 Concordance de type167
4.6 Surdéfinition des fonctions168
5 - Gestion de la mémoire des variables locales : notion de pile
168
6 - Programme principal et fonctions
169
7 - La récursivité
170
8 - Bibliothèques de fonctions
172
9 - Une autre présentation de la notion de fonction
173
Côté langages
174
Structure d'une fonction174
Mode de transmission des paramètres175
Programme principal175
Séparation entre fonction et programme176
Résultat177
Variables globales177
Exemples langages
177
Fonction somme des éléments d'un tableau177
Fonction est Voyelle180
Fonction tri d'un tableau avec fonction échange182
Chapitre 9 : Classes et objets185
1 - Introduction
185
2 - Un premier exemple : une classe Point
186
2.1 Utilisation de notre classe Point187
2.1.1 Le mécanisme déclaration, instanciation
187
2.1.2 Utilisation d'objets de type Point
188
2.2 Définition de la classe Point189
2.3 En définitive190
2.4 Indépendance entre classe et programme190
3 - L'encapsulation et ses conséquences
191
3.1 Méthodes d'accès et d'altération191
3.2 Notions d'interface, de contrat et d'implémentation192
3.3 Dérogations au principe d'encapsulation193
4 - Méthode appelant une autre méthode
194
5 - Les constructeurs
194
5.1 Introduction194
5.2 Exemple d'adaptation de notre classe Point195
5.3 Surdéfinition du constructeur197
5.4 Appel automatique du constructeur197
5.5 Exemple : une classe Carré198
6 - Mode des gestions des objets
201
Côté langages
202
Définition d'une classe202
Utilisation d'une classe203
Exemples langages
203
Java204
C#205
PHP205
Python206
C++207
Chapitre 10 : Propriétés des objets et des méthodes211
1 - Affectation et comparaison d'objets
211
1.1 Premier exemple211
1.2 Second exemple213
1.3 Comparaison d'objets214
1.4 Cas des langages gérant les objets par valeur214
2 - Les objets locaux et leur durée de vie
215
3 - Cas des objets transmis en paramètre
216
3.1 Mode de transmission d'un objet en paramètre217
3.2 L'unité d'encapsulation est la classe218
3.3 Exemple220
4 - Objet en résultat
222
5 - Attributs et méthodes de classe
223
5.1 Attributs de classe223
5.1.1 Présentation
223
5.1.2 Exemple
225
5.2 Méthodes de classe225
5.2.1 Généralités
225
5.2.2 Exemple
226
5.2.3 Autres utilisations des attributs et des méthodes de classe
227
6 - Tableaux d'objets
227
7 - Autoréférence
229
7.1 Généralités229
7.2 Exemples d'utilisation de courant229
8 - Classes standards et classe Chaîne
230
Côté langages
231
Affectation, transmission en paramètre et en résultat231
Méthodes et attributs de classe231
Autoréférence232
Exemples langages
232
C#232
Java233
C++234
PHP236
Python237
Chapitre 11 : Composition des objets239
1 - Premier exemple : une classe Cercle
239
1.1 Droits d'accès240
1.1.1 Comment doter Cercle d'une méthode affiche
240
1.1.2 Doter Cercle d'une méthode déplace
241
1.2 Relations établies à la construction241
1.2.1 Coordonnées en paramètres
242
1.2.2 Objet de type point en paramètre
243
1.3 Cas de la gestion par valeur243
2 - Deuxième exemple : une classe Segment
245
3 - Relations entre objets
248
4 - Copie profonde ou superficielle des objets
249
5 - Une classe « singleton »
250
Côté langages
252
Java, C#, Python et PHP252
C++252
Exemples langages
253
Java253
C++254
PHP255
Python256
Chapitre 12 : L'héritage259
1 - La notion d'héritage
260
2 - Droits d'accès d'une classe dérivée à sa classe de base
262
2.1 Une classe dérivée n'accède pas aux membres privés de la classe de base262
2.2 Une classe dérivée accède aux membres publics263
2.3 Exemple de programme complet264
3 - Héritage et constructeur
266
4 - Comparaison entre héritage et composition
268
5 - Dérivations successives
270
6 - Redéfinition de méthodes
271
6.1 Introduction271
6.2 La notion de redéfinition de méthode271
6.3 La redéfinition d'une manière générale273
6.4 Redéfinition de méthode et dérivations successives274
7 - Héritage et droits d'accès
275
Côté langages
276
Syntaxe de la dérivation et droits d'accès276
Gestion des constructeurs277
Redéfinition de méthodes277
Exemples langages
278
Java278
C#278
C++279
PHP280
Python281
Chapitre 13 : Le polymorphisme283
1 - Les bases du polymorphisme
283
1.1 Compatibilité par affectation284
1.2 La ligature dynamique285
1.3 En résumé285
1.4 Cas de la gestion par valeur286
1.5 Exemple 1286
1.6 Exemple 2287
2 - Généralisation à plusieurs classes
288
3 - Autre situation où l'on exploite le polymorphisme
289
4 - Limites de l'héritage et du polymorphisme
292
4.1 Les limitations du polymorphisme292
4.2 Valeurs de retour covariantes293
Côté langages
295
Java, PHP et Python295
C#295
C++295
Exemples langages
296
Java296
C#297
PHP298
C++299
Python300
Chapitre 14 : Classes abstraites, interfaces et héritage multiple303
1 - Classes abstraites et méthodes retardées
303
1.1 Les classes abstraites303
1.2 Méthodes retardées (ou abstraites)304
1.3 Intérêt des classes abstraites et des méthodes retardées305
1.4 Exemple306
2 - Les interfaces
307
2.1 Définition d'une interface308
2.2 Implémentation d'une interface308
2.3 Variables de type interface et polymorphisme309
2.4 Exemple complet310
2.5 Interface et classe dérivée311
3 - L'héritage multiple
311
Côté langages
312
Classes abstraites et méthodes retardées312
Interfaces313
Exemples langages
313
Classes et méthodes abstraites313
Interfaces317
Annexe : Correction des exercices321
Chapitre 2321
Chapitre 3324
Chapitre 4326
Chapitre 5328
Chapitre 6332
Chapitre 7335
Chapitre 8339
Chapitre 9342
Chapitre 10347
Chapitre 11349
Chapitre 12353
Index357