0% ont trouvé ce document utile (0 vote)
62 vues18 pages

Cours Syntaxe-Nup

Transféré par

ondongogael137
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
62 vues18 pages

Cours Syntaxe-Nup

Transféré par

ondongogael137
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Syntaxe Java

Info 211a

Présentation de Java
Guillaume Wisniewski
[Link]@[Link]
septembre 2017
Université Paris Sud & LIMSI

Rappel : qu’est-ce qu’un programme ? Rappel : qu’est-ce qu’un programme ?

réponse cynique quelque chose qui contient des bugs


réponse classique instructions pour un ordinateur
meilleure réponse instructions pour un ordinateur compréhensible
par un être humain

1 ⇒ langage de programmation 1

Qu’est-ce que Java ? Java Virtual Machine

Machine virtuelle
• le compilateur Java génère du byte code et non de
• un langage de programmation libre l’assembleur (langage machine)
• développé en 1995 par Sun puis racheté • le byte code est exécuté sur une machine virtuelle : la JVM
par Oracle (2009) • approche adoptée par la plupart des langages récents (.NET,
• syntaxe proche de celle du C et du C++ python, ...)
• aujourd’hui le langage le plus utilisé dans
Intérêt
le monde de l’entreprise
• objectif : multi-plateforme  write once, • programmation de plus au niveau ([Link]. plus de gestion
run everywhere  manuelle de la mémoire)
• indépendance de la plate-forme : windows, linux, mac, web,
téléphone, ...

2 3
Les avantages de Java Les inconvénients

• multi-plateforme
• facilité de programmation (gestion de la mémoire)
• verbeux (beaucoup de lignes pour des choses simples)
• bonnes performances
• peu de souplesse (peut-être considéré comme un avantage)
• beaucoup d’outils pour aider le développement/débugage
• coût d’entrée élevé
• beaucoup de bibliothèques ⇒ couvre tous les besoins courants
• langage universel : tous les informaticiens ont déjà fait du java

4 5

Pourquoi apprendre le java ?

Pour les (futurs) informaticiens


• langage le plus utilisé dans le monde de l’entreprise
Les bases du langage Java
Pour les autres
• langage de haut niveau
• principe de la programmation orientée objet

Disclamer Executive summary

Comment écrire un programme java ?

• La suite est un rappel rapide du cours de programmation


impérative
• programmation impérative = exécution séquentielle
d’instructions
⇒ Faire comme si c’était du C...
• nouveauté = notion d’objets ⇒ dans la partie suivante

7 8
Élément d’un langage informatique Un premier programme (1)

Dans un fichier [Link] (nom & majuscule impératifs) :

1 public class Hello {


2

des primitives : entités/instruction la plus simple qu’un langage 3 public static void main(String[] args) {
permette de décrire ; 4 [Link]("Hello world !");
un moyen de combiner des primitives : pour construire des 5 }
 actions  complexes à partir des primitives ; 6

7 }
un moyen d’abstraction : qui permet de nommer ces
combinaisons et de les manipuler compilation (javac [Link])

compile et crée un fichier [Link]


exécution (java Hello) La JVM recherche dans [Link] la
méthode
public static void main(String[])}
9 10
et l’exécute, si elle n’existe pas : erreur

Un premier programme (2) Un programme plus utile ( ?)

Dans un fichier [Link] (nom impératif) : 1 public class Conv {


2
1 public class Hello {
3 public static void main(String[] a) {
2
4 double tInF = 98.6;
3 public static void main(String[] args) {
5 double tInK = (tInF - 32.0) * (5 / 9) + 273.15;
4 [Link]("Hello world !");
6
5 }
7 [Link]("t. in Kelvin: " + tempInK);
6
8 }
7 }
9

10 }
• seule partie utile : [Link]
• instruction pour afficher une chaine de caractères • convertie une température de degré Fahrenheit en Kelvin
• tout le reste = particularités de java que l’on verra plus tard • même instruction pour afficher
• variables
11 12

Flot d’exécution Comment concevoir un programme ?

Principe
1. décomposer le problème en une suite d’instruction
2.  traduire  cette séquence d’instructions en java
paradigme impératif :
⇒ instructions exécutées de Exemple
manière séquentielle Pour trier un tableau :

• trouver le plus petit élément


• l’échanger avec l’élément en première position
• recommencer avec la partie non trier du tableau

13 14
Les variables (1) Les variables (2)

• variable = nom pour des valeurs


• une variable doit d’abord être déclarée en
Variables Valeurs
spécifiant son type :
1 float maVariable;
• puis définie en lui donnant une valeur :
1 maVariable = 12.0;
1 String planete = "Pluton";
• en une instruction :
planet “pluton”
1 float maVariable = 12.0;
• on peut affecter à une variable soit une
valeur, soit le résultat d’une opération
• remarque importante : convention java
pour nommer les variables : maVariable,
uneAutreVariable, ...
15 16

Les variables (2) Les variables (2)

Variables Valeurs Variables Valeurs

moon “Charon” moon “Charon”


1 String planete = "Pluton";
1 String planete = "Pluton";
2 String moon = "Charon";
2 String moon = "Charon";
planet “pluton” 3 String p = moon; planet “pluton”

17 18

Les variables (2) Type

Variables Valeurs
• un type définie :
• un ensemble de valeurs
moon • un ensemble d’opérations possibles
1 String planete = "Pluton"; “Charon”
• exemple :
2 String moon = "Charon";
• int i : i peut prendre toutes les valeurs de N + définition de
3 String p = moon;
l’addition, de la soustraction, ...
4 moon = "Nix"; planet “pluton”
• String s : s est une chaı̂ne de caractères + définition de
l’addition (concaténation) et interdiction de la multiplication :

p • principaux types java : int, double, char, boolean


“nix”

19 20
Types : exemples Les tableaux

1 String s1 = "bonjour";
2 String s2 = "tout le monde"; • ensemble de valeurs de taille fixe + ordonné
3 • déclaration :
4 String s3 = s1 + " " + s2; 1 int[] t2;
5 // s3 = "bonjour tout le monde" 2 String[] t3;
6
• création :
7 s3 = s1 - s2;
1 t = new int[5]; // t est un tableau de 5 int
8 // erreur de compilation : opération interdite
2 int[] ti = {1, n, 4};
9

10 s3 = s1 + 1; • la taille doit être précisée à la création + non modifiable


11 // ok : concaténation • les tableaux sont indexés à partir de 0 : t[0] + t[1];
12 • possibilité d’accéder à la taille d’un tableau : [Link]
13 s3 = s1 - 1;
14 // interdit
21 22

Note(s) pour plus tard Portée d’une variable

• portée = partie du code dans laquelle la variable existe


• en java : portée = bloc :
• création (réservation + initialisation de la mémoire) au début
du bloc
• destruction (libération de la mémoire) à la fin du bloc
• tout est fait automatiquement
• les tableaux ne sont plus utilisés : on préfère les collections
dynamiques ArrayList
• java fournit plein de méthodes de manipulation de tableaux
(cf. la classe Arrays)
23 24

Exemples Exemples

1 int a = 10;
2 for (int i = 0; i < 10; i++) {
1 int a = 10; 3 int b = 12;
2 for (int i = 0; i < 10; i++) { 4 if (b % i == 0) {
3 int b = 12; 5 [Link]("ok");
4 if (b % i == 0) { 6 int c = b % i;
5 [Link]("ok"); 7 [Link](c);
6 int c = b % i; 8 }
7 [Link](c); 9 }
8 }
Portée :
9 }
• a : 1–10
• b : 2–9
• c : 5–8
25 26
• i : 2–9
Structures de contrôle

• programme informatique : exécution séquentielle d’instructions


• deux manière d’altérer l’exécution :

Sélection Répétition

Structure de contrôle

Exécuter une série d’instruction


Répéter l’exécution d’une série
plutôt qu’une autre
d’instructions
27

Structure conditionnelle (1/2) Structure conditionnelle (2/2) i

L’instruction if teste une condition booléenne, si le résultat est


1 public class TestIf {
vrai, le bloc d’instructions suivant la condition est exécuté, sinon il
2
ne l’est pas :
3 public static void main (String[] args) {
1 if (condition) { 4 int a = 2;
2 // bloc 5 int b = 3;
6 int max = 0;
3 }
7

Optionnellement, le premier bloc sera suivit du mot clé else et 8 if (a < b) {


d’un second bloc exécuté seulement si la condition est fausse : 9 max = b ;
10 } else {
1 if (condition) { 11 if (a == b) {
2 // bloc 1 12 [Link](a + " == " + b);
3 } else { 13 [Link](0);
4 // bloc 2 14 }
5 }
28 29

Structure conditionnelle (2/2) ii Structure de répétition for

L’instruction for exécute une instruction init puis répète les


instructions du bloc suivant l’instruction for tant que sa condition
est vraie, à la fin de chaque répétition elle exécute son instruction
15 max = a; incr :
16 }
17 [Link]("maximum = " + max) ; 1 for (init; condition; incr) {
18 } 2 // bloc
19 } 3 }

Par exemple :
1 public class TestFor {
2

3 public static void main (String[] args) {


4 for (int i = 0; i < 3; i++) {
5 [Link]("i vaut " + i);
30 6 } 31
7 }
8

9 }
Exemple plus réaliste Le code

L’exemple 1 int[] temp = {20, 21, 22, 25, 26, 25, 21};
Étant donné un ensemble/une population x = (xi )ni=1 , calculez :
2

3 // calcul de la moyenne
P
• sa moyenne : x̄ = n1 × ni=1 xi 4 double acc = 0.0;
q P 5 for (int i = 0; i < [Link]; i++) {
• sa variance : σx = N1 × ni=1 (xi − x̄)2 6 acc = acc + temp[i];
7 }
Le contexte 8 double moyenne = acc / [Link];
9
• population (statistique) = ensemble (mathématique) = 10 // calcul de la déviation standard
tableau (informatique) 11 acc = 0.0;
• exemple : température de le semaine dernière : 12 for (int i = 0; i < [Link]; i++) {
lundi mardi mercredi jeudi vendredi samedi dimanche 13 acc = acc + [Link](temp[i] - moyenne, 2);
20 21 22 25 26 25 21 14 }
15 double stddev = [Link](1.0 / [Link] * acc;);
16
32 33
17 [Link]("moyenne = " + moyenne + " stddev = " + stddev);

Parcours de tableaux Retour sur l’exemple précédent

Comme en C 1 // dans la méthode Main d'une classe [Link]


1 public class TabFor { 2 int[] temp = {20, 21, 22, 25, 26, 25, 21};
2 public static void main(String[] a) { 3

3 int[] c = {1, 3, 5, 7}; 4 // calcul de la moyenne


4 for (int index = 0; index < [Link]; index++) { 5 double acc = 0.0;
5 [Link](c[index]);
6 for (int t : temp) {
6 }
7 acc = acc + t;
7 }
8 } 8 }
9 double moyenne = acc / [Link];
Structure for each 10

11 // calcul de la déviation standard


1 public class TabForEach {
2 public static void main(String[] a) { 12 acc = 0.0;
3 int[] t = {1, 3, 5, 7}; 13 for (int t : temp) {
4 for (int value : t) { 14 acc = acc + [Link](t - moyenne, 2);
34 35
5 [Link](value); 15 }
6 } 16 acc = 1.0 / [Link] * acc;
7 }
17 double stddev = [Link](acc);
8 } Les fonctions
18

19 [Link]("moyenne = " + moyenne + " stddev = " + stdde

• bloc d’instructions avec un


nom
Les fonctions • interruption du flot
d’instructions
• l’exécution continue au
début de la fonction
• à la fin : retour au point
d’appel

36
Techniquement En java

• il n’y a pas de fonctions en Java


• pour les besoins des exercices, on utilisera des méthodes
statiques comme des fonctions
• une fonction est caractérisée par :
1. son nom • c’est moralement la même chose
2. ses paramètres • définition :
3. son type de retour 1 public static int add(int a, int b) {
• paramètre : 2 public static void test() {
1. au sens mathématique 3 ...
2. variables locales (à la fonction)
• appel :
3. initialisée à une valeur fixée lors de l’appel
1 [Link](2, 3);
où MaClasse est le nom de la classe dans laquelle est définie
la méthode.

37 38

Exemple : maximum de deux nombres i Exemple : maximum de deux nombres ii

1 public class Max {


2

3 public static int max(int a, int b) { 13

4 14 for (int i = 0; i < 5; i++) {


5 if (a < b) { 15 [Link](max(i, i + 1);
6 return b; 16 }
7 } else { 17 }
8 return a;
9 }
10 }
11

12 public static void main (String[] args) {

39 40

Les 3 facettes d’une méthode En image...

1. entête : déclaration de la méthode = nom + type de retour +


type des paramètres
2. définition : entête + corps de la méthode
3. appel : l’endroit où l’on utilise la méthode ; nom de la
méthode + arguments à lui passer

41 42
Exemple no 2 : maximum d’un tableau i Exemple no 2 : maximum d’un tableau ii

1 public class MaxTab {


2
13 }
14
3 public static int max(int[] tab) {
4
15 public static void main(String[] args) {
5 int m = tab[0]; 16 int[] t = {-3, 5, 2, 7, 1};
6 for (int el : tab) { 17 [Link]([Link](t));
7 if (el > m) { 18 }
19
8 m = el;
9 } 20 }
10 }
11

12 return m;

43 44

Passage des paramètres

En général
• passage par valeur : copie locale de la valeur, impossible de
modifier le paramètre
• passage par référence : les modifications des paramètres sont À quoi ça sert ?
visibles dans la méthode  mère  qui a appelé la méthode

En java

• type simple (int, float, ...) : passage par valeur


• type complexe (tableaux, objets) : passage par référence

45 46

Intérêt no 1 : factorisation Intérêt no 2 : abstraction

• améliorer la lisibilité du code


• pas besoin d’écrire plusieurs • plus facile/rapide de
fois la même chose comprendre le nom d’une
• modularisation du code fonction que le code
• programme complexe = correspondant
 plein  de fonctions
• abstraire = cacher les détails
simples de fonctionnement
• ré-utilisation du code • dire ce que l’on fait et pas
comment on le fait

47 48
Exemple : intérêt de l’abstraction Et comme ça ?

Que fait le code suivant ?


Que fait le code suivant ?

1 public static double squareRootApproximation(n) {


2 double r = n / 2;
1 r = n / 2; 3 while (abs( r - (n/r) ) > t) {
2 while (abs( r - (n / r) ) > t) { 4 r = 0.5 * (r + (n/r));
3 r = 0.5 * (r + (n / r)); 5 }
4 } 6 return r;
5 [Link]("r = " + r); 7 }
8 [Link]("r = " + squareRootApproximation(r));

49 50

Conclusion (locale) À plus long terme...

Ce que l’on a vu
Lorsque l’on écrit :
Deux rôles :
1 double res = 3 * 3 * 3;
1. programmeur concepteur : concoit une fonction → doit
ou connaitre parfaitement le fonctionnement de celle-ci et
garantir l’exactitude de celle-ci
1 double res = x * x * x;
2. programmeur utilisateur : utilise une fonction → n’a besoin
notre programme est capable de calculer des cubes mais notre que de connaitre l’entête de la fonction
langage n’a pas accès au concept de  élever un nombre à la
puissance 3 . Programmer c’est communiquer !
• définition d’une API (Application Programming Interface) = liste des services
La notion de fonction permet de construire des abstractions en
(fonctions) fournis par un concepteur à un utilisateur
nommant des motifs (c.-à-d. des séquences d’instructions)fréquents et de
manipuler directement ces abstractions. • programmation orientée objet = faciliter la communication
entre concepteurs et utliisateurs
51 52

Définition

une classe est un type de données abstrait

Les objets

53
Définition Définition

une classe est un type de données abstrait une classe est un type de données abstrait

• c’est un type • c’est un type


• un ensemble de valeurs

53 53

Définition Définition

une classe est un type de données abstrait une classe est un type de données abstrait

• c’est un type • c’est un type


• un ensemble de valeurs • un ensemble de valeurs
• un ensemble d’opérations • un ensemble d’opérations
• abstrait

53 53

Définition Plus précisément

Voici une (représentation d’une) classe :


une classe est un type de données abstrait
MP3Song
play()
length()
compositor()
• c’est un type
...
• un ensemble de valeurs
• un ensemble d’opérations
En pratique :
• abstrait
• un nom
• on ne sait pas comment il
fonctionne • interface = ensemble des opérations autorisées
• domaine = ?
• encapsulation
• domaine  suffisant  pour accomplir les tâches
53
• sujet d’un cours futur 54
Comment utiliser une classe ? Bilan : classes et objets (1)

• une classe n’est pas utilisable directement ⇒ abstrait classe


• création d’une instance particulière de la classe = objet objet/instance

1 MP3Song mySong = new MP3Song("le_tube_de_la_rentrée.mp3");

• l’instance/objet mySong = une chanson particulière (enfin un


fichier !)
• la classe MP3Song = modèle générique de toutes les chansons
possibles

55 56

Bilan : classes et objets (2) Création d’un objet

1 MP3Song mySong = new MP3Song("le_tube_de_la_rentrée.mp3");

classe objet/instance
• 2 étapes :
1. déclaration MP3Song mySong
2. définition new MP3Song(...)
• comme pour les variables (presque)
• normal ! une classe est un type
• mySong est une référence
• initialisation par un constructeur et ses paramètres
• constructeur = même nom que la classe

57 58

Comment utiliser un objet ? Exemple : extraction de noms

La syntaxe magique : Document :

1 res = [Link](parametre); Vainqueur étape no 3 : Tyler Farrar


Vainquer étape no 4 : Cadel Evans
Vainqueur étape no 5 : Mark Cavendish
• methode = une des méthodes de l’interface
• envoie un message à maReference
• action sur maReference Objectif : extraire un tableau avec tous les noms propres en
majuscules :
• le type de retour et les paramètres sont spécifiés dans
l’interface 1 int[] res = {"FARRAR", "EVANS", "CAVENDISH"};

59 60
Remarque préliminaire : chaine de caractères
1 public class StringExtract {
2

3 public static void main(String[] s) {


4

5 String doc = "Vainqueur étape 3 : Tyler Farrar\nVainquer


6

7 // cf. cours prochain pour ne pas


8 //avoir à fixer la taille
9 String[] res = new String[3];
10
• les chaines de caractères (String) sont des objets
 normaux ...
11 int i = 0;
12 for (String line : [Link]("\n")) {
• ... mais très utiles
13 String[] elements = [Link](" ");
• l’utilisation de new est facultative :
14

1 String s1 = new String("Bonjour");


2 String s2 = "Bonjour"; 61 62

Attention
15 int pos = [Link] - 1;
16 String winnerLastName = elements[pos];
17

18 res[i] = [Link]();
19 i += 1;
20 }
21

22 for (String name : res) {


23 [Link](name);
24 }
25 }
26 }
res = [Link](a, b, 12)
maMethode n’ est pas une fonction

63 64

Méthode 6= fonction Parenthèse importante

Tester l’égalité de deux variables


• types simples : ==
• types complexes : [Link](secondReference)
• fonction = transfert du flot
d’instruction En particulier
• méthode = modifie un objet Le code suivant :

• toujours liée à une 1 String nom = "Elli";


référence 2 if (nom == "Elli") {
3 [Link]("victoire");
4 }

a un résultat indéterminé.

65 66
Comment trouver la classe qui nous intéresse ? Utiliser une classe existante

• google + nom d’une classe ⇒ javadoc de la classe


• google + javadoc ⇒ ensemble des classes disponibles
• bibliothèque + javadoc ⇒ ensemble des classes d’une
1. java 7 propose 3 977 classes
bibliothèque
2. une infinité de bibliothèques
⇒ il n’y a qu’à chercher
(1re partie des TP)
3. on peut créer ses propres
classes
2e partie des TP

67 68

Question préliminaire

Mise en forme du code


Combien de lignes de code un
programmeur produit en
moyenne par jour ?

69

And the winner is... Conséquence

Les meilleurs programmeurs


écrivent en moyenne :

10
lignes de code par jour

Le code source est


70
fait pour être lu 71
#include <math.h>
#include <sys/time.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
double L ,o ,P
,_=dt,T,Z,D=1,d,
s[999],E,h= 8,I,
J,K,w[999],M,m,O
,n[999],j=33e-3,i=
1E3,r,t, u,v ,W,S=
74.5,l=221,X=7.26,
a,B,A=32.2,c, F,H;
int N,q, C, y,p,U;

Le code source est


Window z; char f[52]
; GC k; main(){ Display*e=
XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))

fait pour être lu ; scanf(``%lf%lf%lf'',y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,


0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
*D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
XEvent z; XNextEvent(e ,&z);
++*((N=XLookupKeysym
(&[Link],0))-IT?
N-LT? UP-N?& E:&
J:& u: &h); --*(
DN -N? N-DT ?N==
RT?&u: & W:&h:&J
72 ); } m=15*F/l; 73
c+=(I=M/ l,l*H
+I*M+a*X)*_; H
=A*r+v*X-F*l+(
E=.1+X*4.9/l,t
=T*m/32-I*T/24

Conséquence (encore...) )/S; K=F*M+(


h* 1e4/l-(T+
E*5*T*E)/3e2
)/S-X*d-B*A;
a=2.63 /l*d;
X+=( d*l-T/S
*(.19*E +a
*.64+J/1e3
)-M* v +A*
Z)*_; l +=
• convention de code pour K *_; W=d;
sprintf(f,
garantir la lisibilité ``%5d %3d''
``%7d'',p =l
• pas vérifiée par le /1.7,(C=9E3+
O*57.3)%0550,(int)i); d+=T*(.45-14/l*
compilateur... X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
*I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
• ... mais par tous les autres 179*v)/2312; select(p=0,0,0,0,&G); v-=(
W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
programmeurs... )/107e2)*_; D=cos(o); E=sin(o); } }

• ... et vos professeurs

[Link]
[Link]
74
ou : google + java + code + conventions 75

Convention de code Java (1) Convention de code Java (2)

• ouverture des accolades sur la même ligne (précédé d’un


espace)
• fermeture des accolades sur une nouvelle ligne
• le code doit toujours être indenté
• nom de variable : monNomDeVariable • ouverture d’une accolade : tabulation supplémentaire
• nom de fonction : monNomDeFonction • fermeture d’une accolade : une tabulation de moins

• nom de classe : MonNomDeClasse • les signes binaires (+, = , ...) sont précédés et suivis d’un
espace
• les signes unaires (++) sont suivis d’un espace, mais pas
d’espace avant
• pas d’espaces autour des parenthèses

76 77
Exceptions

• en Java toutes les erreurs lors du déroulement du programme


donne lieu à des exceptions qui arrête le programme
• informations contenues dans une exception :
Gestion des erreurs en Java • nom de l’erreur (' cause) ;
• ligne où l’erreur s’est produite ;
• pile d’appels = liste des méthodes successives qui ont été
appelées.
• informations déterminées par la jvm ⇒ capacité
d’introspection

78

Exemple

~/Desktop > java Test


Exception in thread "main" [Link]: Objets et collections
/ by zero
at [Link]([Link])
at [Link]([Link])

79

Notre problème Outils classique : tableaux

• inconvénient :
• il faut connaitre la taille à la création
• impossible d’ajouter ou de supprimer un élément
• peu de méthodes de manipulation
• remarque : représentation directement liée à la manière dont
On veut représenter une collection d’objets les données sont stockées en mémoire

80 81
Changement de point de vue Nouvelle vision

• important = ce que fait la


structure de données =
interface
• important 6= = comment
elle le fait

⇒ association entre un indice et un objet = liste


la classe ArrayList pour manipuler une association de ce type

82 83

La classe ArrayList Particularité : les classes génériques

• les ArrayList permettent de stocker une collection d’objets


homogènes (= de même type)
• comme un tableau, mais dynamique
• le type des objets est un paramètre de la classe
• syntaxe particulière ⇒ classe générique
cf. javadoc
• ArrayList<E> ⇒ E est le nom d’une classe (pas d’un type !)
• E est utilisé pour définir la signature des méthodes de la
classe :

1 boolean add(E e);


2 E get(int index);

84 85

Exemple Ce qu’il faut retenir

1 ArrayList<MP3Song> playlist = new ArrayList<MP3Song>();


2

3 [Link](new MP3Song("chanson1.mp3")); • possibilité


4 // maChanson est une référence de type MP3Song d’ajouter/supprimer un
5 [Link](maChanson); élément
6 // ... • accéder au ie élément
7 • parcourir tous les éléments
8 for (MP3Song song : playlist) { • méthode de manipulation
9 [Link](song); (tester la présence d’un
10 } élément, nombre d’éléments,
11
...)
12 if ([Link](taChanson)) {
13 [Link]("on aime la m^
eme chanson !");
14 }
86 87
15

16 [Link](taChanson);
Un autre objet : les HashMap Un peu de vocabulaire

• les listes : ⇒ à un entier (indice) on associe un objet

Une table de hachage


• = hashmap
• = dictionnaire
• généralisation : à un objet, on associe un objet • = tableau associatif
associe à une clé (key) une valeur
(value).

88 89

Exemple

1 // création de l'objet
2 HashMap<String, String> annuaire = new HashMap<String, Strin
3

4 // association d'un tél à une personne


5 [Link]("Guillaume", "06-...");
javadoc de hashmap 6 [Link]("Elli", "07-...");
7 // retrouver le tél. associé à un nom
8 String tel = [Link]("Elli")
9 // l'opération inverse n'est pas possible
10

11 // parcourir toutes les clés


12 for (String key : [Link]()) {
13 [Link](key)
14 }
90 91

Remarque

Pour utiliser HashMap et ArrayList, il


faut ajouter :
• import [Link];
• import [Link];
au début du fichier (cf. cours sur les
packages)

92

Vous aimerez peut-être aussi