2 - FR - Esiee

publicité
ESIEE Paris
© Denis BUREAU
2012
1
IN101
Initiation
à la programmation
avec le langage Java
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 -
2012
2
Cours 1.0
• I. Présentation de l'unité
• II. Introduction à la programmation
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 - I.
I. Présentation de l'unité
•
•
•
•
•
•
•
•
I.1. Enseignant responsable
I.2. Autres intervenants
I.3. Séquencement
I.4. Évaluation
I.5. Objectifs
I.6. Approche pédagogique
I.7. Votre rôle
I.8. Environnement technique
2012
3
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.1
I.1. Enseignant responsable
•
•
•
•
Denis BUREAU
5356
D.Bureau (@esiee.fr)
Aussi : responsable du bloc informatique
du Tronc Commun (I1, I2, I3)
2012
4
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.2
I.2. Autres intervenants
• Vous devez savoir qui est votre
intervenant.
Venez me voir sans délai en cas de
problème.
• Permanents
• Vacataires
• Lire Coordonnées
2012
5
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.3
2012
6
I.3. Séquencement
• Lire Enseignement de la programmation
dans le Tronc Commun, dont la I1
• Lire Séquencement de l'unité
• 7 séquences IN101 + projet PR102 mêlés
• Ce premier cours de la séquence 1 =
introduction ; le prochain rentre dans le vif
du sujet ==> beaucoup plus dense.
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.4
2012
7
I.4. Évaluation
• Partiel 1 = QCM + mini-écrit (1)
• Partiel 2 = QCM + écrit (2)
• Final = Questions ouvertes + écrit (3)
• Pas de rapport de TP
• Plutôt que de passer des heures sur les
annales, relire cours et refaire les td et tp !
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.5
I.5. Objectifs
• bases de la programmation
en langage de haut-niveau
• approche objet
• solution en français à un problème
(à découper en sous-problèmes)
• langage Java et quelques bibliothèques
• ne doit pas seulement fonctionner,
doit aussi être "bien" programmé
• expérience pratique et opérationnelle
2012
8
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.6
2012
9
I.6. Approche pédagogique 1/2
• hypothèse de départ :
personne ne sait programmer en java
• les objets d'abord, apprentissage incrémental
(pas tout d'une notion la première fois)
• ne peut fonctionner qu'avec votre participation
active (par exemple, lire compléments de cours
sur la page web) et nécessite d'apprendre le
vocabulaire en français et en Java (+ rigueur)
• cours, td, tp, travail personnel, post-assistance
(5356/mail/PC), projet
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.6
2012
10
I.6. Approche pédagogique 2/2
• Après un TP, ne pas accepter de ne pas
comprendre qqch de dit ou d'écrit !
• - page web : retenir
http://www.esiee.fr/~bureaud/unites.htm
+ polycopié + livre
• polycopié = aide-mémoire, autre présentation
(utile, mais pas la même progression
pédagogique)
• livre très pédagogique, non indispensable,
couvre beaucoup plus de choses (3ème ou 4ème
édition seulement, english is better)
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.7
2012
11
I.7. Votre rôle : cours
• Arriver à l’heure sinon attendre pause :
c35mn + p5mn + c35mn + p5mn + c35mn
• ne pas faire de bruit (et écouter)
• prendre des notes (je n'écris pas tout)
• poser des questions
• relire (notes, résumé, poly)
• noter des questions pour les poser à la
prochaine occasion
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.7
2012
12
I.7. Votre rôle : td
• cours relu, apporter notes de cours
• ne pas attendre de correction / essayer
• poser des questions
• terminer seul les exercices et les essayer sur
machine (meilleure préparation pour les contrôles
car il faudra écrire un programme sur papier)
• mais différence essentielle : td = mieux vaut
écrire faux que rien alors que contrôle (surtout
qcm) = mieux vaut rien écrire que faux
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.7
2012
13
I.7. Votre rôle : tp
• cours relu, apporter notes de cours et TD
• ne pas regarder une solution
• demander de l'aide, poser des questions
• terminer seul les exercices
• partager le clavier (première moitié l'un écrivain,
l'autre relecteur, puis seconde moitié le contraire ;
les deux sont autant responsables de chaque
erreur, l'un parce qu'il l'a tapée, l'autre parce qu'il
ne l'a pas signalée)
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.7
2012
14
I.7. Votre rôle : entre les séances
• Relire notes de cours et suppléments de
cours => noter des questions
• Poser les questions par mail ou en 5356
• Terminer les exercices td et tp
• En cas de doute ou de blocage,
les envoyer par mail ou venir les montrer
(un PC est à votre disposition en 5356,
vous pouvez vous loger sur votre compte)
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – I.8
I.8. Environnement technique
•
•
•
•
PC sous Linux
Java 6 (pas 7 !)
BlueJ 3.0.x
chez soi :
Windows ou MacOS OK (tout gratuit)
2012
15
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 - I.
I. Présentation de l'unité
•
•
•
•
•
•
•
•
I.1. Enseignant responsable
I.2. Autres intervenants
I.3. Séquencement
I.4. Évaluation
I.5. Objectifs
I.6. Approche pédagogique
I.7. Votre rôle
I.8. Environnement technique
2012
16
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.
II. Introduction à la programmation
•
•
•
•
II.1 Informatique (différents "métiers")
II.2. Performances du matériel
II.3. Langages de programmation
II.4. Algorithme
2012
17
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.1
II.1 Informatique (différents "métiers")
• utilisateur (bureautique ?)
• utilisateur avancé
• technico-commercial,
technicien/dépanneur, programmeur*
• concepteur* / analyste
• chercheur / théoricien
• Lire au moins les 19 premières pages
du premier chapitre de ce long poly
2012
18
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.2
2012
19
II.2 Performances du matériel
• micro-processeur : 1GHz (à 4) ==> environ 1ns
• mémoire RAM : 1Go (à 8), environ 10ns (à 70)
==> 10x plus lent , (+ cache, - multi-processeurs,
+ multi-accès ...)
• disque dur : 1To (à 2), environ 10ms ==>
1 million x plus lent
(==> charger, traiter, sauvegarder)
• même les SSD sont 10000 x plus lents que la
RAM (et sont limités à 512 Go pour l’instant)
• Lire Description d'un ordinateur
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3
II.3 Langages de programmation
• II.3.1. Il y en a beaucoup !
• II.3.2. Niveaux
• II.3.3. Traducteurs
• II.3.4. "Philosophies"
• II.3.5. Exemples
• II.3.6. Historique (C, C++, Java)
• II.3.7. Pourquoi Java ?
2012
20
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.1
2012
21
II.3.1 Il y en a beaucoup !
•
•
•
•
•
étude du D.O.D. en 1980
400 langages / dialectes
appel d’offres, langage universel, Ada
on en invente presque ttes les semaines !
mais seuls quelques importants
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.2
2012
22
II.3.2 Niveaux
• bas niveau : machine (binaire, 0/1)
00111001 01100011 10110010
• assemblage / assembleur (ex: 68k, macro)
MOV R1, @(R2+R3) BNZ R1, 0x1F8A
• haut niveau (ex: C, C++, Java, php, …)
X = Y+Z+1 IF X > 0 THEN R = SQRT( X )
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.3
II.3.3 Traducteurs
• assembleur
assemblage -> binaire exécutable
• compilateur (tout le programme)
haut niveau -> binaire exécutable
• interpréteur (ligne par ligne)
haut niveau -> compile / exécute
• Java : compilateur et interpréteur !
2012
23
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.4
II.3.4 "Philosophies"
•
•
•
•
•
impératif ou déclaratif (rare)
fonctionnel
script
structuré ou non (rare, vieux)
Orienté Objet ou non (classique)
2012
24
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.5
II.3.5 Exemples (voir index TIOBE)
• Java et C (environ 17%)
• C# (.net) et C++ (8 à 9%)
• Objective-C (iPhone) et Php (6 à 7%)
• Visual Basic (MS Office) (4 à 5%)
• Python, Perl, JavaScript (2 à 3%)
• lisp/scheme, camL, prolog, shell, ruby,
groovy, tcl/tk (outils en électronique),
pascal/delphi, ada, logo, fortran, cobol, ...
2012
25
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.6
II.3.6 Historique (C, C++, Java)
• II.3.6.a. C :
• 1972, Bell Labs AT&T,
(pour écrire Unix, ancêtre de Linux)
• ANSI-C 1983
• ISO-C 1990 puis 1999
• « bas niveau », non OO, compilé,
idéal pour accéder au matériel,
non adapté à de grosses applications
2012
26
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.6
II.3.6 Historique (C, C++, Java)
• II.3.6.b. C++ :
• 1983, Bell Labs AT&T,
C O.O., compatible ANSI-C
• ISO-C++ 1998 puis 2003
• mieux, mais bas niveau existe toujours,
O.O. et N.O.O., compilé
• peut être appris seul si on connaît
Java et C
2012
27
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.6
2012
28
II.3.6 Historique (C, C++, Java)
• II.3.6.c. Java :
• 1995, Sun MicroSystems (rachetée par Oracle)
• O.O. mais Java non OO = C++ non OO = C,
pas de bas niveau
• inventé pour internet, multiples versions,
processeur virtuel = JVM
• source compilé en bytecode, puis interprété
• avantages = indépendance matérielle,
code très petit, bibliothèque énorme
• inconvénients = lenteur (relative, 20x, <2x, temps
réel, militaire), JVM très grosse, lente à démarrer
(pas un problème pour les serveurs)
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.6
II.3.6 Historique (C, C++, Java)
• II.3.6.d. Les éditions :
•
•
•
•
•
SE (Standard)   
EE (Enterprise)
ME (Micro)
Card (cartes à puce)
Google/Androïd : Dalvik
2012
29
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.6
2012
30
II.3.6 Historique (C, C++, Java)
• II.3.6.e. Les versions de SE :
• 1.0 .. 1.4.2 | 1.5 1.6 | 1.7 (open source)
• grosses modifications du langage entre
1.4.2 et 1.5, petites entre 1.6 et 1.7
• JRE = Java Runtime Environment (=JVM,
utilisation seulement) ≠ JDK = Java
Development Kit (aussi développement)
• nombre de classes = 200 (v1) à 3700 (v6)
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.3.7
2012
31
II.3.7 Pourquoi Java ?
• langage adapté à l'apprentissage (plus propre,
moins permissif, signalement d'erreur, graphique,
bibliothèque énorme, les objets d’abord)
• non OO identique à C/C++
(mais C reste indispensable sur certains kits et
pour certaines applications)
• demandé dans les offres d'emploi (standard pour
développements web=JEE et Androïd=Dalvik)
• Java et C ==> se mettre à C++
(3ème langage moins difficile que 2ème)
• Lire le chapitre 2 (pages 4 et 5)
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4
2012
32
II.4 Algorithmes
• II.4.1. Définition
• II.4.2. Exemple : compromis espace/temps
• II.4.3. Exemple de la multiplication
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.1
2012
33
II.4.1 Définition
• méthode systématique pour résoudre un
problème en un temps fini
• différence avec les maths ?
• analogie culinaire : ingrédients, étapes,
solutions multiples
• plusieurs algorithmes pour résoudre le
même problème ==> choix, coût :
performance / mémoire / matériel / lisibilité
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.2
II.4.2 Exemple 1
• Lire le compromis espace / temps :
plus rapide ou moins de mémoire ?
2012
34
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
II.4.3 Exemple 2 : la multiplication
(par un nombre à plusieurs chiffres)
• II.4.3.a. Algorithme classique
• II.4.3.b. Algorithme "à la Russe"
• II.4.3.c. Avantages
• II.4.3.d. Optimisation
• II.4.3.e. Spécification
• II.4.3.f. Traductions
• g, h, i :
’’
2012
35
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
2012
36
II.4.3.a Algorithme classique
« à la française »
45
x 19 1) multiplier successivement le 1er nb
---par chaque chiffre du 2e nb
405
45. 2) additionner les résultats en tenant
---compte des décalages nécessaires
855
• Reste un problème si on ne dispose que d'un
additionneur : comment faire 9 x 45 ?
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
2012
37
II.4.3.b Algorithme « à la russe » 1/2
45|19
|
22|38
11|76
|
5|152
2|304
|
1|608
STOP=>STOP
1) écrire les 2 nbs chacun en
haut d'une colonne
2) diviser successivement le nb
de la colonne de gauche par 2
3) multiplier successivement le nb
de la colonne de droite par 2
4) s'arrêter lorsque 1 apparaît
dans la colonne de gauche
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
2012
38
II.4.3.b Algorithme « à la russe » 2/2
45| 19
22| 38
11| 76
5|152
2|304
1|608
---|--|855
5) rayer dans la colonne de droite
les nbs en face d'un nb pair
de la colonne de gauche
6) additionner les nbs restant
dans la colonne de droite
Commentaires : simple ou compliqué ?
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
II.4.3.c Avantages
• division par 2 =>
décalage d'un bit vers la droite
• multiplication par 2 =>
décalage d'un bit vers la gauche
• test de parité =>
test du bit de poids faible
Électroniquement ?
2012
39
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
II.4.3.d Optimisation
19| 45
9| 90
4|180
2|360
1|720
---|--|855
.
.
.
0) écrire le plus petit nb
dans la colonne de gauche
et le plus grand nb
dans la colonne de droite
2012
40
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
2012
41
II.4.3.e Spécification 1/2
Cette étape de formalisation n'est
pas évidente mais est nécessaire
pour pouvoir ensuite passer à
l'étape de traduction dans un
langage de programmation.
Cela peut donner ça :
Soient A et B les 2 entiers
positifs à multiplier.
[Obtenir leur valeur]
Soit R le résultat.
SI A est impair ALORS
initialiser R à
la valeur de B
SINON
initialiser R à 0
FINSI
TANTQUE A > 1 FAIRE
- diviser A par 2
(sans reste)
- multiplier B par 2
- SI A est impair ALORS
ajouter B à R
FINSI
FINTANTQUE
[Afficher le résultat R]
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
II.4.3.e Spécification 2/2
ou bien, de façon moins verbeuse :
A,B,R : entiers naturels
Lire A
Lire B
SI reste(A/2)=1 ALORS
R <- B
SINON
R <- 0
FINSI
TANTQUE A > 1 FAIRE
A <- A / 2
B <- B * 2
SI reste(A/2)=1 ALORS
R <- R + B
FINSI
FINTANTQUE
Afficher R
2012
42
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
II.4.3.f Traduction en Java
(incomplète)
début du programme {
début de la partie
principale {
int A = récupération du
premier nombre ;
int B = récupération du
deuxième nombre ;
int R;
if ( A > B ) { // échange
R = B;
B = A;
A = R;
} // if
2012
43
if ( A % 2 == 0 )
R = 0;
// liberté du programmeur
else
R = B;
while ( A > 1 ) {
A /= 2;
B += B;
if ( A%2 != 0 )
} // while
R += B;
affichage sous la forme
A * B = R ;
} // fin de la partie
principale
} // fin du programme
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0 – II.4.3
II.4.3.g Traduction en Java
(complète et compilable)
public class Russe {
public static void main(
String[] inutilise ) {
java.util.Scanner clavier = new
java.util.Scanner( System.in );
System.out.print( "A ? " );
int A = clavier.nextInt();
System.out.print( "B ? " );
int B = clavier.nextInt();
int R;
if ( A > B ) { // échange
R = B;
B = A;
A = R;
} // if
if ( A % 2 == 1 )
// plus clair
else
R = 0;
2012
44
R = B;
while ( A > 1 ) {
A = A / 2;
// plus clair
B = B * 2;
// plus clair
if ( A%2 == 1 )// plus clair
R = R + B;
// plus clair
} // while
System.out.println(
A + "*" + B + " = " + R );
} // main(.)
} // Russe
Pour les curieux :
II.4.3.h Traduction en C++
II.4.3.i Traduction en C
ESIEE Paris
© Denis BUREAU
IN101 - Cours 1.0
Conclusion
Lire le poly (Memento de syntaxe Java) :
pages situées avant le chapitre 1
et annexes 6 & 7
Attention !
Beaucoup de nouveaux concepts
dans le prochain cours
2012
45
Téléchargement