sans les objets - bienvenue sur département …tichit/java/cours/javabbsg2-01.pdf · il est di...
TRANSCRIPT
La programmation orientee objetset le langage Java
Master BBSG 2Laurent Tichit
Departement Informatique et Interactions, Faculte des Sciences de Luminy
Cours 1: Java “sans les objets”
c©L. Tichit, 2015-2016 POO et Java 1 / 32
Java “sans les objets”
Ressources
Documentation
www.dil.univ-mrs.fr/~tichit/java/ (cours, docs)java.sun.com : logiciel et docs, dontla doc de l’API : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + bibliotheques, pourexecuter les programmes javaJDK - Java Development Toolkit : compilateur et outils pour developper(contient un JRE)editeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)tres preferable : eclipse (EDI tres puissant)
version courante de Java 8 (2015) : JavaSE 8 update ? ? (ou OpenJDK 8build ? ?)
Windows : jdk-8u??-windows-i586/x64.exeUbuntu/Debian : openjdk-8-jdk
c©L. Tichit, 2015-2016 POO et Java 2 / 32
Java “sans les objets”
Ressources
Documentation
www.dil.univ-mrs.fr/~tichit/java/ (cours, docs)java.sun.com : logiciel et docs, dontla doc de l’API : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + bibliotheques, pourexecuter les programmes javaJDK - Java Development Toolkit : compilateur et outils pour developper(contient un JRE)editeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)tres preferable : eclipse (EDI tres puissant)
version courante de Java 8 (2015) : JavaSE 8 update ? ? (ou OpenJDK 8build ? ?)
Windows : jdk-8u??-windows-i586/x64.exeUbuntu/Debian : openjdk-8-jdk
c©L. Tichit, 2015-2016 POO et Java 2 / 32
Java “sans les objets”
Ressources
Documentation
www.dil.univ-mrs.fr/~tichit/java/ (cours, docs)java.sun.com : logiciel et docs, dontla doc de l’API : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + bibliotheques, pourexecuter les programmes javaJDK - Java Development Toolkit : compilateur et outils pour developper(contient un JRE)editeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)tres preferable : eclipse (EDI tres puissant)
version courante de Java 8 (2015) : JavaSE 8 update ? ? (ou OpenJDK 8build ? ?)
Windows : jdk-8u??-windows-i586/x64.exeUbuntu/Debian : openjdk-8-jdk
c©L. Tichit, 2015-2016 POO et Java 2 / 32
Java “sans les objets”
Le langage Java
cree par James Gosling, vers 1995 chezSun Microsystems Inc.
destine a l’informatique repartie : securite,reutilisabilite, portabilite
langage neuf(pas de compatibilite a assurer)langage oriente objetsbibliotheque tres importantelangage compile et interprete par uninterpreteur (appele machine virtuelle)
c©L. Tichit, 2015-2016 POO et Java 3 / 32
Java “sans les objets”
Java est compile et interprete
compilation : traduction texte java → bytecode
interpretation : execution du bytecode par une machine virtuelle Java(portabilite et securite)
MaClasse.java MaClasse.class
javac
javadonnées résultats
machine-hôte
texte bytecode
c©L. Tichit, 2015-2016 POO et Java 4 / 32
Java “sans les objets”
Deux commandes a connaıtre
compilation d’un fichier sourcejavac <nom de fichier>ex : javac Bonjour.java
execution d’une classe executablejava <nom de classe>ex : java Bonjour
il doit exister une classe Bonjour
comportant une methode main particuliere
avec eclipse tout cela devient transparent → rapidite de developpement maisnuit a la comprehension des mecanismes)
c©L. Tichit, 2015-2016 POO et Java 5 / 32
Java “sans les objets”
Deux commandes a connaıtre
compilation d’un fichier sourcejavac <nom de fichier>ex : javac Bonjour.java
execution d’une classe executablejava <nom de classe>ex : java Bonjour
il doit exister une classe Bonjour
comportant une methode main particuliere
avec eclipse tout cela devient transparent → rapidite de developpement maisnuit a la comprehension des mecanismes)
c©L. Tichit, 2015-2016 POO et Java 5 / 32
Java “sans les objets”
Deux commandes a connaıtre
compilation d’un fichier sourcejavac <nom de fichier>ex : javac Bonjour.java
execution d’une classe executablejava <nom de classe>ex : java Bonjour
il doit exister une classe Bonjour
comportant une methode main particuliere
avec eclipse tout cela devient transparent → rapidite de developpement maisnuit a la comprehension des mecanismes)
c©L. Tichit, 2015-2016 POO et Java 5 / 32
Java “sans les objets”
L’inevitable � PRINT "HELLO" �
Une classe executable complete (minimale) :
fichier Bonjour.java
public class Bonjour {public static void main(String[] args) {
System.out.println("Bonsoir !");
}}
Essai :>javac Bonjour.java
>java Bonjour
Bonsoir !
>
c©L. Tichit, 2015-2016 POO et Java 6 / 32
Java “sans les objets”
L’inevitable � PRINT "HELLO" �
Une classe executable complete (minimale) :
fichier Bonjour.java
public class Bonjour {public static void main(String[] args) {
System.out.println("Bonsoir !");
}}
Essai :>javac Bonjour.java
>
java Bonjour
Bonsoir !
>
c©L. Tichit, 2015-2016 POO et Java 6 / 32
Java “sans les objets”
L’inevitable � PRINT "HELLO" �
Une classe executable complete (minimale) :
fichier Bonjour.java
public class Bonjour {public static void main(String[] args) {
System.out.println("Bonsoir !");
}}
Essai :>javac Bonjour.java
>java Bonjour
Bonsoir !
>
c©L. Tichit, 2015-2016 POO et Java 6 / 32
Java “sans les objets”
Deux erreurs frequentes
fichier Bonjour.java
public class Bonjour {public static void main() {
System.out.println("Bonsoir !");
}}
Essai :>javac Bonjour.java
>java Bonjour.class
Exception in thread "main"
java.lang.NoClassDefFoundError: Bonjour/class
c©L. Tichit, 2015-2016 POO et Java 7 / 32
Java “sans les objets”
Deux erreurs frequentes
fichier Bonjour.java
public class Bonjour {public static void main() {
System.out.println("Bonsoir !");
}}
Essai :>javac Bonjour.java
>java Bonjour
Exception in thread "main"
java.lang.NoSuchMethodError: main
Une classe executable doit posseder une methode ayant la signaturepublic static void main(String[] args)
c©L. Tichit, 2015-2016 POO et Java 8 / 32
Java “sans les objets”
Deux erreurs frequentes
fichier Bonjour.java
public class Bonjour {public static void main() {
System.out.println("Bonsoir !");
}}
Essai :>javac Bonjour.java
>java Bonjour
Exception in thread "main"
java.lang.NoSuchMethodError: main
Une classe executable doit posseder une methode ayant la signaturepublic static void main(String[] args)
c©L. Tichit, 2015-2016 POO et Java 8 / 32
Java “sans les objets”
Deux mises en garde...
Les langages orientes objets ont ete developpes pour lutter contre lacomplexite des grosses applications :
il est difficile d’en montrer l’interet sur de petits exemplesce cours fait appel a l’experience et/ou l’imagination de l’auditeur
Les bibliotheques accompagnant ces langages sont tres copieuses :
la documentation de l’API est absolument indispensableles recherches dans cette doc sont de veritables � jeux de pistes �
ne pas hesiter a reutiliser des programmes qui fonctionnentplus que jamais il est necessaire de beaucoup pratiquer
c©L. Tichit, 2015-2016 POO et Java 9 / 32
Java “sans les objets”
Deux mises en garde...
Les langages orientes objets ont ete developpes pour lutter contre lacomplexite des grosses applications :
il est difficile d’en montrer l’interet sur de petits exemplesce cours fait appel a l’experience et/ou l’imagination de l’auditeur
Les bibliotheques accompagnant ces langages sont tres copieuses :
la documentation de l’API est absolument indispensableles recherches dans cette doc sont de veritables � jeux de pistes �
ne pas hesiter a reutiliser des programmes qui fonctionnentplus que jamais il est necessaire de beaucoup pratiquer
c©L. Tichit, 2015-2016 POO et Java 9 / 32
Java “sans les objets”
Approche du langage
Parlant tres (trop ?) simplement, la POO c’est de la carrosserie :
packaging et gestion des droits d’acces aux elements des programmesmise en commun et reutilisation du code
Qu’y a-t-il sous cette carrosserie ? essentiellement, le C :
meme syntaxe de baseconservation de la grande majorite des concepts
Officiellement nous connaissons Python. Aujourd’hui, nous allons
presenter rapidement quelques differences entre la syntaxe de base de Java etcelle de Pythonfaire une mauvaise approche de la notion de classe
c©L. Tichit, 2015-2016 POO et Java 10 / 32
Java “sans les objets”
Approche du langage
Parlant tres (trop ?) simplement, la POO c’est de la carrosserie :
packaging et gestion des droits d’acces aux elements des programmesmise en commun et reutilisation du code
Qu’y a-t-il sous cette carrosserie ? essentiellement, le C :
meme syntaxe de baseconservation de la grande majorite des concepts
Officiellement nous connaissons Python. Aujourd’hui, nous allons
presenter rapidement quelques differences entre la syntaxe de base de Java etcelle de Pythonfaire une mauvaise approche de la notion de classe
c©L. Tichit, 2015-2016 POO et Java 10 / 32
Java “sans les objets”
Approche du langage
Parlant tres (trop ?) simplement, la POO c’est de la carrosserie :
packaging et gestion des droits d’acces aux elements des programmesmise en commun et reutilisation du code
Qu’y a-t-il sous cette carrosserie ? essentiellement, le C :
meme syntaxe de baseconservation de la grande majorite des concepts
Officiellement nous connaissons Python. Aujourd’hui, nous allons
presenter rapidement quelques differences entre la syntaxe de base de Java etcelle de Pythonfaire une mauvaise approche de la notion de classe
c©L. Tichit, 2015-2016 POO et Java 10 / 32
Java “sans les objets”
Approche du langage
Les variables et fonctions doivent etre declarees. Exemple :
en Python
def distance(x1, y1, x2, y2):dx = x1 - x2dy = y1 - y2return math.sqrt(dx * dx + dy * dy)
en Java il faut
en Java
double distance(int x1, int y1, int x2, int y2) {int dx, dy;dx = x1 - x2;dy = y1 - y2;return Math.sqrt(dx * dx + dy * dy);
}
c©L. Tichit, 2015-2016 POO et Java 11 / 32
Java “sans les objets”
Approche du langage
Les variables et fonctions doivent etre declarees. Exemple :
en Python
def distance(x1, y1, x2, y2):dx = x1 - x2dy = y1 - y2return math.sqrt(dx * dx + dy * dy)
en Java il faut
en Java
double distance(int x1, int y1, int x2, int y2) {int dx, dy;dx = x1 - x2;dy = y1 - y2;return Math.sqrt(dx * dx + dy * dy);
}
c©L. Tichit, 2015-2016 POO et Java 11 / 32
Java “sans les objets”
Types primitifs
Nombres entiers
byte : entier sur 8 bits (256 valeurs, de −128 a +127)
short : entier sur 16 bits (65536 valeurs, de −32768 a +32767)
int : entier sur 32 bits (' 4, 3× 109 valeurs)
long : entier sur 64 bits
Nombres decimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
Valeurs booleennes
boolean : { false, true }Caracteres
char : caracteres Unicode sur 16 bits
c©L. Tichit, 2015-2016 POO et Java 12 / 32
Java “sans les objets”
Types primitifs
Nombres entiers
byte : entier sur 8 bits (256 valeurs, de −128 a +127)
short : entier sur 16 bits (65536 valeurs, de −32768 a +32767)
int : entier sur 32 bits (' 4, 3× 109 valeurs)
long : entier sur 64 bits
Nombres decimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
Valeurs booleennes
boolean : { false, true }Caracteres
char : caracteres Unicode sur 16 bits
c©L. Tichit, 2015-2016 POO et Java 12 / 32
Java “sans les objets”
Types primitifs
Nombres entiers
byte : entier sur 8 bits (256 valeurs, de −128 a +127)
short : entier sur 16 bits (65536 valeurs, de −32768 a +32767)
int : entier sur 32 bits (' 4, 3× 109 valeurs)
long : entier sur 64 bits
Nombres decimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
Valeurs booleennes
boolean : { false, true }
Caracteres
char : caracteres Unicode sur 16 bits
c©L. Tichit, 2015-2016 POO et Java 12 / 32
Java “sans les objets”
Types primitifs
Nombres entiers
byte : entier sur 8 bits (256 valeurs, de −128 a +127)
short : entier sur 16 bits (65536 valeurs, de −32768 a +32767)
int : entier sur 32 bits (' 4, 3× 109 valeurs)
long : entier sur 64 bits
Nombres decimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
Valeurs booleennes
boolean : { false, true }Caracteres
char : caracteres Unicode sur 16 bits
c©L. Tichit, 2015-2016 POO et Java 12 / 32
Java “sans les objets”
Approche du langage
L’indentation (marge) et la fin de ligne n’ont aucun role syntaxique
code errone
if (a <= b)min = a;max = b;
elsemin = b;max = a;
La marge et la decoupe en lignes sont sans importance. Il faut ecrire :
code correct
if (a <= b) {min = a;max = b;
} else {min = b;max = a;
}
c©L. Tichit, 2015-2016 POO et Java 13 / 32
Java “sans les objets”
Approche du langage
L’indentation (marge) et la fin de ligne n’ont aucun role syntaxique
code errone
if (a <= b)min = a;max = b;
elsemin = b;max = a;
La marge et la decoupe en lignes sont sans importance. Il faut ecrire :
code correct
if (a <= b) {min = a;max = b;
} else {min = b;max = a;
}
c©L. Tichit, 2015-2016 POO et Java 13 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requierent un � ; � a la fin, d’autres non :
affectationvariable = expression;
appel de fonction sans resultatfonction(arg1, arg2, . . . argk);
instruction conditionnelleif (expression) instruction else instructionif (expression) instruction
boucle � tant que �
while (expression) instruction
boucle � pour �
for (expr1; expr2; expr3) instruction
c©L. Tichit, 2015-2016 POO et Java 14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requierent un � ; � a la fin, d’autres non :
affectationvariable = expression;
appel de fonction sans resultatfonction(arg1, arg2, . . . argk);
instruction conditionnelleif (expression) instruction else instructionif (expression) instruction
boucle � tant que �
while (expression) instruction
boucle � pour �
for (expr1; expr2; expr3) instruction
c©L. Tichit, 2015-2016 POO et Java 14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requierent un � ; � a la fin, d’autres non :
affectationvariable = expression;
appel de fonction sans resultatfonction(arg1, arg2, . . . argk);
instruction conditionnelleif (expression) instruction else instructionif (expression) instruction
boucle � tant que �
while (expression) instruction
boucle � pour �
for (expr1; expr2; expr3) instruction
c©L. Tichit, 2015-2016 POO et Java 14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requierent un � ; � a la fin, d’autres non :
affectationvariable = expression;
appel de fonction sans resultatfonction(arg1, arg2, . . . argk);
instruction conditionnelleif (expression) instruction else instructionif (expression) instruction
boucle � tant que �
while (expression) instruction
boucle � pour �
for (expr1; expr2; expr3) instruction
c©L. Tichit, 2015-2016 POO et Java 14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requierent un � ; � a la fin, d’autres non :
affectationvariable = expression;
appel de fonction sans resultatfonction(arg1, arg2, . . . argk);
instruction conditionnelleif (expression) instruction else instructionif (expression) instruction
boucle � tant que �
while (expression) instruction
boucle � pour �
for (expr1; expr2; expr3) instruction
c©L. Tichit, 2015-2016 POO et Java 14 / 32
Java “sans les objets”
Approche du langage
Boucle � tant que � :while (expression) instruction
Exemple : etant donne u > 0,trouver le plus grand entier k tel que 2k < u
extrait de code
...k = 0;p = 1; /* p = 2^k */while (p < u) {
k = k + 1; /* ou k++; */p = 2 * p;
}k = k - 1; /* ou k--; */...
c©L. Tichit, 2015-2016 POO et Java 15 / 32
Java “sans les objets”
Approche du langage
Boucle � tant que � :while (expression) instruction
Exemple : etant donne u > 0,trouver le plus grand entier k tel que 2k < u
extrait de code
...k = 0;p = 1; /* p = 2^k */while (p < u) {
k = k + 1; /* ou k++; */p = 2 * p;
}k = k - 1; /* ou k--; */...
c©L. Tichit, 2015-2016 POO et Java 15 / 32
Java “sans les objets”
Approche du langage
Boucle � pour �
for (expr1; expr2; expr3) instruction− expr1 : initialisation− expr2 : condition de continuation (comme dans while)− expr3 : passage a l’iteration suivante
Exemple : somme des n elements d’un tableau de nombres tab :
extrait de code
...somme = 0;for (i = 0; i < n; i = i + 1)
somme = somme + tab[i];...
c©L. Tichit, 2015-2016 POO et Java 16 / 32
Java “sans les objets”
Approche du langage
Boucle � pour �
for (expr1; expr2; expr3) instruction− expr1 : initialisation− expr2 : condition de continuation (comme dans while)− expr3 : passage a l’iteration suivante
Exemple : somme des n elements d’un tableau de nombres tab :
extrait de code
...somme = 0;for (i = 0; i < n; i = i + 1)
somme = somme + tab[i];...
c©L. Tichit, 2015-2016 POO et Java 16 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Presentation des classes sans parler des objets (en quelque sorte � commentfaire du C en Java ? �)
Pour aujourd’hui, une classe est
une unite de compilation (i.e. un texte source)un espace de noms (i.e. un moyen d’allonger les noms des variables etfonctions, pour eviter les conflits)
Pratiquement, en quoi consiste � faire du C en Java � ?
ecrire le code a l’interieur d’une classe (ou plusieurs)qualifier static toutes les variables et fonctionsqualifier public certains elements imposesfaire confiance a C, sauf pour les tableaux
c©L. Tichit, 2015-2016 POO et Java 17 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Presentation des classes sans parler des objets (en quelque sorte � commentfaire du C en Java ? �)
Pour aujourd’hui, une classe est
une unite de compilation (i.e. un texte source)
un espace de noms (i.e. un moyen d’allonger les noms des variables etfonctions, pour eviter les conflits)
Pratiquement, en quoi consiste � faire du C en Java � ?
ecrire le code a l’interieur d’une classe (ou plusieurs)qualifier static toutes les variables et fonctionsqualifier public certains elements imposesfaire confiance a C, sauf pour les tableaux
c©L. Tichit, 2015-2016 POO et Java 17 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Presentation des classes sans parler des objets (en quelque sorte � commentfaire du C en Java ? �)
Pour aujourd’hui, une classe est
une unite de compilation (i.e. un texte source)un espace de noms (i.e. un moyen d’allonger les noms des variables etfonctions, pour eviter les conflits)
Pratiquement, en quoi consiste � faire du C en Java � ?
ecrire le code a l’interieur d’une classe (ou plusieurs)qualifier static toutes les variables et fonctionsqualifier public certains elements imposesfaire confiance a C, sauf pour les tableaux
c©L. Tichit, 2015-2016 POO et Java 17 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Presentation des classes sans parler des objets (en quelque sorte � commentfaire du C en Java ? �)
Pour aujourd’hui, une classe est
une unite de compilation (i.e. un texte source)un espace de noms (i.e. un moyen d’allonger les noms des variables etfonctions, pour eviter les conflits)
Pratiquement, en quoi consiste � faire du C en Java � ?
ecrire le code a l’interieur d’une classe (ou plusieurs)qualifier static toutes les variables et fonctionsqualifier public certains elements imposesfaire confiance a C, sauf pour les tableaux
c©L. Tichit, 2015-2016 POO et Java 17 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
loi de probabilite uniforme
toutes les valeurs ont la meme probabilitela fonction Math.random() fait cela
loi normale ou gaussienne
densite de probabilite p(x) = 1
σ√
2πe−
12 ( x−µ
σ )2
(les valeurs centrales sontplus probables que les valeurs extremes)
comment l’avoir sur l’ordinateur ?Bonne approximation (les ri sont des tirages uniformes, 0 <= ri <= 1) :
y = r1 + r2 + · · ·+ r12 − 6
c©L. Tichit, 2015-2016 POO et Java 18 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
loi de probabilite uniforme
toutes les valeurs ont la meme probabilitela fonction Math.random() fait cela
loi normale ou gaussienne
densite de probabilite p(x) = 1
σ√
2πe−
12 ( x−µ
σ )2
(les valeurs centrales sontplus probables que les valeurs extremes)
comment l’avoir sur l’ordinateur ?
Bonne approximation (les ri sont des tirages uniformes, 0 <= ri <= 1) :
y = r1 + r2 + · · ·+ r12 − 6
c©L. Tichit, 2015-2016 POO et Java 18 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
loi de probabilite uniforme
toutes les valeurs ont la meme probabilitela fonction Math.random() fait cela
loi normale ou gaussienne
densite de probabilite p(x) = 1
σ√
2πe−
12 ( x−µ
σ )2
(les valeurs centrales sontplus probables que les valeurs extremes)
comment l’avoir sur l’ordinateur ?Bonne approximation (les ri sont des tirages uniformes, 0 <= ri <= 1) :
y = r1 + r2 + · · ·+ r12 − 6
c©L. Tichit, 2015-2016 POO et Java 18 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
fichier SimuLoiNormale.java
public class SimuLoiNormale {
static double alea() {double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
static int nombre = 100;
public static void main(String[] args) {double somme, somcar;
somme = somcar = 0;
for (int i = 0; i < nombre; i++) {double x = alea();
somme = somme + x;
somcar = somcar + x * x;
}double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}}
Quels sont les membres de la classeSimuLoiNormale ?
deux methodes :SimuLoiNormale.alea()SimuLoiNormale.main(. . . )
une variable :SimuLoiNormale.nombre
dans la classe on peut utiliser lenom court (voir appel d’alea)
dans une autre classe il faudraemployer le nom complet(voir l’appel de random)
c©L. Tichit, 2015-2016 POO et Java 19 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
fichier SimuLoiNormale.java
public class SimuLoiNormale {
static double alea() {double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
static int nombre = 100;
public static void main(String[] args) {double somme, somcar;
somme = somcar = 0;
for (int i = 0; i < nombre; i++) {double x = alea();
somme = somme + x;
somcar = somcar + x * x;
}double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}}
Quels sont les membres de la classeSimuLoiNormale ?
deux methodes :SimuLoiNormale.alea()SimuLoiNormale.main(. . . )
une variable :SimuLoiNormale.nombre
dans la classe on peut utiliser lenom court (voir appel d’alea)
dans une autre classe il faudraemployer le nom complet(voir l’appel de random)
c©L. Tichit, 2015-2016 POO et Java 19 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
fichier SimuLoiNormale.java
public class SimuLoiNormale {
static double alea() {double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
static int nombre = 100;
public static void main(String[] args) {double somme, somcar;
somme = somcar = 0;
for (int i = 0; i < nombre; i++) {double x = alea();
somme = somme + x;
somcar = somcar + x * x;
}double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}}
Quels sont les membres de la classeSimuLoiNormale ?
deux methodes :SimuLoiNormale.alea()SimuLoiNormale.main(. . . )
une variable :SimuLoiNormale.nombre
dans la classe on peut utiliser lenom court (voir appel d’alea)
dans une autre classe il faudraemployer le nom complet(voir l’appel de random)
c©L. Tichit, 2015-2016 POO et Java 19 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
fichier SimuLoiNormale.java
public class SimuLoiNormale {
static double alea() {double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
static int nombre = 100;
public static void main(String[] args) {double somme, somcar;
somme = somcar = 0;
for (int i = 0; i < nombre; i++) {double x = alea();
somme = somme + x;
somcar = somcar + x * x;
}double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}}
Quels sont les membres de la classeSimuLoiNormale ?
deux methodes :SimuLoiNormale.alea()SimuLoiNormale.main(. . . )
une variable :SimuLoiNormale.nombre
dans la classe on peut utiliser lenom court (voir appel d’alea)
dans une autre classe il faudraemployer le nom complet(voir l’appel de random)
c©L. Tichit, 2015-2016 POO et Java 19 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
fichier SimuLoiNormale.java
public class SimuLoiNormale {
static double alea() {double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
static int nombre = 100;
public static void main(String[] args) {double somme, somcar;
somme = somcar = 0;
for (int i = 0; i < nombre; i++) {double x = alea();
somme = somme + x;
somcar = somcar + x * x;
}double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}}
Quels sont les membres de la classeSimuLoiNormale ?
deux methodes :SimuLoiNormale.alea()SimuLoiNormale.main(. . . )
une variable :SimuLoiNormale.nombre
dans la classe on peut utiliser lenom court (voir appel d’alea)
dans une autre classe il faudraemployer le nom complet(voir l’appel de random)
c©L. Tichit, 2015-2016 POO et Java 19 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
fichier SimuLoiNormale.java
public class SimuLoiNormale {
static double alea() {double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
static int nombre = 100;
public static void main(String[] args) {double somme, somcar;
somme = somcar = 0;
for (int i = 0; i < nombre; i++) {double x = alea();
somme = somme + x;
somcar = somcar + x * x;
}double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}}
Quels sont les membres de la classeSimuLoiNormale ?
deux methodes :SimuLoiNormale.alea()SimuLoiNormale.main(. . . )
une variable :SimuLoiNormale.nombre
dans la classe on peut utiliser lenom court (voir appel d’alea)
dans une autre classe il faudraemployer le nom complet(voir l’appel de random)
c©L. Tichit, 2015-2016 POO et Java 19 / 32
Java “sans les objets”
L’identification complete d’une methode
alea s’appelle en faitSimuLoiNormale.alea()
a l’interieur de sa classe on peut utiliser le nom court
deux methode distinctes peuvent avoir le meme nom :il suffit qu’elles appartiennent a des classes distinctes
on peut appeler random notre fonction :SimuLoiNormale.random()
Math.random()
les noms complets sont differents.
c©L. Tichit, 2015-2016 POO et Java 20 / 32
Java “sans les objets”
L’identification complete d’une methode
alea s’appelle en faitSimuLoiNormale.alea()
a l’interieur de sa classe on peut utiliser le nom court
deux methode distinctes peuvent avoir le meme nom :il suffit qu’elles appartiennent a des classes distinctes
on peut appeler random notre fonction :SimuLoiNormale.random()
Math.random()
les noms complets sont differents.
c©L. Tichit, 2015-2016 POO et Java 20 / 32
Java “sans les objets”
L’identification complete d’une methode
alea s’appelle en faitSimuLoiNormale.alea()
a l’interieur de sa classe on peut utiliser le nom court
deux methode distinctes peuvent avoir le meme nom :il suffit qu’elles appartiennent a des classes distinctes
on peut appeler random notre fonction :SimuLoiNormale.random()
Math.random()
les noms complets sont differents.
c©L. Tichit, 2015-2016 POO et Java 20 / 32
Java “sans les objets”
Surcharge des noms des methodes
plus fort : deux methodes de la meme classe peuvent avoir le meme nom, ilsuffit qu’elles aient des signatures distinctes
class SimuLoiNormale {...
static double alea() { ... }...
static double alea(int k) { ... }...
}
appels de ces methodes :
y = SimuLoiNormale.alea(); /* la premiere */...
y = SimuLoiNormale.alea(20); /* la deuxieme */
c©L. Tichit, 2015-2016 POO et Java 21 / 32
Java “sans les objets”
Surcharge des noms des methodes
plus fort : deux methodes de la meme classe peuvent avoir le meme nom, ilsuffit qu’elles aient des signatures distinctes
class SimuLoiNormale {...
static double alea() { ... }...
static double alea(int k) { ... }...
}appels de ces methodes :
y = SimuLoiNormale.alea(); /* la premiere */...
y = SimuLoiNormale.alea(20); /* la deuxieme */
c©L. Tichit, 2015-2016 POO et Java 21 / 32
Java “sans les objets”
Surcharge des noms des methodes
un autre exemple (extrait de la bibliotheque standard)class Math {
static double abs(double x) { ... }static float abs(float x) { ... }static int abs(int x) { ... }...
}
emploiy = Math.abs(x);
encore un exempleSystem.out.println("Resultat: ");
System.out.println(y);
c©L. Tichit, 2015-2016 POO et Java 22 / 32
Java “sans les objets”
Surcharge des noms des methodes
un autre exemple (extrait de la bibliotheque standard)class Math {
static double abs(double x) { ... }static float abs(float x) { ... }static int abs(int x) { ... }...
}emploi
y = Math.abs(x);
encore un exempleSystem.out.println("Resultat: ");
System.out.println(y);
c©L. Tichit, 2015-2016 POO et Java 22 / 32
Java “sans les objets”
Surcharge des noms des methodes
un autre exemple (extrait de la bibliotheque standard)class Math {
static double abs(double x) { ... }static float abs(float x) { ... }static int abs(int x) { ... }...
}emploi
y = Math.abs(x);
encore un exempleSystem.out.println("Resultat: ");
System.out.println(y);
c©L. Tichit, 2015-2016 POO et Java 22 / 32
Java “sans les objets”
Paquets (package)
les classes sont un � rangement � des methodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {static double alea() {
...
}}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la methode : mesOutils.SimuLoiNormale.alea()
but de tout cela : eviter les conflits de noms (reutilisabilite)
c©L. Tichit, 2015-2016 POO et Java 23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un � rangement � des methodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {static double alea() {
...
}}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la methode : mesOutils.SimuLoiNormale.alea()
but de tout cela : eviter les conflits de noms (reutilisabilite)
c©L. Tichit, 2015-2016 POO et Java 23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un � rangement � des methodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {static double alea() {
...
}}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la methode : mesOutils.SimuLoiNormale.alea()
but de tout cela : eviter les conflits de noms (reutilisabilite)
c©L. Tichit, 2015-2016 POO et Java 23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un � rangement � des methodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {static double alea() {
...
}}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la methode : mesOutils.SimuLoiNormale.alea()
but de tout cela : eviter les conflits de noms (reutilisabilite)
c©L. Tichit, 2015-2016 POO et Java 23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un � rangement � des methodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {static double alea() {
...
}}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la methode : mesOutils.SimuLoiNormale.alea()
but de tout cela : eviter les conflits de noms (reutilisabilite)
c©L. Tichit, 2015-2016 POO et Java 23 / 32
Java “sans les objets”
Paquets (package)
les noms de paquet peuvent contenir � . � :java.awt.event.MouseEvent
Java n’y voit pas une hierarchie (java.awt.event n’est pas un� sous-paquet � de java.awt)...
...mais les paquets correspondent a des repertoires : les classes dejava.awt.event doivent etre dans java/awt/event
java.sun.com recommande un systeme de nommage planetaire (cosmique ?) :package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {...
la fonction s’appelle maintenantfr.univ mrs.dil.tichit.stats.mesOutils.SimuLoiNormale.alea()
c©L. Tichit, 2015-2016 POO et Java 24 / 32
Java “sans les objets”
Paquets (package)
les noms de paquet peuvent contenir � . � :java.awt.event.MouseEvent
Java n’y voit pas une hierarchie (java.awt.event n’est pas un� sous-paquet � de java.awt)...
...mais les paquets correspondent a des repertoires : les classes dejava.awt.event doivent etre dans java/awt/event
java.sun.com recommande un systeme de nommage planetaire (cosmique ?) :package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {...
la fonction s’appelle maintenantfr.univ mrs.dil.tichit.stats.mesOutils.SimuLoiNormale.alea()
c©L. Tichit, 2015-2016 POO et Java 24 / 32
Java “sans les objets”
Paquets (package)
les noms de paquet peuvent contenir � . � :java.awt.event.MouseEvent
Java n’y voit pas une hierarchie (java.awt.event n’est pas un� sous-paquet � de java.awt)...
...mais les paquets correspondent a des repertoires : les classes dejava.awt.event doivent etre dans java/awt/event
java.sun.com recommande un systeme de nommage planetaire (cosmique ?) :package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {...
la fonction s’appelle maintenantfr.univ mrs.dil.tichit.stats.mesOutils.SimuLoiNormale.alea()
c©L. Tichit, 2015-2016 POO et Java 24 / 32
Java “sans les objets”
Paquets (package)
les noms de paquet peuvent contenir � . � :java.awt.event.MouseEvent
Java n’y voit pas une hierarchie (java.awt.event n’est pas un� sous-paquet � de java.awt)...
...mais les paquets correspondent a des repertoires : les classes dejava.awt.event doivent etre dans java/awt/event
java.sun.com recommande un systeme de nommage planetaire (cosmique ?) :package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {...
la fonction s’appelle maintenantfr.univ mrs.dil.tichit.stats.mesOutils.SimuLoiNormale.alea()
c©L. Tichit, 2015-2016 POO et Java 24 / 32
Java “sans les objets”
Instruction import
but : alleger les noms des classes lors de leur utilisation
on ecrit au debut du fichierimport mesOutils.SimuLoiNormale; // une classe
import java.awt.event.*; // tout le paquet
cela permet d’ecrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()
il ne s’agit pas de
designer un paquet que, sinon, le compilateur ne trouverait pas,ni d’obtenir le droit d’acceder aux classes du paquetage
mais uniquement de
permettre l’emploi du nom court des classes du paquetage
c©L. Tichit, 2015-2016 POO et Java 25 / 32
Java “sans les objets”
Instruction import
but : alleger les noms des classes lors de leur utilisation
on ecrit au debut du fichierimport mesOutils.SimuLoiNormale; // une classe
import java.awt.event.*; // tout le paquet
cela permet d’ecrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()
il ne s’agit pas de
designer un paquet que, sinon, le compilateur ne trouverait pas,ni d’obtenir le droit d’acceder aux classes du paquetage
mais uniquement de
permettre l’emploi du nom court des classes du paquetage
c©L. Tichit, 2015-2016 POO et Java 25 / 32
Java “sans les objets”
Instruction import
but : alleger les noms des classes lors de leur utilisation
on ecrit au debut du fichierimport mesOutils.SimuLoiNormale; // une classe
import java.awt.event.*; // tout le paquet
cela permet d’ecrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()
il ne s’agit pas de
designer un paquet que, sinon, le compilateur ne trouverait pas,ni d’obtenir le droit d’acceder aux classes du paquetage
mais uniquement de
permettre l’emploi du nom court des classes du paquetage
c©L. Tichit, 2015-2016 POO et Java 25 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun enonce package
un nombre quelconque d’enonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout ou on veut, des commentaires
fichier MonCadre.java
/* auteur: Laurent* date: 20.10.14 */
package mesOutils;
import java.awt.*;import java.awt.event.*;
public class MonCadre {le code de la classe est ici
}
c©L. Tichit, 2015-2016 POO et Java 26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun enonce package
un nombre quelconque d’enonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout ou on veut, des commentaires
fichier MonCadre.java
/* auteur: Laurent* date: 20.10.14 */
package mesOutils;
import java.awt.*;import java.awt.event.*;
public class MonCadre {le code de la classe est ici
}
c©L. Tichit, 2015-2016 POO et Java 26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun enonce package
un nombre quelconque d’enonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout ou on veut, des commentaires
fichier MonCadre.java
/* auteur: Laurent* date: 20.10.14 */
package mesOutils;
import java.awt.*;import java.awt.event.*;
public class MonCadre {le code de la classe est ici
}
c©L. Tichit, 2015-2016 POO et Java 26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun enonce package
un nombre quelconque d’enonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout ou on veut, des commentaires
fichier MonCadre.java
/* auteur: Laurent* date: 20.10.14 */
package mesOutils;
import java.awt.*;import java.awt.event.*;
public class MonCadre {le code de la classe est ici
}
c©L. Tichit, 2015-2016 POO et Java 26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun enonce package
un nombre quelconque d’enonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout ou on veut, des commentaires
fichier MonCadre.java
/* auteur: Laurent* date: 20.10.14 */
package mesOutils;
import java.awt.*;import java.awt.event.*;
public class MonCadre {le code de la classe est ici
}
c©L. Tichit, 2015-2016 POO et Java 26 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Conventions de nommage
des recommandations, non des obligations
but : faciliter la lecture des programmes (reutilisabilite)
noms faits de plusieurs mots : a partir du 2e , commencer chaque mot par unemajuscule
noms des classes : commencer par majusculeclass CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minusculeint x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minusculeimport mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des � �
static final int NOMBRE DE POINTS = 1000;
c©L. Tichit, 2015-2016 POO et Java 27 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (crees a l’execution)
tous les acces aux tableaux sont controles
exemple : declarationint[] table;
(pour le moment, table vaut null)
creation :table = new int[nombreElts];
acces aux elements du tableau (exemple) :table[i] = expression;
un tel acces provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException
c©L. Tichit, 2015-2016 POO et Java 28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (crees a l’execution)
tous les acces aux tableaux sont controles
exemple : declarationint[] table;
(pour le moment, table vaut null)
creation :table = new int[nombreElts];
acces aux elements du tableau (exemple) :table[i] = expression;
un tel acces provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException
c©L. Tichit, 2015-2016 POO et Java 28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (crees a l’execution)
tous les acces aux tableaux sont controles
exemple : declarationint[] table;
(pour le moment, table vaut null)
creation :table = new int[nombreElts];
acces aux elements du tableau (exemple) :table[i] = expression;
un tel acces provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException
c©L. Tichit, 2015-2016 POO et Java 28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (crees a l’execution)
tous les acces aux tableaux sont controles
exemple : declarationint[] table;
(pour le moment, table vaut null)
creation :table = new int[nombreElts];
acces aux elements du tableau (exemple) :table[i] = expression;
un tel acces provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException
c©L. Tichit, 2015-2016 POO et Java 28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (crees a l’execution)
tous les acces aux tableaux sont controles
exemple : declarationint[] table;
(pour le moment, table vaut null)
creation :table = new int[nombreElts];
acces aux elements du tableau (exemple) :table[i] = expression;
un tel acces provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException
c©L. Tichit, 2015-2016 POO et Java 28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (crees a l’execution)
tous les acces aux tableaux sont controles
exemple : declarationint[] table;
(pour le moment, table vaut null)
creation :table = new int[nombreElts];
acces aux elements du tableau (exemple) :table[i] = expression;
un tel acces provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 ≤ i <nombreElts, sinon ArrayIndexOutOfBoundsException
c©L. Tichit, 2015-2016 POO et Java 28 / 32
Java “sans les objets”
La taille des tableaux
Exemple :
fichier TestArgsMain.java
public class TestArgsMain {public static void main(String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println(args[i]);
}}
Essai :> javac TestArgsMain.java
> java TestArgsMain Combien vaut 2+3
Combien
vaut
2+3
>
c©L. Tichit, 2015-2016 POO et Java 29 / 32
Java “sans les objets”
La taille des tableaux
Exemple :
fichier TestArgsMain.java
public class TestArgsMain {public static void main(String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println(args[i]);
}}
Essai :> javac TestArgsMain.java
> java TestArgsMain Combien vaut 2+3
Combien
vaut
2+3
>
c©L. Tichit, 2015-2016 POO et Java 29 / 32
Java “sans les objets”
Une variable tableau est une reference...
int[] t1, t2; (declaration)
t1 t2nullnull
t1 = new int[7]; (creation)
0 0 0 0 0 0 0 t1 t2
null
t2 = t1; (affectation)
0 0 0 0 0 0 0 t1 t2
c©L. Tichit, 2015-2016 POO et Java 30 / 32
Java “sans les objets”
Une variable tableau est une reference...
int[] t1, t2; (declaration)
t1 t2nullnull
t1 = new int[7]; (creation)
0 0 0 0 0 0 0 t1 t2
null
t2 = t1; (affectation)
0 0 0 0 0 0 0 t1 t2
c©L. Tichit, 2015-2016 POO et Java 30 / 32
Java “sans les objets”
Une variable tableau est une reference...
int[] t1, t2; (declaration)
t1 t2nullnull
t1 = new int[7]; (creation)
0 0 0 0 0 0 0 t1 t2
null
t2 = t1; (affectation)
0 0 0 0 0 0 0 t1 t2
c©L. Tichit, 2015-2016 POO et Java 30 / 32
Java “sans les objets”
Tableaux a deux indices
Declarationdouble[][] matrice;
Creationmatrice = new double[nl][nc];
Exemple (avec nl = 3, nc = 4) :
0 0 0 0
matrice
0 0 0 0
0 0 0 0
c©L. Tichit, 2015-2016 POO et Java 31 / 32
Java “sans les objets”
Tableaux a deux indices
On obtient le meme resultat avec :
double[][] matrice;
...
matrice = new double[nl][];
for (int i = 0; i < nl; i++)
matrice[i] = new double[nc];
0 0 0 0
matrice
0 0 0 0
0 0 0 0
c©L. Tichit, 2015-2016 POO et Java 32 / 32