delprog 2008

10/06/08

13:57

Page 1

Acquérir rapidement une parfaite maîtrise des techniques de programmation
et savoir...
S’initier à la

programmation
Avec des exemples en
C, C++, C#, Java et PHP
CHEZ LE MÊME ÉDITEUR
Du même auteur
C. Delannoy. – Programmer en Java. Java 5 et 6.
N°12232, 5e édition, 2007, 800 pages +...
Claude Delannoy

S’initier à la

programmation
Avec des exemples en
C, C++, C#, Java et PHP
ÉDITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com

Le code de la propriété intellectue...
Avant-propos
Objectif de l’ouvrage
Ce livre se propose de vous apprendre à programmer en exprimant les concepts
fondamenta...
VI

S’initier à la programmation

du pseudo-code dans un véritable langage. Notez que le langage C n’étant pas orienté obj...
Avant-propos

Le chapitre 5 aborde tout d’abord les structures de répétition conditionnelle. Il présente la
notion de comp...
VIII

S’initier à la programmation

successives et décrit succinctement les possibilités de modification des droits d’accè...
Avant-propos

– mode de traduction : compilation (C, C++), interprétation (PHP) ou traduction dans un
langage intermédiair...
Table des matières

Chapitre 1 : Ordinateur, programme et langage . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1...
XII

Table des matières

Chapitre 2 : Variables et instruction d’affectation . . . . . . . . . . . . . . . . . . . . . . ....
Table des matières

XIII

Chapitre 3 : Instructions d’écriture et de lecture . . . . . . . . . . . . . . . . . . . . . . ....
XIV

Table des matières

Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
Table des matières

Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
XVI

Table des matières

4 - Exemple d’utilisation d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
Table des matières

XVII

3.2 Cas des tableaux de taille indéterminée . . . . . . . . . . . . . . . . . . . . . . . . . . ...
XVIII

Table des matières

4 - Méthode appelant une autre méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
Table des matières

XIX

Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
XX

Table des matières

6.3 La redéfinition d’une manière générale . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
Table des matières

XXI

2 - Les interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
1
Ordinateur, programme
et langage
Ce chapitre expose tout d’abord les notions de programme et de traitement de l’informat...
2

Ordinateur, programme et langage
CHAPITRE 1

• bureautique : traitement de texte, tableur, gestion de bases de données....
Pour donner une forme à l’information : le codage

1.4 Communication ou archivage
D’où proviennent les données ? Que devie...
4

Ordinateur, programme et langage
CHAPITRE 1

Quand vous transmettez une information à l’ordinateur, par exemple en tapa...
Fonctionnement de l’ordinateur

soient des lettres de l’alphabet !). Dans ce cas, vous avez utilisé votre expérience, votr...
6

Ordinateur, programme et langage
CHAPITRE 1

– Celles qui agissent sur des informations situées en mémoire centrale ; c...
Fonctionnement de l’ordinateur

Remarque
À la place du terme mémoire centrale, on emploie également souvent celui de mémoi...
8

Ordinateur, programme et langage
CHAPITRE 1

Les périphériques d’archivage pallient ces difficultés en fournissant à la...
Le langage de l’ordinateur

4.2 En langage assembleur
Supposons, de façon un peu simplifiée, que l’on soit en présence d’u...
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php
Upcoming SlideShare
Loading in …5
×

Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php

3,642 views
3,479 views

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,642
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
643
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Eyrolles sinitier a_la_programmation_avec_des_exemples_en_c_c_c_java_et_php

  1. 1. delprog 2008 10/06/08 13:57 Page 1 Acquérir rapidement une parfaite maîtrise des techniques de programmation et savoir s’adapter facilement à tout nouveau langage Conçu pour les débutants en programmation, cet ouvrage commence par un apprentissage progressif et rigoureux des notions de programmation procédurale communes à tous les langages (types de données, variables, opérateurs, instructions de contrôle, fonctions, tableaux...), avant d’aborder les notions propres aux langages orientés objet. L'auteur utilise, pour faciliter l'assimilation des concepts, un pseudo-code complet mais simple d’accès, qui évite de se perdre dans les spécificités de tel ou tel langage. Chaque notion est d'abord présentée à l'aide du pseudo-code, avant d'être illustrée d’exemples d’implémentation en langages C, C++, C#, Java et PHP. De nombreux exercices corrigés permettent au lecteur de contrôler ses connaissances à chaque étape de l'apprentissage. À qui s’adresse ce livre ? • Aux étudiants en 1ère année de cursus informatique (BTS, DUT, licences, écoles d’ingénieur). • Aux autodidactes ou professionnels de tous horizons souhaitant s’initier à la programmation. • A tous ceux qui ont appris un langage « sur le tas » et ressentent le besoin d’approfondir leurs connaissances pour gagner en efficacité et en qualité et s’adapter plus facilement à de nouveaux langages. • Aux enseignants et formateurs à la recherche d’une méthode pédagogique et d’un support de cours structuré pour enseigner la programmation à des débutants. 782212 119909 Sur le site www.editions-eyrolles.com • Dialoguez avec l’auteur • Téléchargez le code source des exemples du livre 9 Ordinateurs, programmation et langages • Variables et instructions d’affectation • Instructions de lecture et d’écriture • Les structures de choix • Les structures de répétition • Quelques techniques usuelles d’algorithmique • Les tableaux • Les fonctions • Classes et objets • Propriétés des objets et des méthodes • Composition des objets • L’héritage • Le polymorphisme • Classes abstraites, interfaces et héritage multiple • Corrigé des exercices. Chaque chapitre comporte une rubrique « Côté langages », qui montre comment les concepts introduits à l’aide du pseudo-code s’expriment en C, C++, C#, Java et PHP, et une rubrique « Exemples langages », qui propose plusieurs programmes complets écrits dans ces différents langages. Code éditeur : G11990 • ISBN-13 : 978-2-212-11990-9 Au sommaire 25 € C. Delannoy Claude Delannoy Ingénieur informaticien au CNRS, Claude Delannoy possède une grande pratique de la formation continue et de l’enseignement supérieur. Réputés pour la qualité de leur démarche pédagogique, ses ouvrages sur les langages et la programmation totalisent plus de 250 000 exemplaires vendus. S’initier à la programmation Claude Delannoy S’initier ààla S’initier la programmation programmation Avec des exemples en Avec des exemples en C, C++, C#, Java et PHP C, C++, C#, Java et PHP
  2. 2. S’initier à la programmation Avec des exemples en C, C++, C#, Java et PHP
  3. 3. CHEZ LE MÊME ÉDITEUR Du même auteur C. Delannoy. – Programmer en Java. Java 5 et 6. N°12232, 5e édition, 2007, 800 pages + CD-Rom. C. Delannoy. – Exercices en Java. N°11989, 2e édition, 2006, 340 pages. C. Delannoy. – Apprendre le C++. N°12135, 2007, 760 pages. C. Delannoy. – C++ pour les programmeurs C. N°12231, 2007, 620 pages. C. Delannoy. – Exercices en langage C++. N°12201, 3e édition 2007, 336 pages. C. Delannoy. – Langage C. N°11123, 1998, 944 pages (format poche). C. Delannoy. – Programmer en langage C. Avec exercices corrigés. N°11072, 1996, 280 pages. C. Delannoy. – Exercices en langage C. N°11105, 1997, 260 pages. Autres ouvrages J. Engels. – PHP 5 : cours et exercices. N°11407, 2005, 518 pages. E. Daspet et C. Pierre de Geyer. – PHP 5 avancé. N°12167, 4e édition, 2007, 792 pages. M. Nebra. Réussir son site web avec XHTML et CSS. N°12307, 2e édition, 2008, 316 pages. R. Goetter. – CSS 2 : pratique du design web. N°11976, 2e édition, 2007, 324 pages. P. Roques. – UML 2 par la pratique. N°12322, 6e édition, 2008, environ 380 pages. H. Bersini, I. Wellesz. – L’orienté objet. Cours et exercices en UML 2 avec PHP, Java, Python, C# et C++ N°12084, 3e édition, 2007, 520 pages. C. Soutou, O. Teste. – SQL pour Oracle. N°12299, 3e édition 2008, 554 pages. C. Soutou. – Apprendre SQL avec MySQL. N°11915, 2006, 418 pages. A. Brillant. – XML : cours et exercices. N°12151, 2007, 282 pages.
  4. 4. Claude Delannoy S’initier à la programmation Avec des exemples en C, C++, C#, Java et PHP
  5. 5. ÉDITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com Le code de la propriété intellectuelle du 1er juillet 1992 interdit en effet expressément la photocopie à usage collectif sans autorisation des ayants droit. Or, cette pratique s’est généralisée notamment dans les établissements d’enseignement, provoquant une baisse brutale des achats de livres, au point que la possibilité même pour les auteurs de créer des œuvres nouvelles et de les faire éditer correctement est aujourd’hui menacée. En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le présent ouvrage, sur quelque support que ce soit, sans autorisation de l’éditeur ou du Centre Français d’Exploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. © Groupe Eyrolles, 2008, ISBN : 978-2-212-11990-9
  6. 6. Avant-propos Objectif de l’ouvrage Ce livre se propose de vous apprendre à programmer en exprimant les concepts fondamentaux à l’aide d’un « pseudo-code ». Cela vous permet de rédiger des programmes en privilégiant l’aspect algorithmique, sans être pollué par la complexité et la technicité d’un langage donné. Par ailleurs, l’ouvrage montre comment ces concepts fondamentaux se traduisent dans cinq langages très usités (C, C++, Java, C# et PHP) et fournit des exemples complets. Il prépare ainsi efficacement à l’étude d’un langage réel. Forme de l’ouvrage L’ouvrage a été conçu sous forme d’un cours, avec une démarche très progressive. De nombreux exemples complets, écrits en pseudo-code et accompagnés du résultat fourni par leur exécution, viennent illustrer la plupart des concepts fondamentaux. Des exercices appropriés proposent la rédaction de programmes en pseudo-code, permettant ainsi la mise en pratique des acquis. Plutôt que de les regrouper classiquement en fin de chapitre, nous avons préféré les placer aux endroits jugés opportuns pour leur résolution. Une correction est fournie en fin de volume ; nous vous encourageons vivement à ne la consulter qu’après une recherche personnelle et à réfléchir aux différences de rédaction qui ne manqueront pas d’apparaître. Chaque chapitre se termine par : • Une rubrique « Côté langages » qui montre comment les concepts exposés préalablement s’expriment dans les cinq langages choisis ; elle constitue une sorte de guide de traduction
  7. 7. VI S’initier à la programmation du pseudo-code dans un véritable langage. Notez que le langage C n’étant pas orienté objet, il n’est pris en compte que jusqu’au chapitre 8. • Une rubrique « Exemples langages » qui propose des programmes complets, traduction de certains des exemples présentés en pseudo-code. À qui s’adresse cet ouvrage Cet ouvrage s’adressse aux débutants en programmation et aux étudiants du premier cycle d’université. Il peut également servir : • à ceux qui apprennent à programmer directement dans un langage donné : il leur permettra d’accompagner leur étude, en dégageant les concepts fondamentaux et en prenant un peu de recul par rapport à leur langage ; • à ceux qui maîtrisent déjà la programmation dans un langage donné et qui désirent « passer à un autre langage » ; • à ceux qui connaissent déjà la programmation procédurale et qui souhaitent aborder la programmation orientée objet. Enfin, sa conception permet à l’ouvrage d’être facilement utilisé comme « support de cours ». Plan de l’ouvrage Le chapitre 1 présente le rôle de l’ordinateur, les grandes lignes de son fonctionnement et la manière de l’utiliser. Il dégage les importantes notions de langage, de programme, de données et de résultats, de système d’exploitation et d’environnement de programmation. Le chapitre 2 introduit les concepts de variable et de type, et la première instruction de base qu’est l’affectation. Il se limite à trois types de base : les entiers, les réels et les caractères. Il présente les erreurs susceptibles d’apparaître dans l’évaluation d’une expression et les différentes façons dont un langage donné peut les gérer. On y inclut les notions d’expression mixte et d’expression constante. Le chapitre 3 est consacré aux deux autres instructions de base que sont la lecture et l’écriture. Il nous a paru utile de les placer à ce niveau pour permettre, le plus rapidement possible, de présenter et de faire écrire des programmes complets. On situe ces instructions par rapport aux différents modes de communication entre l’utilisateur et le programme : mode console, programmation par événements, mode batch, programmation Internet. Le chapitre 4 étudie la structure de choix, en présentant la notion de condition et en introduisant le type booléen. On y aborde les choix imbriqués. L’existence de structures de choix multiple (instruction switch des cinq langages examinés) est évoquée dans la partie « Côté langages ».
  8. 8. Avant-propos Le chapitre 5 aborde tout d’abord les structures de répétition conditionnelle. Il présente la notion de compteur, avant d’examiner les structures de répétition inconditionnelle (ou « avec compteur ») et les risques inhérents à la modification intempestive du compteur. Le chapitre 6 présente les « algorithmes élémentaires » les plus usuels : comptage, accumulation, recherche de maximum, imbrication de répétitions. Il donne un aperçu de ce qu’est l’itération. Le chapitre 7 traite des tableaux, à une ou deux dimensions. Il se place a priori dans un contexte de gestion statique des emplacements mémoire correspondants et il décrit les contraintes qui pèsent alors sur la taille d’un tableau. Les autres modes de gestion (automatique et dynamique) sont néanmoins évoqués en fin de chapitre, ainsi que la notion de tableau associatif (utilisé par exemple par PHP) qui est comparée à celle de tableau indicé. Les situations de débordement d’indice sont examinées, avec leurs conséquences potentielles dépendantes du langage. Le chapitre 8 est consacré aux fonctions. Il présente les notions de paramètres, de variable locale et de résultat, et distingue la transmission par valeur de la transmission par référence (par adresse), en examinant le cas particulier des tableaux. Il aborde la durée de vie des variables locales, ce qui amène à traiter du mode de gestion automatique correspondant (et du concept de pile qu’il utilise souvent). Il dégage le concept de « programme principal » ou de « fonction principale ». Enfin, il donne un aperçu de ce qu’est la récursivité. Le chapitre 9 introduit les notions de classe, d’attribut, d’objet, de méthode, d’encapsulation des données et de constructeur. Il fournit quelques éléments concernant les deux modes de gestion possibles des objets, à savoir par référence ou par valeur. Il étudie les possibilités d’amendement du principe d’encapsulation par modification des droits d’accès aux attributs ou aux méthodes. Le chapitre 10 examine l’incidence du mode de gestion des objets (par référence ou par valeur) sur l’affectation d’objets et sur la durée de vie des objets locaux. Il aborde les objets transmis en paramètre et il convient, comme c’est le cas dans la plupart des langages objet, que « l’unité d’encapsulation est la classe et non l’objet ». Il analyse le cas des objets fournis en résultat. Puis, il étudie les attributs et les méthodes de classe, et traite sommairement des tableaux d’objets et des problèmes qu’ils posent dans l’appel des constructeurs, ainsi que des situations « d’auto-référence ». Le chapitre 11 est consacré à la composition des objets, c’est-à-dire au cas où un attribut d’une classe est lui-même de type classe. Il examine les problèmes qui peuvent alors se poser au niveau des droits d’accès et dans la nature de la relation qui se crée entre les objets concernés. Il présente la distinction entre copie profonde et copie superficielle d’un objet. Il montre également comment résoudre un problème fréquent, à savoir réaliser une classe à instance unique (singleton). Le chapitre 12 présente la notion d’héritage ou de classe dérivée et son incidence sur les droits d’accès aux attributs et aux méthodes. Il fait le point sur la construction des objets dérivés avant de traiter de la redéfinition des méthodes. Il aborde les situations de dérivations VII
  9. 9. VIII S’initier à la programmation successives et décrit succinctement les possibilités de modification des droits d’accès lors de la définition d’une classe dérivée. Le chapitre 13 expose les notions de base du polymorphisme, à savoir la compatibilité par affectation et la ligature dynamique. Il en examine les conséquences dans plusieurs situations et montre quelles sont les limites de ce polymorphisme, ce qui conduit, au passsage, à parler de valeurs de retour covariantes présentes dans certains langages. Le chapitre 14 traite enfin de concepts moins fondamentaux que l’héritage ou le polymorphisme, parfois absents de certains langages, mais qui peuvent faciliter la conception des logiciels. Il s’agit des notions de classes abstraites (ou retardées), d’interface et d’héritage multiple. Justifications de certains choix Voici quelques éléments justifiant les choix que nous avons opéré dans la conception de cet ouvrage. • Nous présentons la programmation procédurale avant d’introduire la programmation objet, pour différentes raisons : – la plupart des langages objet actuels offrent des possibilités de programmation procédurale ; – la programmation orientée objet s’appuie sur les concepts de la programmation procédurale ; la seule exception concerne la notion de fonction indépendante qui peut être absente de certains langages objet mais qui se retrouve quand même sous une forme très proche dans la notion de méthode ; – sur un plan pédagogique, il est difficile d’introduire directement des méthodes dans une classe si l’on n’a pas encore étudié l’algorithmique procédurale. • Dans le choix des concepts fondamentaux, nous avons évité de nous limiter à un sousensemble commun à tous les langages car cela aurait été trop réducteur à notre sens. Nous avons choisi les concepts qu’il nous a paru important de maîtriser pour pouvoir ensuite aborder la programmation dans n’importe quel langage. Ces choix font ainsi du pseudo-code, non pas la « matrice » de tous les langages, mais plutôt un langage à part entière, simple, mais renfermant la plupart des concepts fondamentaux de la programmation – certains pouvant ne pas exister dans tel ou tel langage. C’est précisément le rôle de la partie « Côté langages » que de monter en quoi les langages réels peuvent différer les uns des autres et ce au-delà de leur syntaxe (les cinq langages choisis possèdent la même syntaxe de base et jouissent pourtant de propriétés différentes). Ainsi, le lecteur est non seulement amené à programmer en pseudo-code mais, en même temps, il est préparé à affronter un vrai langage. Voici par exemple quelques points sur lesquels les langages peuvent se différencier les uns des autres :
  10. 10. Avant-propos – mode de traduction : compilation (C, C++), interprétation (PHP) ou traduction dans un langage intermédiaire (Java, C) ; – mode de gestion de la mémoire : statique, automatique, dynamique ; – nature des expressions constantes et des expression mixtes ; – gestion des tableaux (sous forme indicée ou sous forme de tableau associatif comme en PHP) ; – mode de transmission des paramètres d’une fonction : par valeur, par référence ; – utilisation pour les objets d’une « sémantique de valeur » ou d’une « sémantique de référence » (Java n’utilise que la première, tandis que C++ utilise les deux) ; – mode standard de recopie des objets : copie superficielle ou copie profonde. • Nous n’avons pas introduit de type chaîne car son implémentation varie fortement suivant les langages (type de base dans certains langages procéduraux, type hybride en C, type classe dans les langages objet...). Sa gestion peut se faire par référence ou par valeur. Dans certains langages, ces chaînes sont constantes (non modifiables), alors qu’elles sont modifiables dans d’autres... IX
  11. 11. Table des matières Chapitre 1 : Ordinateur, programme et langage . . . . . . . . . . . . . . . . . . . . . . . . . . .1 1 - Le rôle de l’ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 1.1 La multiplicité des applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 1.2 Le programme : source de diversité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 1.3 Les données du programme, les résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 1.4 Communication ou archivage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2 - Pour donner une forme à l’information : le codage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2.1 L’ordinateur code l’information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2.2 L’homme code l’information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 2.3 Ce qui différencie l’homme de l’ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 3 - Fonctionnement de l’ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3.1 À chacun son rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3.2 La mémoire centrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 3.3 L’unité centrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 3.4 Les périphériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 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 cru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 4.2 En langage assembleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 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
  12. 12. XII Table des matières Chapitre 2 : Variables et instruction d’affectation . . . . . . . . . . . . . . . . . . . . . . . 15 1 - La variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.2 Choix des noms des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.3 Attention aux habitudes de l’algèbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2 - Type d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1 La notion de type est une conséquence du codage en binaire . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Contraintes imposées par le type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3 Les types que nous utiliserons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4 Déclaration de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3 - L’instruction d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4 Quelques précautions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.5 Échanger les valeurs de deux variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4 - Les expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.1 Expressions de type entier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 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éel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 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 mixtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4 Expressions de type caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5 Affectation et conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5 - Les variables non définies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6 - Initialisation de variables et constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.1 Initialisation de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.2 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.3 Expressions constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 7 - Les fonctions prédéfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Noms de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Types de base et codage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Déclaration de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Instruction d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Opérateurs et expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
  13. 13. Table des matières XIII Chapitre 3 : Instructions d’écriture et de lecture . . . . . . . . . . . . . . . . . . . . . . . . .39 1 - L’instruction d’écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 1.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 1.2 Présentation des résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 1.2.1 Rien ne les identife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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ôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 2.2 Intérêt de l’instruction de lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 2.3 Présentation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 2.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 3 - Autres modes de communication avec l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 3.1 Mode console ou programmation par événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 3.2 Mode batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 3.3 Programmation Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 En C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 En C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 En C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 En Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 Chapitre 4 : La structure de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 1 - Présentation de l’instruction de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 1.1 Exemple introductif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 1.2 Notion de bloc d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 1.3 Un programme complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 2 - La condition du choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 2.1 Les conditions simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 2.2 Les conditions complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 2.2.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 2.2.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 3 - Cas particulier : une partie du choix absente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58 4 - Les choix imbriqués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 4.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 4.2 En cas d’ambiguïté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 4.3 Choix imbriqués ou succession de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 5 - Un nouveau type de base : booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 6 - Nos conventions d’écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
  14. 14. XIV Table des matières Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Instruction de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Type booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Instruction de choix multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Chapitre 5 : Les structures de répétition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1 - La répétition jusqu’à’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1.1 Exemple introductif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1.2 Nos conventions d’écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 1.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 1.3.1 Recherche de la première voyelle d’un mot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 1.3.2 Doublement de capital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 1.4 Faire des choix dans une boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2 - La répétition tant que . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2.1 Exemple introductif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.2 Conventions d’écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.3 Lien entre répétition tant que et répétition jusqu’à . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 2.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3 - Comment réaliser des répétitions inconditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.1 La notion de compteur de boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.2 Introduire un compteur dans une répétition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.2.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.2.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.3 Imposer un nombre de tours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.3.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.3.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.3.3 Exemple 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4 - La répétition inconditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.1 Exemples d’introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.1.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.1.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.2 Conventions d’écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.3 Utiliser le compteur dans une répétition inconditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.4 Éviter d’agir sur le compteur dans la boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.5 Compteur et boucle pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4.6 Un tour pour rien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.7 Le compteur en dehors de la boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
  15. 15. Table des matières Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90 Les répétitions tant que et jusqu’à . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90 La répétition pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94 Chapitre 6 : Quelques techniques usuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 1 - Le comptage d’une manière générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 1.1 Compter le nombre de lettres e d’un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96 1.2 Compter le pourcentage de lettres e d’un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96 2 - L’accumulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98 2.1 Accumulation systématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98 2.1.1 Un premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98 2.1.2 Un second exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99 2.2 Accumulation sélective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 3 - Recherche de maximum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101 4 - Imbrication de répétitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 4.1 Exemple de boucle avec compteur dans une boucle conditionnelle . . . . . . . . . . . . . . . . . . . .102 4.2 Exemple de boucle conditionnelle dans une boucle avec compteur . . . . . . . . . . . . . . . . . . . .103 4.3 Exemple de boucle inconditionnelle dans une autre boucle inconditionnelle . . . . . . . . . . . . .104 4.3.1 Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 4.3.2 Second exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 4.4 Une erreur à ne pas commettre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106 5 - L’itération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107 Chapitre 7 : Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 1 - Notion de tableau à une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 1.1 Quand la notion de variable ne suffit plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 1.2 La solution : le tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 2 - Utilisation d’un tableau à une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 2.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 2.2 Manipulation des éléments d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112 2.3 Affectation de valeurs à des éléments d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112 2.4 Lecture des éléments d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 2.5 Écriture des éléments d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 2.6 Utilisation de variables indicées dans des expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 2.7 Initialisation d’un tableau à une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 3 - Quelques techniques classiques appliquées aux tableaux à une dimension . . . . . . . . . . . . . .116 3.1 Somme et maximum des éléments d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 3.2 Test de présence d’une valeur dans un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 XV
  16. 16. XVI Table des matières 4 - Exemple d’utilisation d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 5 - Tri d’un tableau à une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 6 - Contraintes sur la dimension d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 7 - Débordement d’indice d’un tableau à une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 8 - Introduction aux tableaux à deux dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 9 - Utilisation d’un tableau à deux dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 9.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 9.2 Affectation de valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 9.3 Lecture des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 9.4 Écriture des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 10 - Quelques techniques classiques appliquées aux tableaux à deux dimensions . . . . . . . . . . . 128 11 - Gestion de l’emplacement mémoire d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 12 - Notion de tableau associatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Java, C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Chapitre 8 : Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 1 - Notion de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 1.1 Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 1.2 Notion de paramètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 1.3 Paramètres formels ou effectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 1.4 Notion de variable locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 1.5 Notion de résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 1.6 Exemple de fonctions à plusieurs paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 1.7 Indépendance entre fonction et programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 2 - Mode de transmission des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 2.2 Conséquences de la transmission par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 2.3 La transmission par référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 2.4 Nature des paramètres effectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 2.5 Un autre exemple de transmission par référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 3 - Tableaux en paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 3.1 Cas des tableaux de taille déterminée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
  17. 17. Table des matières XVII 3.2 Cas des tableaux de taille indéterminée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 3.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 4 - Les fonctions en général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 4.1 Propriétés des variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 4.1.1 Les variables locales ne sont pas rémanentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 4.1.2 Initialisation des variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 4.1.3 Tableaux locaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 4.1.4 Imposer à une variable locale d’être rémanente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 4.2 Propriétés du résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 4.3 Appels imbriqués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 4.4 Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 4.5 Concordance de type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 4.6 Surdéfinition des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162 5 - Gestion de la mémoire des variables locales : notion de pile . . . . . . . . . . . . . . . . . . . . . . . . . .162 6 - Programme principal et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163 7 - La récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164 8 - Bibliothèques de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166 9 - Une autre présentation de la notion de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168 Structure d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168 Mode de transmission des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 Programme principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 Séparation entre fonction et programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Fonction somme des éléments d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Fonction estVoyelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173 Fonction tri d’un tableau avec fonction échange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 Chapitre 9 : Classes et objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 1 - Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 2 - Un premier exemple : une classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 2.1 Utilisation de notre classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 2.1.1 Le mécanisme déclaration, instanciation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 2.1.2 Utilisation d’objets de type Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182 2.2 Définition de la classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 2.3 En définitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184 2.4 Indépendance entre classe et programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184 3 - L’encapsulation et ses conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 3.1 Méthodes d’accès et d’altération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 3.2 Notions d’interface, de contrat et d’implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186 3.3 Dérogations au principe d’encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
  18. 18. XVIII Table des matières 4 - Méthode appelant une autre méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 5 - Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 5.2 Exemple d’adaptation de notre classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.3 Surdéfinition du constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 5.4 Appel automatique du constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 5.5 Exemple : une classe Carré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 6 - Mode des gestion des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Définition d’une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Utilisation d’une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Exemples langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Chapitre 10 : Propriétés des objets et des méthodes . . . . . . . . . . . . . . . . . . 203 1 - Affectation et comparaison d’objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 1.1 Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 1.2 Second exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 1.3 Comparaison d’objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 1.4 Cas des langages gérant les objets par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 2 - Les objets locaux et leur durée de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 3 - Cas des objets transmis en paramètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 3.1 Mode de transmission d’un objet en paramètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 3.2 L’unité d’encapsulation est la classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 3.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 4 - Objet en résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 5 - Atributs et méthodes de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.1 Attributs de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.1.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 5.2 Méthodes de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 5.2.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 5.2.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 5.2.3 Autres utilisations des attributs et des méthodes de classe . . . . . . . . . . . . . . . . . . . . . . 219 6 - Tableaux d’objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 7 - Autoréférence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 7.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 7.2 Exemples d’utilisation de courant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 8 - Classes standards et classe Chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
  19. 19. Table des matières XIX Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223 Affectation, transmission en paramètre et en résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223 Méthodes et attributs de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223 Autoréférence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227 Chapitre 11 : Composition des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 1 - Premier exemple : une classe Cercle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 1.1 Droits d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230 1.1.1 Comment doter Cercle d’une méthode affiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230 1.1.2 Doter Cercle d’une méthode déplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231 1.2 Relations établies à la construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231 1.2.1 Coordonnées en paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 1.2.2 Objet de type point en paramètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 1.3 Cas de la gestion par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 2 - Deuxième exemple : une classe Segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 3 - Relations entre objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238 4 - Copie profonde ou superficielle des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 5 - Une classe « singleton » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 Java, C# et PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 Chapitre 12 : L’héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247 1 - La notion d’héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248 2 - Droits d’accès d’une classe dérivée à sa classe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250 2.1 Une classe dérivée n’accède pas aux membres privés de la classe de base . . . . . . . . . . . . . .250 2.2 Une classe dérivée accède aux membres publics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 2.3 Exemple de programme complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252 3 - Héritage et constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254 4 - Comparaison entre héritage et composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256 5 - Dérivations successives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258 6 - Redéfinition de méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259 6.2 La notion de redéfinition de méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
  20. 20. XX Table des matières 6.3 La redéfinition d’une manière générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 6.4 Redéfinition de méthode et dérivations successives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 7 - Héritage et droits d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Syntaxe de la dérivation et droits d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Gestion des constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Redéfinition de méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Exemples langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Chapitre 13 : Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 1 - Les bases du polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 1.1 Compatibilité par affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 1.2 La ligature dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 1.3 En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 1.4 Cas de la gestion par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 1.5 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 1.6 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 2 - Généralisation à plusieurs classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 3 - Autre situation où l’on exploite le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 4 - Limites de l’héritage et du polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 4.1 Les limitations du polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 4.2 Valeurs de retour covariantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Java et PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Exemples langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Chapitre 14 : Classes abstraites, interfaces et héritage multiple . . . . . 289 1 - Classes abstraites et méthodes retardées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 1.1 Les classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 1.2 Méthodes retardées (ou abstraites) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 1.3 Intérêt des classes abstraites et des méthodes retardées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 1.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
  21. 21. Table des matières XXI 2 - Les interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293 2.1 Définition d’une interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 2.2 Implémentation d’une interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 2.3 Variables de type interface et polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295 2.4 Exemple complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 2.5 Interface et classe dérivée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297 3 - L’héritage multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297 Côté langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 Classes abstraites et méthodes retardées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 Exemples langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299 Classes et méthodes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .303 Chapitre 15 : Correction des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307 Chapitre 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307 Chapitre 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310 Chapitre 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312 Chapitre 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314 Chapitre 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .318 Chapitre 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321 Chapitre 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .325 Chapitre 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328 Chapitre 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333 Chapitre 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335 Chapitre 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
  22. 22. 1 Ordinateur, programme et langage Ce chapitre expose tout d’abord les notions de programme et de traitement de l’information. Nous examinerons ensuite le rôle de l’ordinateur et ses différents constituants. Nous aborderons alors l’importante notion de langage de programmation et nous vous indiquerons succinctement quels sont les concepts fondamentaux que l’on rencontre dans la plupart des langages actuels, ce qui nous permettra d’introduire la démarche que nous utiliserons dans la suite de l’ouvrage. 1 Le rôle de l’ordinateur 1.1 La multiplicité des applications Les applications de l’ordinateur sont très nombreuses. En voici quelques exemples : • accès à Internet ; • envoi de courrier électronique ; • création de sites Web ; • lecture de CD-Rom ou de DVD ; • archivage et retouche de photos ; • jeux vidéo ;
  23. 23. 2 Ordinateur, programme et langage CHAPITRE 1 • bureautique : traitement de texte, tableur, gestion de bases de données... ; • gestion et comptabilité : facturation, paye, stocks... ; • analyse numérique ; • prévisions météorologiques ; • aide à la conception électronique (CAO) ou graphique (DAO) ; • pilotage de satellites, d’expériences... 1.2 Le programme : source de diversité Si un ordinateur peut effectuer des tâches aussi variées, c’est essentiellement parce qu’il est possible de le programmer. Effectivement, l’ordinateur est capable de mettre en mémoire un programme qu’on lui fournit ou, plus souvent qu’on lui désigne (en général, on fournira le moyen de trouver le programme, plutôt que le programme lui-même) puis de l’exécuter. Plus précisément, un ordinateur possède un répertoire limité d’opérations élémentaires qu’il sait exécuter très rapidement. Un programme est alors constitué d’un ensemble de directives, nommées instructions, qui spécifient : • les opérations élémentaires à exécuter, • la manière dont elles s’enchaînent. En définitive, la vitesse d’exécution de l’ordinateur fait sa puissance ; le programme lui donne sa souplesse. En particulier, nous verrons que certaines des instructions permettent soit de répéter plusieurs fois un ensemble donné d’instructions, soit de choisir entre plusieurs ensembles d’instructions. 1.3 Les données du programme, les résultats Supposez qu’un enseignant dispose d’un ordinateur et d’un programme de calcul de moyennes de notes. Pour fonctionner, un tel programme nécessite qu’on lui fournisse les notes dont on cherche la moyenne. Nous les appellerons informations données ou plus simplement données. En retour, le programme va fournir la moyenne cherchée. Nous l’appellerons information résultat ou plus simplement résultat. Si le programme a été prévu pour cela, il peut fournir d’autres résultats tels que le nombre de notes supérieures à 10. De la même manière, un programme de paye nécessite des données telles que le nom des différents employés, leur situation de famille, leur numéro de sécurité sociale et différentes informations permettant de déterminer leur salaire du mois. Parmi les résultats imprimés sur les différents bulletins de salaire, on trouvera notamment : le salaire brut, les différentes retenues légales, le salaire net... Un programme de réservation de billet d’avion par Internet nécessitera des données telles que votre nom, votre numéro de carte d’identité ainsi que le choix du vol.
  24. 24. Pour donner une forme à l’information : le codage 1.4 Communication ou archivage D’où proviennent les données ? Que deviennent les résultats ? Les réponses les plus naturelles sont : les données sont communiquées au programme par l’utilisateur ; les résultats sont communiqués à l’utilisateur par le programme. Cela correspond effectivement à une situation fort classique dans laquelle l’ordinateur doit être en mesure de communiquer avec l’homme. Cependant, les données ne sont pas toujours fournies manuellement. Par exemple, dans le cas d’un programme de paye, il est probable que certaines informations relativement permanentes (noms, numéros de sécurité sociale...) auront été préalablement archivées dans un fichier ou dans une base de données. Le programme y accédera alors directement. Dans le cas de la réservation d’un billet d’avion, vous n’aurez pas à fournir explicitement les caractéristiques du vol souhaité (aéroport de départ, aéroport d’arrivée, heure de départ, numéro de vol...). Vous effectuerez un choix parmi une liste de possibilités que le programme aura trouvées, là encore, dans une base de données, en fonction de certains critères que vous aurez exprimés. On notera, à propos des bases de données, que les informations qu’elles renfement auront dû être préalablement archivées par d’autres programmes dont elles constituaient alors les résultats. Ceci montre la relativité de la notion de donnée ou de résultat. Une même information peut être tantôt donnée, tantôt résultat, suivant l’usage que l’on en fait. En général, cet échange d’informations entre programme et milieu extérieur paraît assez naturel. En revanche, on voit que le programme représente lui-même une information particulière. Comme les données, il sera, soit prélevé automatiquement dans des archives (de programmes, cette fois), soit (plus rarement) communiqué à l’ordinateur par l’homme. Qui plus est, nous verrons, dès que nous parlerons de langage et de traducteur, que l’information programme pourra, elle aussi, apparaître tantôt comme donnée, tantôt comme résultat d’un autre programme. 2 Pour donner une forme à l’information : le codage 2.1 L’ordinateur code l’information Lorsque nous échangeons de l’information avec d’autres personnes, nous utilisons des chiffres, des lettres, des graphiques, des paroles, etc. Or, pour des raisons purement technologiques, l’ordinateur ne peut traiter ou manipuler qu’une information exprimée sous forme binaire. On imagine souvent une telle information comme une suite de 0 et de 1, mais on pourrait en fait utiliser n’importe quel couple de symboles (comme rond blanc et rond noir, ampoule allumée et ampoule éteinte). 3
  25. 25. 4 Ordinateur, programme et langage CHAPITRE 1 Quand vous transmettez une information à l’ordinateur, par exemple en tapant sur les touches d’un clavier, il est nécessaire qu’il la transforme en binaire. Nous dirons qu’il réalise un codage en binaire de cette information. De la même manière, avant de vous fournir un résultat, il devra opérer une transformation symétrique. 2.2 L’homme code l’information En toute rigueur, l’ordinateur n’est pas le seul à coder l’information. Pour vous en convaincre, considérez cette petite phrase : 13, treize, vous avez dit XIII. Vous constatez que la même valeur apparaît exprimée sous trois formes différentes : 13 treize XIII La première forme s’exprime avec deux symboles, chacun étant choisi parmi les chiffres de 0 à 9. Nous disons que nous avons utilisé deux positions d’un code à dix moments (les dix chiffres 0, 1, 2... 9). La deuxième forme s’exprime avec six symboles (lettres), chacun étant choisi parmi les vingt-six lettres de l’alphabet. Nous disons que nous avons utilisé six positions d’un code à vingt-six moments. La dernière forme s’exprime avec quatre positions d’un code à sept moments (les lettres représentant les chiffres romains : I, V, X, L, C, M et D). Quant aux codes binaires employés par l’ordinateur, ce sont tout simplement des codes à deux moments puisqu’il suffit de deux symboles pour exprimer une information binaire. Le choix de ces deux symboles est purement conventionnel ; généralement on emploie les deux premiers chiffres de notre système décimal. Ainsi : 10011010 représente une information binaire utilisant huit positions. Chaque position porte le nom de bit, terme qui est donc l’équivalent, pour les codes binaires, des termes chiffres ou lettres employés par les codes rencontrés précédemment. 2.3 Ce qui différencie l’homme de l’ordinateur En définitive, on peut se dire que l’ordinateur et l’homme diffèrent dans leur façon de représenter l’information puisque l’ordinateur ne connaît que le binaire tandis que l’homme est capable d’utiliser une très grande variété de codes. Mais est-ce bien la seule différence ? En fait, lorsque, dans un texte, vous rencontrez « 13 » ou « bonjour », il n’est pas besoin qu’on vous précise quel code a été effectivement employé. Au vu des symboles utilisés, vous arrivez à leur attribuer une signification. Qui plus est, lorsque vous rencontrez « XII I» dans la petite phrase du paragraphe 2.2, vous reconnaissez immédiatement le code « chiffres romains » et non plus le code « lettres de l’alphabet » (et ceci, bien que les chiffres romains
  26. 26. Fonctionnement de l’ordinateur soient des lettres de l’alphabet !). Dans ce cas, vous avez utilisé votre expérience, votre intelligence et le contexte de la phrase pour attribuer une signification à « XIII ». Le binaire, en revanche, est beaucoup moins naturel, non seulement pour l’homme mais également pour l’ordinateur. Pour vous en convaincre, imaginez que vous ayez besoin de savoir ce que représentent les huit bits 00101001. Certes, vous pouvez toujours dire que cela peut représenter l’écriture en binaire du nombre entier 41. Mais pourquoi cela représenterait-il un nombre ? En effet, toutes les informations (nombres, textes, instructions de programme, dessins, photos, vidéos,...) devront, au bout du compte, être codées en binaire. Dans ces conditions, les huit bits ci-dessus peuvent très bien représenter une lettre, un nombre, une instruction de programme ou tout autre chose. En définitive, nous voyons que l’ordinateur code l’information ; l’homme agit de même. Cependant, on pourrait dire que l’ordinateur « code plus » que l’homme ; en effet, il n’est pas possible d’attribuer un sens à la seule vue d’une information binaire. Il est, en outre, nécessaire de savoir comment elle a été codée. Nous verrons qu’une conséquence immédiate de ce phénomène réside dans l’importante notion de type, lequel indique précisément le codage utilisé pour représenter une information. 3 Fonctionnement de l’ordinateur Après avoir vu quel était le rôle de l’ordinateur, nous allons maintenant exposer succinctement ses constituants et son fonctionnement. 3.1 À chacun son rôle Nous avons donc vu qu’un ordinateur : • traite l’information grâce à un programme qu’il mémorise ; • communique et archive des informations. Ces différentes fonctions correspondent en fait à trois constituants différents : • La mémoire centrale, qui permet de mémoriser les programmes pendant le temps nécessaire à leur exécution. On y trouve également les informations temporaires manipulées par ces programmes : données après leur introduction, résultats avant leur communication à l’extérieur, informations intermédiaires apparaissant pendant le déroulement d’un programme. Signalons que, parfois, on emploie le terme donnée à la place de celui d’information : on dit alors qu’en mémoire centrale, se trouvent à la fois le programme et les données manipulées par ce programme. • L’unité centrale, qui est la partie active de l’ordinateur. Elle est chargée de prélever en mémoire, une à une, chaque instruction de programme et de l’exécuter. D’ores et déjà, nous pouvons distinguer deux sortes d’instructions : 5
  27. 27. 6 Ordinateur, programme et langage CHAPITRE 1 – Celles qui agissent sur des informations situées en mémoire centrale ; ce sont elles qui permettent véritablement d’effectuer le traitement escompté. – Celles qui assurent la communication ou l’archivage d’informations ; elles réalisent en fait un échange d’informations entre la mémoire centrale et d’autres dispositifs nommés périphériques. • Les périphériques (évoqués ci-dessus), qui correspondent à tous les appareils susceptibles d’échanger des informations avec la mémoire centrale. On en distingue deux sortes : – ceux qui assurent la communication entre l’homme et l’ordinateur : clavier, écran, imprimante, souris... – ceux qui assurent l’archivage d’informations : disque dur, disquette, CD-Rom, DVD, bandes magnétiques... Ils ont un rôle de mémorisation d’informations, au même titre que la mémoire centrale dont ils constituent en quelque sorte un prolongement ; nous verrons d’ailleurs que leur existence ne se justifie que pour des considérations de coût. Examinons maintenant le fonctionnement de chacun des constituants de l’ordinateur. 3.2 La mémoire centrale Comme nous l’avons déjà évoqué, il se trouve qu’actuellement ce sont les systèmes de mémorisation binaire qui sont les moins coûteux. C’est pourquoi la mémoire centrale est formée d’éléments dont chacun ne peut prendre que deux états distincts. Autrement dit, chacun de ces éléments correspondant à un bit d’information. Pour que la mémoire soit utilisable, il faut que l’unité centrale puisse y placer une information et la retrouver. Dans toutes les machines actuelles, cela est réalisé en manipulant, non pas un simple bit, mais au minimum un groupe de huit bits qu’on nomme un octet. Chaque octet est repéré par un numéro qu’on nomme son adresse. Un dispositif, associé à cette mémoire permet : • soit d’aller chercher en mémoire un octet d’adresse donnée ; notez bien que, dans ce cas, le contenu du mot en question n’est pas modifié (il n’y a pas vraiment prélèvement, mais plutôt recopie), • soit d’aller ranger une information donnée dans un octet d’adresse donnée ; naturellement, l’ancienne information figurant à cette adresse est remplacée par la nouvelle. En général, les différents octets de la mémoire peuvent accueillir indifféremment des instructions de programme ou des informations. La plupart des machines actuelles offrent la possibilité de manipuler simultanément plusieurs octets consécutifs. On parle parfois de mot pour désigner un nombre donné d’octets (mais ce nombre varie d’une machine à l’autre).
  28. 28. Fonctionnement de l’ordinateur Remarque À la place du terme mémoire centrale, on emploie également souvent celui de mémoire vive, ou encore de RAM, abréviation de Random Access Memory (mémoire à accès aléatoire). 3.3 L’unité centrale Elle sait exécuter, très rapidement, un certain nombre d’opérations très simples telles que : • addition, soustraction, multiplication ou division de nombres codés dans des mots (suite d’octets) de la mémoire centrale ; • comparaison de valeurs contenues dans deux octets ou dans deux mots ; • communication à un périphérique d’une information élémentaire (contenue dans un octet ou un mot). Chaque instruction de programme doit préciser : • la nature de l’opération à réaliser ; il s’agit d’un numéro (codé en binaire, bien sûr) qu’on appelle « code opération » ; • les adresses (ou l’adresse) des informations sur lesquelles doit porter l’opération. L’unité centrale est conçue pour exécuter les instructions dans l’ordre naturel où elles figurent en mémoire. Cependant, pour qu’un programme puisse réaliser des choix ou des répétitions, il est nécessaire de pouvoir rompre cet ordre. C’est pourquoi il existe également des instructions particulières dites de branchement. Elles demandent à l’unité centrale de poursuivre l’exécution du programme à une adresse donnée, au lieu de poursuivre naturellement « en séquence ». Ces branchements peuvent être conditionnels ; autrement dit, ils peuvent n’avoir lieu que si une certaine condition (par exemple égalité de deux valeurs) est réalisée. 3.4 Les périphériques Comme nous l’avons vu, ils servent à échanger de l’information avec la mémoire centrale et ils se classent en deux grandes catégories : communication et archivage. 3.4.1 Les périphériques de communication Les plus répandus sont certainement le clavier, l’écran, l’imprimante et la souris. Il en existe cependant beaucoup d’autres tels que les tables traçantes, les écrans tactiles, les synthétiseurs de parole, les lecteurs optiques de caractères, les lecteurs de codes-barres... 3.4.2 Les périphériques d’archivage La mémoire centrale permet des accès très rapides à l’information qu’elle contient. Mais son coût est élevé ; cela est dû à la technologie utilisée qui doit permettre d’accéder directement à un octet d’adresse quelconque. En outre, elle est généralement « volatile », c’est-à-dire que sa mise hors tension provoque la disparition de la totalité de l’information qu’elle contient. 7
  29. 29. 8 Ordinateur, programme et langage CHAPITRE 1 Les périphériques d’archivage pallient ces difficultés en fournissant à la fois des mémoires permanentes et des coûts beaucoup plus faibles. En contrepartie, l’accès à l’information y est beaucoup plus lent. Deux grandes catégories de périphériques d’archivage sont en concurrence : • Les périphériques ne permettant qu’un accès séquentiel à l’information : bandes ou cassettes magnétiques ; pour accéder à un octet quelconque, il est nécessaire de parcourir toute l’information qui le précède, à l’image de ce que vous faites avec un lecteur de cassettes audio ou vidéo. • Les périphériques permettant l’accès direct à l’information : disques magnétiques (dits souvent « disques durs »), disquettes, CD-Rom, DVD... Ils permettent d’accéder presque directement à un octet, comme sur un lecteur de CD audio ; plus précisément, l’information y est rangée suivant des pistes concentriques et un mécanisme permet d’accéder mécaniquement à l’une quelconque de ces pistes : la lecture de cette piste est ensuite séquentielle (en toute rigueur, l’organisation des CD-Rom et des DVD est sensiblement différente de celle des disques magnétiques, mais celà n’a guère d’incidence sur leurs possibilités d’accès direct). La première catégorie de périphériques ne doit sa survie qu’à son coût moins élevé que la seconde. Actuellement, elle reste surtout utilisée avec les très gros calculateurs. 4 Le langage de l’ordinateur 4.1 Langage machine ou langage de notre cru Comme nous l’avons vu, l’ordinateur ne sait exécuter qu’un nombre limité d’opérations élémentaires, dictées par des instructions de programme et codées en binaire. On traduit cela en disant que l’ordinateur ne « comprend » que le langage machine. Mais, fort heureusement, cela ne signifie nullement que tout programme doive être réalisé dans ce langage machine. En effet, et c’est là qu’intervient la seconde idée fondamentale de l’informatique (après celle de programme enregistré), à savoir : employer l’ordinateur luimême (ou, plus précisément, un programme) pour effectuer la traduction du langage utilisé dans celui de l’ordinateur. Nous ne pouvons pas pour autant utiliser n’importe quel langage de notre choix. En effet, il ne suffit pas de définir un langage, il faut qu’il puisse être traduit en langage machine, ce qui lui impose nécessairement d’importantes contraintes : un langage naturel comme le français ne pourrait pas convenir . En outre, il faut que le programme de traduction existe réellement. Tout ceci explique qu’à l’heure actuelle on doive se restreindre à des langages ayant un nombre très limité de mots, avec des règles de syntaxe assez rigoureuses.
  30. 30. Le langage de l’ordinateur 4.2 En langage assembleur Supposons, de façon un peu simplifiée, que l’on soit en présence d’un ordinateur pour lequel l’instruction machine : 0101010011011010 signifie : additionner (code opération 0101) les valeurs situées aux adresses 010011 et 011010. Nous pouvons choisir d’exprimer cela sous une forme un peu plus parlante, par exemple : ADD A, B Pour que la chose soit réalisable, il suffit de disposer d’un programme capable de convertir le symbole ADD en 0101 et de remplacer les symboles A et B par des adresses binaires (ici 010011 et 011010). Sans entrer dans le détail des tâches précises que doit réaliser un tel programme, on voit bien : • qu’il doit faire correspondre un code opération à un symbole mnémonique ; • qu’il doit être capable de décider des adresses à attribuer à chacun des symboles tels que A et B ; notamment, à la première rencontre d’un nouveau symbole, il doit lui attribuer une adresse parmi les emplacements disponibles (qu’il lui faut gérer) ; à une rencontre ultérieure de ce même symbole, il doit retrouver l’adresse qu’il lui a attribuée. Tous les constructeurs sont en mesure de fournir avec leur ordinateur un programme capable de traduire un langage du type de celui que nous venons d’évoquer. Un tel langage se nomme langage d’assemblage ou encore assembleur. Le programme de traduction correspondant se nomme, lui aussi, assembleur. Bien qu’ils se ressemblent, tous les ordinateurs n’ont pas exactement le même répertoire d’instructions machine. Dans ces conditions, chaque modèle d’ordinateur possède son propre assembleur. D’autre part, même si un tel langage est plus facile à manipuler que le langage machine, il ne s’en distingue que par son caractère symbolique, pour ne pas dire mnémonique. Les deux langages (assembleur et langage machine) possèdent pratiquement les mêmes instructions ; seule diffère la façon de les exprimer. Dans tous les cas, l’emploi de l’assembleur nécessite une bonne connaissance du fonctionnement de l’ordinateur utilisé. On exprime souvent cela en disant que ce langage est orienté machine. Réaliser un programme dans ce langage nécessite de penser davantage à la machine qu’au problème à résoudre. 4.3 En langage évolué Très vite est apparu l’intérêt de définir des langages généraux utilisables sur n’importe quel ordinateur et orientés problème, autrement dit permettant aux utilisateurs de penser davantage à leur problème qu’à la machine. 9

×