bases de la programmation java - maurise-software.e...

37
1 Bases de la programmation Java Introduction Bases de la programmation Java Introduction 2 Plan 1 Informations utiles 2 Langages de haut niveau 3 Présentation du langage Java 4 Syntaxe de base 5 Un langage Objets / Valeurs 6 Les tableaux en Java

Upload: others

Post on 13-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

1

Bases de la programmationJava

Introduction

Bases de la programmation Java Introduction

2

Plan1 Informations utiles2 Langages de haut niveau3 Présentation du langage Java4 Syntaxe de base5 Un langage Objets / Valeurs6 Les tableaux en Java

Page 2: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

2

Bases de la programmation Java Introduction

3

1. INFORMATIONS UTILESEnseignement

l Cours →→→→ 9 séances de 2 heuresl Travaux dirigés →→→→ 11 séances de 2 heuresl Projet →→→→ à faire en groupe

Enseignant (pour le cours)l Yann Viémontl Bt. Descartes — Bureau 304-a — Poste 54046l Laboratoire PRiSM — CNRS UMR 8144l Http://www.prism.uvsq.fr/~viemontl GSM : 06 19 14 32 57 (pour les cas d ’urgence)

Bases de la programmation Java Introduction

4

Programme de l’ UE7-InfoBases de la programmation Java

l Syntaxe de base (rappels)l Tableaux complexes en Java

La programmation objet en Javal Notions d ’objets (rappels)l Interfaces et polymorphismel Héritagel Classes abstraites

Structures de données abstraites et implémentations Javal Listesl Pilesl Files

Page 3: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

3

Bases de la programmation Java Introduction

5

2. LANGAGES DE HAUT NIVEAU

Avantagesl Compréhensible par l’homme (non binaire)l Indépendant des matérielsl Manipulation des données complexes (entiers, réels,

tableaux, objets : dessins, livres, …)l Manipulation des expressions complexes (A*B)/Cl Mécanismes élaborés d’enchaînement des instructionsl Organisation des programmes (modularité, visibilité,

protection, …)Nécessite un traducteur (compilateur / interpréteur)

Bases de la programmation Java Introduction

6

CompilateurLe code source est indépendant de lamachineLa compilation est faite une fois pour toutesLe code objet est du binaire dépendant ducodage et des instructions de la machinecibleLe chargeur adapte le code objet auxadresses mémoires réellement utilisées pourchaque exécution demandéeL’objet devient une suite de 0 et de 1 enmémoire

Codesource(fichier)

Objet(fichier)

Machine cibleObjet

(mémoire)

Compilateur

Chargeur

Page 4: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

4

Bases de la programmation Java Introduction

7

InterpréteurL’interpréteur est lui-même unprogramme source qui a étécompilé puis chargé sur lamachineLe programme a interprétercorrespond aux données del’interpréteur qui s’exécuteL’exécution est plus lente car latraduction est faite à chaquelancement du programme

Codesource(fichier)

Machine cible

Interpréteur(objet enmémoire)

Source(données en

mémoire)

Bases de la programmation Java Introduction

8

Cas des boucles

Chaque instruction duprogramme source est traduite(interprétée) au fur et à mesureEn cas d’itération (boucle), lamême instruction estréinterprétée à chaque passageLa pénalité de performance estimportante

Exécution

Boucle

Interprétation

Page 5: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

5

Bases de la programmation Java Introduction

9

Et le langage Java ?Le source Java est « compilé »en code-octet (byte code)correspondant aux instructions d ’une machine virtuelleAAAA La machine virtuelle est un programme source compilépour chaque type de couple

(machine physique + système d’exploitation)La machine virtuelle fournit un environnement de programmationstandard

l Gestion de la mémoire (ramasse-miette)l Gestion des entrées / sorties (disque, écran, clavier, …)l Interface avec le système d’exploitation

Bases de la programmation Java Introduction

10

Interprétation optimiséeCode

source(fichier)

Code-octet

(fichier)

Compilateur Machine cible

Machine virtuelle(objet enmémoire)Code-octet(données en

mémoire)

La pénalité de performance est très fortement réduite

toto.java

toto.class

javac

java toto.class

Page 6: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

6

Bases de la programmation Java Introduction

11

Beaucoup plus qu’un langageJava est un langage orienté-objet récemment introduit parSUN et rendu disponible dans le domaine public.Java est un :

l Langage complet à tout fairel Environnement de programmation très développé

comprenant de nombreuses bibliothèques standardsl Véritable système d ’objets distribués

Java permet d’ :l Interagir simplement avec le Webl Accéder et fournir des services simplement au travers

du réseau

Bases de la programmation Java Introduction

12

HistoriqueJava a commencé avec le projet Green en 1991

l Langage Oak est destiné au logiciel intégré auxappareils électroménagers et audio / vidéo

Adaptation à la technologie Webl Intégration à un navigateur Web (HotJava 1994)l Création des appletsl Extension du langage renommé Java (version 1)l Définition du « byte code » en 1995l Premier JDK (atelier de développement) en 1996

Nouvelle plate-forme Java2l Environnement complet de développementl Déploiement d’applications distribuéesl Services Web

Page 7: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

7

Bases de la programmation Java Introduction

13

Logiciel pour appareillage électronique

Machineà laver

Magnétoscope

Micro-onde

Machinede

développement

Codesource

Objet 1

Objet 2

Objet 3

Problèmes :l Plusieurs versions de source

selon les systèmesd ’exploitation

l Compilation spécifique pourchaque plate-forme

l Gestion des versionsl Coûts de développement

prohibitifs

Bases de la programmation Java Introduction

14

Solution Oak

Machineà laver

Magnétoscope

Micro-onde

Machinede

développement

Codesource

Machinevirtuelle

Machinevirtuelle

Machinevirtuelle

Objet

Objet

Objet

Page 8: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

8

Bases de la programmation Java Introduction

15

Transposition au Web

Web

Posteclient

Posteserveur

ApplicationJava

téléchargeable

Browser + JVMApplet

Chargement dynamique d’une applicationChargement dynamique d’une application

Bases de la programmation Java Introduction

16

3. PRÉSENTATION DU LANGAGE

Points forts de Java :l Simplicitél Orientation objetsl Grande sécuritél Portabilitél Performancesl Parallélisme

Page 9: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

9

Bases de la programmation Java Introduction

17

Simplicité

Le langage Java :l Reprend la syntaxe de base de Cl Possède une grande cohérence de conceptionl Offre un nombre limité de constructions non

redondantesl Rend la gestion de la mémoire transparentel Ne demande aucun précompilateur

Bases de la programmation Java Introduction

18

Orientation objetsJava reprend le meilleur des concepts objets les plus simples

l Langage de programmation inspiré d’Objective C et deC++

l La définition d’interfaces est supportée en natifl Tout est une classe, un objet, une variable d’instance

ou une méthodel Le modèle soujascent est un modèle objet / valeurl L ’encapsulation est complètement contrôlable par le

programmeurl Les librairies systèmes sont des classes qui rendent

le langage extensible à l’infini

Page 10: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

10

Bases de la programmation Java Introduction

19

SécuritéLa grande majorité des erreurs de programmation courantessont décelées par l ’interpréteur

l Java est fortement typél Les indices de tableau ne peuvent déborderl Pas de calcul d ’adressel Toutes les variables sont initialisées

La machine virtuelle contrôle les actions de l’applicationl Modèle Bac-A-Sable (Sand box)l Permissions définies dans un fichier

Bases de la programmation Java Introduction

20

Portabilité

Java comporte une spécification très stricte de la JVMl Java est interprétél Le code-octet est indépendant de la plate-formel Pas de comportement spécifique à une implémentationl L ’API est constituée de librairies standards extensives

Page 11: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

11

Bases de la programmation Java Introduction

21

PerformanceGrâce au code-octet, l’interpréteur ne conduit qu’à une faibleperte de performanceDe plus on dispose maintenant de :

l Compilateurs « juste-à-temps » (JIT : just in time)l Compilateurs natifs

La gestion de l ’interface homme/machine est fortementoptimisée dans les bibliothèques de l’APILes JVM disponibles savent utiliser les bibliothèquesperformantes pour le graphisme, l’audio, la vidéo

l Open GLl MPEG-4

Bases de la programmation Java Introduction

22

4. SYNTAXE DE BASE (rappels)La syntaxe de base comprend :

l Les expressions– Types de base– Constantes– Variables– Opérateurs

l Les instructions– Instructions simples (déclarations, affectations, …)– Instructions conditionnelles– Instructions itératives

l Les tableauxl Les méthodes

Page 12: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

12

Bases de la programmation Java Introduction

23

Types de baseJava est un langage fortement typé :

toute donnée manipulée est typée et ne peut échapper àson type que par conversion implicite ou explicite.

Conversions implicites :l Augmentation de la précision (p.e. int --> long)l En maths les entiers sont des réels (p.e. int --> float)l Les expressions sont calculées dans le type le plus général

de ses composants

Bases de la programmation Java Introduction

24

Types numériquesEntiersl byte (complément à deux sur 8 bits)l short (complément à deux sur 16 bits)l int (complément à deux sur 32 bits)l long (complément à deux sur 64 bits)

Réels (mantisse + exposant)l float (standard IEEE 754 sur 32 bits)l double (standard IEEE 754 sur 64 bits)

Page 13: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

13

Bases de la programmation Java Introduction

25

Types non numériquesBooléens

l boolean (true ou false)Caractères

l char (codage Unicode sur 16 bits)l byte (peut être utilisé pour stocker de l'ascii)

l String (en fait une classe prédéfinie mais munie d'une syntaxe spéciale)

Bases de la programmation Java Introduction

26

Constantesl byte, short ou int en décimal, octal ou hexadécimal :

– 0, 104, -1098, 0777, 0xAFl long (idem avec un "l" ou un "L" à la fin)

– 0L, -47652913476L, 0x3FFFFFFFFFFFLl double en décimal ou en scientifique

– 35.99, -0.0007, 2., 1.628E6, -0.7803E-3l simple (idem avec un "f" ou un "F" à la fin)

– 3.14159Fl char

– 'c', '\t', '\u0x61'('a')l boolean

– true ou false

Page 14: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

14

Bases de la programmation Java Introduction

27

VariablesUne variable est une donnée manipulée par son nom (identificateur)

i, j, x, var1, delta, périmêtre,primeDeTransport, DENSITÉ_DU_PLOMB

l Les variables sont déclaréeint i, j ;double x ;

l Affectéei = 12 ;j = 3*i + delta ;

l Initialiséeint i = 12 ;final float DENSITÉ_DU_PLOMB = 11.35F ;

Bases de la programmation Java Introduction

28

Expressions numériquesint i, j ; float a, b ; double x, y ;l Expressions entières :

long m = 3 * i * (j + 6) ;int k1 = (int) m % 1000 ;int k2 = (int) (m % 1000) ;long p = (long) c + m / -27 ;

l Expressions réelles :double z = 3.53 * i + (a - b) / x ;float c = (float) (-2*i*y + 4.54749E8*a) ;double s = java.lang.Math (c) ;

Page 15: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

15

Bases de la programmation Java Introduction

29

Expressions booléennesl Comparaisons numériques

== != < > <= >=l Comparaison de référence d'objets

== != instanceofl Expressions logiques (avec simplification)

&& || !l Expressions logiques (sans simplification)

& | ~Exemples :

((a >= 1E10) || ((b != 0d) && (a/b > 0.2)))(monObjet == null) || !(monObjet instanceof MaClasse)(--i > 0) & (--j > 0) // dangereux !

Bases de la programmation Java Introduction

30

Expressions binairesLes expressions binaires permettent de manipuler des valeursentières comme des chaînes de bits en effectuant

l Décalages : << > >>>l Masquages : & | ^ ~

Exemple :final int VU = 1 ;final int PRIS = 1 << 1 ;int état = … ;boolean pasVuPasPris = (état & (VU | PRIS)) == 0 ;

Page 16: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

16

Bases de la programmation Java Introduction

31

Expressions chaînes de caractères

Bien que le type String soit en fait une classe, il est muni d'unesyntaxe particulière

l Constante chaîneString s1 = "exemple de conca" ;

l Opération de concaténationString s2 = s1 + "ténation" ;

Bases de la programmation Java Introduction

32

AffectationsL'affectation permet d'initialiser et de modifier des variables

int i = 12 ;périmètre = 2 * PI * rayon ;

l On peut utiliser des raccourcis : (var1 op= var2) estéquivalent à (var1 = var1 op var2) pour += -= *=/= %= &= |= ^= <<= >>= >>>=

i *= 3 ; // comme i = 3*i ;l Une affectation est une expression qui vaut sa partie droite

i = j = k = 0 ; // comme i = (j = (k = 0))l Les opérateurs d'incrémentation / décrémentation ++ --

modifient directement la valeur d'une variable entièrei++ ; // comme i += 1 ; ou encore i = i + 1 ;(i-- > 0) & (++j < max)

Page 17: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

17

Bases de la programmation Java Introduction

33

Expression conditionnelle

Prend une valeur parmi deux selon une conditionl Pour les habitués de C et C++l Peu lisible — sauf dans les cas les plus simplesl Syntaxe

expr_bool ? expr_vrai : expr_fauxExemple :

int maxAB = (a>b) ? a : b ;

Bases de la programmation Java Introduction

34

Résumé des opérateursArithmétique : + - * / %Comparaison : == != < > <= >= instanceofLogique booléenne : && || !Décalage : << >> >>>Logique binaire : & | ^ ~Affectation : = += -= *= /= %= &= |= ^= <<=

>>= >>>=Incrémentation : ++ --Conditionnel : ?:Autre : [] . () new (type)

Page 18: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

18

Bases de la programmation Java Introduction

35

PrécédencesOpérateurs post-fixés [] . (params) expr++ expr--Opérateurs unaires ++expr --expr +expr -expr ~ !Création ou conversion new (type)exprMultiplicatifs * / %Aditifs + -Décalage << >> >>>Comparaison < > <= >= instanceofEgalité == !=ET binaire &OU exclusif binaire ^OU inclusif binaire |ET logique &&OU logique ||Conditionnel ? :Affectation = += -= *= /= %= &= ^= |= <<=

>>= >>>=

Bases de la programmation Java Introduction

36

ParenthésageUn opérande peut être remplacé par une expression

l De même typel Entre parenthèses

Les règles de précédences induisent un parenthésage impliciteex1 = a * b + c / d ; // = (a * b) + (c / d)ex2 = a > b && cond || a + c == 12 ; // = (a>b) && (cond || ((a+c) == 12))

Les opérateurs de même précédence sont évalués de gauche à droiteex3 = a / b * c ; // = (a / b) * c ≠≠≠≠ a / (b * c)

Les affectations sont évaluées de droite à gauche

Page 19: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

19

Bases de la programmation Java Introduction

37

InstructionsUne instruction est une unité d'exécution du langage

l Elle se termine par un ;l Certaines expressions forment des instructions valides

– Affectation– Incrémentation / décrémentation– Appel de méthode– Création dynamique d'objet

l Une déclaration de variable est une instructionl Les instructions sont normalement exécutées en séquencel Les instructions de contrôle permettent de modifier l'ordre

d'exécutionl Les instructions peuvent être regroupées

Bases de la programmation Java Introduction

38

Organisation en blocsPlusieurs instructions peuvent être regroupées en bloc

l Les blocs sont délimités par { … }l Un bloc est toujours admis à la place d'une instructionl On obtient une structure de blocs imbriquésl Cette structure définit des règles de visibilité

{ double droit = Math.PI / 2. ; angle += droit ; float cos = (float) Math.sin (angle) ; …}

Page 20: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

20

Bases de la programmation Java Introduction

39

Portée des variablesUne variable n'est pas définie hors du bloc où elle est déclaréeUn nom de variable peut être réutilisé dans une déclaration dans unbloc imbriqué

l Une nouvelle variable indépendante est créel Cette variable masque la précédente (externe)

{ int x = 14 ;int y = 0 ;{ int x = 10 ;y++ ; // = 1x += y ; // = 11

}y++ ; // = 2x++ ; // = 15 et non 12…

Bases de la programmation Java Introduction

40

Instructions de contrôle

l Tests– Condition– Alternative– Aiguillage

l Boucles– Pré-condition– Post-condition– Itérateur

l Exceptions– Déclenchement– Capture

l Branchements– Appel– Retour– Rupture

L'ordre d'exécution du programme est contrôlé par

Page 21: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

21

Bases de la programmation Java Introduction

41

Instructions conditionnellesCondition simple : if (condition) instruction

max = a ;if (a < b) max = b ;

Alternative : if (condition) instruction else instructionif (a > b) max = a ;else max = b ;

Bases de la programmation Java Introduction

42

Aiguillages

switch (var) {case val1 : instructionscase val2 : instructionscase val3 : …default : instructions}

static final int NORD = 0 ;static final int EST = 1 ;static final int SUD = 2 ;static final int OUEST = 3 ;…switch (orientation) { case NORD : y++ ; break ; case EST : x++ ; break ; case SUD : y-- ; break ; case OUEST : x-- ; break ; }

Page 22: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

22

Bases de la programmation Java Introduction

43

Enchaînement des voiesswitch (mois) { case 2 : if (bissextile (année)) nbJours = 29 ; else nbJours = 28 ; break ; case 4 : case 6 : case 9 : case 11 : nbJours = 30 ; break ; default : nbJours = 31 ; }

Bases de la programmation Java Introduction

44

BouclesPré-condition : while (condition) instruction

boolean trouvé = false ;while (!trouvé) trouvé = anpe.rechercher (emploi) ;

Post-condition : do instruction while (condition)boolean trouvé ;Do // fait au moins 1 fois trouvé = anpe.rechercher (emploi) ;while (!trouvé)

Page 23: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

23

Bases de la programmation Java Introduction

45

Itérateursfor (initialisation ; condition ; itération) instruction

La boucle "for" offre une syntaxe élégante pour écrire une itérationl Contrôlée par une variable compteur

static final int N = 20 ;factorielleN = 1 ;for (int i = 1 ; i <= N ; i++) factorielleN *= i ;

l Contrôlée par une interface appropriéefor (Elément e = liste.premier () ; e != null ; e = liste.suivant ()) e.afficher () ;

Bases de la programmation Java Introduction

46

Capture des exceptions

Java fournit un mécanisme d'exceptionl Une exception peut être levée ou capturéel La capture suit une syntaxe de bloc

try { instructions dangeureuses }catch (exception) { traitement d'erreur }finally { instructions de fin }

Page 24: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

24

Bases de la programmation Java Introduction

47

RupturesLes ruptures sont utiles pour

l Eviter de faire du travail inutilel Simplifier le code

break permet de sortir d'un aiguillage ou d'une bouclel D'un niveau de bloc par défautl De plusieurs niveaux à l'aide d'une étiquette

continue permet de passer à l'itération suivantel D'un niveau de boucle par défautl De plusieurs niveaux à l'aide d'une étiquette

return permet de sortir d'une méthodel Quel que soit le niveau de bloc où le return se trouve dans

la méthode

Bases de la programmation Java Introduction

48

5. UN LANGAGE OBJETS / VALEURSJava est construit sur deux concepts de base :

l Les objetsl Les valeurs

Cette distinction traverse tout le langage et toutes lesconstructions.La manipulation des valeurs se fait directement :

int i = 4 ;int j = i * 1000 ;

La manipulation des objets de fait par référence :Object o ; // référence nulle au départo = new Object () ; // o référence un nouvel

objet créé dynamiquement

Page 25: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

25

Bases de la programmation Java Introduction

49

ValeursDéfinition : une valeur est un élément d ’un type de base(prédéfini) du langageLes types prédéfinis sont :

char, byte, short, int, longfloat, double, boolean, void

l Les variables correspondantes peuvent êtredirectement affectées

l Les paramètres de ces types sont transmis par valeurl Le typage est strict

Bases de la programmation Java Introduction

50

Exemple

int x ;

x = 46 ;

float pi = 3.1416F ;

x 0

x 46

pi 3.1416

Page 26: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

26

Bases de la programmation Java Introduction

51

Typage strictint a = 3 ;float x = 1.25F ;int b = a + x ; // ERREUR !

Si le programmeur sait ce qu’il fait, il peut écrire :int b = a + (int) x ; // ce qui fait 4 !float y = a + x ; // dans ce sens c’est permis // et on obtient bien 4.25

Bases de la programmation Java Introduction

52

Objets

Définition : les objets sont des instances de classesl Ils sont crées et détruits dynamiquement par la JVMl Ils sont accédés par des référencesl La notation pointée permet le déréférencementl Une référence n’est pas un pointeurl Les références sont fortement typéesl Les paramètres objets sont transmis par référence

Page 27: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

27

Bases de la programmation Java Introduction

53

Exempleclass Simplissime{ int i = 0 ;

void incrémente (){ i++ ; }

}

…Simplissime o1 ;o1 = new Simplissime () ;o1.i = 18 ;o1.incrémente () ; // donc 19o1 = new MonAutreClasse () ; // interdit !

Bases de la programmation Java Introduction

54

Exemple (suite)o1 null

incrémente ()

0o1

incrémente ()

18o1

incrémente ()

19o1

Page 28: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

28

Bases de la programmation Java Introduction

55

6. LES TABLEAUXUn tableau est une structure qui comporte plusieurs éléments demême typeLa taille du tableau est déterminée au moment de sa créationdynamiqueAprès sa création, un tableau est une structure de taille fixe

Bases de la programmation Java Introduction

56

Tableaux = objetsUn tableau Java est un objet Java

l Extension implicite de la classe Objectl Créé par un newl Manipulé par référencel Intégré au langage avec une syntaxe particulière

Un tableau Java tab contient deux variablesl La longueur

tab.lengthl Le tableau proprement dit qui est encapsulél La notation indicée permet d'accéder aux éléments

tab [indice]

Page 29: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

29

Bases de la programmation Java Introduction

57

Type des éléments

Les éléments d'un tableau sont soit des valeurs soit des objetsl Valeurs d'un même type de base

char [], byte [], short [], int [], long [],float [], double [], boolean []

l Objets d'une même classeObject [], String [], Frame [], Point [], …

l Objets particuliers : tableaux de même type ========>>>> Tableaux à plusieurs dimensionsint [] [], int [] [] []

Un tableau Java est typé : ses éléments sont uniformément typés

Bases de la programmation Java Introduction

58

Représentation interneEn interne, un tableau comporte deux variables d'instance

l La longueur sur un intl La suite des éléments

Les éléments d'un tableau sont rangées en séquencel Valeurs d'un même type de base

– Ces valeurs sont rangées en séquencel Objets d'une même classe

– Les références à ces objets sont rangées en séquencel Tableaux de même type

– Les références aux tableaux sont rangées en séquenceL'accès à un élément particulier se fait par un calcul d'adresse à partirde son indice

Page 30: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

30

Bases de la programmation Java Introduction

59

Référence de tableauUne référence de tableau est typée

l Par le type du tableau (de ses éléments)l Le type du tableau ne détermine pas sa taille

Une référence de tableau est déclarée et initialisée à null par défautl Le tableau doit ensuite être créé dynamiquement d'une

taille donnéel Une même référence peut être utilisée successivement

– Pour des tableaux différents– Pour des tableaux de tailles différentes

Bases de la programmation Java Introduction

60

Tableau de valeurs

int [] tab ;tab = new int [n] ;tab [3] = 10 ;

tab null

taille = ntab

………………………

00

0

A l'initialisation, le tableau d'entiers estun tableau de valeurs 0

000

01234

n-1

/ 10

Page 31: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

31

Bases de la programmation Java Introduction

61

La variable tableau est une référence

tab = {7, 8, 9} ;La variable tab référence unnouveau tableauLe premier tableau est récupéré parle ramasse-miette

taille = ntab

………………………

00

0

000

01234

n-1

/ 10taille = 3789

012

Bases de la programmation Java Introduction

62

Syntaxel Déclaration

int [] tab ;l Création

tab = new int [N] ;l Déclaration + création

int [] tab = new int [N] ;l Création des éléments

// les int sont crées avec le tableau// ils valent 0 au départ

l Initialisation à l'aide d'une constante tableauint [] tab = {12, 0, 23, 1, -2, 0, 10} ;

Page 32: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

32

Bases de la programmation Java Introduction

63

Itération sur un tableau

La boucle for est utilisée de façon "canonique" pour parcourir leséléments d'un tableauEx :

int [] tab = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ;int somme = 0 ;for (int i = 0 ; i < tab.length ; i++)

somme += tab [i] ;

Bases de la programmation Java Introduction

64

Tableau d'objets

Simplissime [] tab ;tab = new Simplissime [n] ;tab [3] = new Simplissime() ;tab [3].incrémente () ;

tab null

taille = ntab

………………………

nullnull

nullA l'initialisation, le tableau d'objets estun tableau de références nulles

nullnullnull

01234

n-1

incrémente ()

0/ / 1

Page 33: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

33

Bases de la programmation Java Introduction

65

Syntaxel Déclaration

MaClasse [] tab ;l Création

tab = new MaClasse [N] ;l Déclaration + création

MaClasse [] tab = new MaClasse [N] ;l Création des éléments

for (int i = 0 ; i < tab.length ; i++)tab [i] = new MaClasse (…) ;

Bases de la programmation Java Introduction

66

Syntaxe (suite)l Initialisation à l'aide d'une constante tableau

MaClasse unObjet = new MaClasse (…) ;

MaClasse [] tab ={ new MaClasse (…),

unObjet,new MaClasse (…),unObjet

} ; // soit 4 éléments pour 3 objets

Page 34: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

34

Bases de la programmation Java Introduction

67

Références multiplestaille = n

tab

………………………

null

null

01234

n-1

incrémente ()

1

incrémente ()

0

incrémente ()

14

Bases de la programmation Java Introduction

68

Tableaux multidimensionnelsUn élément de tableau peut lui même être un tableaul Le tableau peut être N-dimensionnel régulier

double [][] matrice = new double [3][3] ;float [][][] valeurChamp =new float [100][100][100] ;

l Le tableau peut être N-dimensionnel irrégulierint [][] triangle5 ={ {1},{1, 1},{1, 2, 1},{1, 3, 3, 1},{1, 4, 6, 4, 1} } ;

l Le "tableau" peut former une hiérarchie de hauteur variable

Page 35: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

35

Bases de la programmation Java Introduction

69

Tableau 2D de valeurstab

taille = 500000

01234

taille = 3012

taille = 500000

01234

taille = 500000

01234

int [][] tab ;tab = new int [3][5] ;tab [1][1] = 10 ;

Bases de la programmation Java Introduction

70

11 11 21 3

13 1

1 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 1… … … … … … … … …

Triangle de Pascal

Le triangle est définit par les équationssuivantes :

Ci,j = 1 si j=1 ou j=iCi,j = Ci-1,j-1 + Ci-1,j si 1<j<i

Page 36: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

36

Bases de la programmation Java Introduction

71

Tableau 2D irrégulierclass TriangleDePascal

{int [][] triangle ;TriangleDePascal (int nbl)

{ if (nbl < 0) return ;triangle = new int [nbl][] ;for (int i = 0 ; i < nbl ; i++){ triangle [i] = new int [i + 1] ;

triangle [i][0] = 1 ;for (int j = 1 ; j < i ; j++)

triangle [i][j] =triangle [i - 1][j - 1] +triangle [i - 1][j] ;

triangle [i][i] = 1 ;}

}

Bases de la programmation Java Introduction

72

Tableau 2D irrégulier — FigureTriangle5

taille = 514641

01234

taille = 3121

012

taille = 41331

0123

taille = 501234

taille = 110

taille = 2110

1

Page 37: Bases de la programmation Java - maurise-software.e ...maurise-software.e-monsite.com/medias/files/introduction-2.pdfBases de la programmation Java Introduction 23 Types de base Java

37

Bases de la programmation Java Introduction

73

Itération sur un tableau irrégulierpublic String toString ()

{ String s = "" ;for (int i = 0 ; i < triangle.length ; i++)

{ s += "(" + triangle [i][0] ;for (int j = 1 ; j < triangle [i].length ; j++)

s += ", " + triangle [i][j] ;s += ")\n" ;

}return s ;

}} // fin classe TriangleDePascal

Bases de la programmation Java Introduction

74

Tableaux dangereux

Un élément de tableau peut lui même être un tableaul Le tableau peut être N-dimensionnel régulierl Le tableau peut être N-dimensionnel irrégulierl Le "tableau" peut former une hiérarchie de hauteur variable

Object [] bizarre ={valeurChamp, matrice, new Simplissime (),

unObjet, triangle} ;