La programmation orientée objets et le langage Java

Transcription

La programmation orientée objets et le langage Java
La programmation orientée objets
et le langage Java
Master BBSG 2
Laurent Tichit
Département Informatique et Interactions, Faculté 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, dont
la doc de l’API : http://docs.oracle.com/javase/8/docs/api/
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, dont
la doc de l’API : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + bibliothèques, pour
exécuter les programmes java
JDK - Java Development Toolkit : compilateur et outils pour développer
(contient un JRE)
éditeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)
très préférable : eclipse (EDI très puissant)
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, dont
la doc de l’API : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + bibliothèques, pour
exécuter les programmes java
JDK - Java Development Toolkit : compilateur et outils pour développer
(contient un JRE)
éditeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)
très préférable : eclipse (EDI très puissant)
version courante de Java 8 (2015) : JavaSE 8 update ? ? (ou OpenJDK 8
build ? ?)
Windows : jdk-8u??-windows-i586/x64.exe
Ubuntu/Debian : openjdk-8-jdk
c
L.
Tichit, 2015-2016
POO et Java
2 / 32
Java “sans les objets”
Le langage Java
créé par James Gosling, vers 1995 chez
Sun Microsystems Inc.
destiné à l’informatique répartie : sécurité,
réutilisabilité, portabilité
langage neuf
(pas de compatibilité à assurer)
langage orienté objets
bibliothèque très importante
langage compilé et interprété par un
interpréteur (appelé machine virtuelle)
c
L.
Tichit, 2015-2016
POO et Java
3 / 32
Java “sans les objets”
Java est compilé et interprété
compilation : traduction texte java → bytecode
interprétation : exécution du bytecode par une machine virtuelle Java
(portabilité et sécurité)
MaClasse.java
texte
MaClasse.class
javac
bytecode
données
java
résultats
machine
-hôte
c
L.
Tichit, 2015-2016
POO et Java
4 / 32
Java “sans les objets”
Deux commandes à connaı̂tre
compilation d’un fichier source
javac <nom de fichier>
ex : javac Bonjour.java
c
L.
Tichit, 2015-2016
POO et Java
5 / 32
Java “sans les objets”
Deux commandes à connaı̂tre
compilation d’un fichier source
javac <nom de fichier>
ex : javac Bonjour.java
exécution d’une classe exécutable
java <nom de classe>
ex : java Bonjour
il doit exister une classe Bonjour
comportant une méthode main particulière
c
L.
Tichit, 2015-2016
POO et Java
5 / 32
Java “sans les objets”
Deux commandes à connaı̂tre
compilation d’un fichier source
javac <nom de fichier>
ex : javac Bonjour.java
exécution d’une classe exécutable
java <nom de classe>
ex : java Bonjour
il doit exister une classe Bonjour
comportant une méthode main particulière
avec eclipse tout cela devient transparent → rapidité de développement mais
nuit à la compréhension des mécanismes)
c
L.
Tichit, 2015-2016
POO et Java
5 / 32
Java “sans les objets”
L’inévitable
PRINT "HELLO"
Une classe exécutable complète (minimale) :
fichier Bonjour.java
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonsoir !");
}
}
c
L.
Tichit, 2015-2016
POO et Java
6 / 32
Java “sans les objets”
L’inévitable
PRINT "HELLO"
Une classe exécutable complète (minimale) :
fichier Bonjour.java
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonsoir !");
}
}
Essai :
>javac Bonjour.java
>
c
L.
Tichit, 2015-2016
POO et Java
6 / 32
Java “sans les objets”
L’inévitable
PRINT "HELLO"
Une classe exécutable complète (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 fréquentes
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 fréquentes
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
c
L.
Tichit, 2015-2016
POO et Java
8 / 32
Java “sans les objets”
Deux erreurs fréquentes
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 exécutable doit posséder une méthode ayant la signature
public 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 orientés objets ont été développés pour lutter contre la
complexité des grosses applications :
il est difficile d’en montrer l’intérêt sur de petits exemples
ce cours fait appel à l’expérience et/ou l’imagination de l’auditeur
c
L.
Tichit, 2015-2016
POO et Java
9 / 32
Java “sans les objets”
Deux mises en garde...
Les langages orientés objets ont été développés pour lutter contre la
complexité des grosses applications :
il est difficile d’en montrer l’intérêt sur de petits exemples
ce cours fait appel à l’expérience et/ou l’imagination de l’auditeur
Les bibliothèques accompagnant ces langages sont très copieuses :
la documentation de l’API est absolument indispensable
les recherches dans cette doc sont de véritables jeux de pistes ne pas hésiter à réutiliser des programmes qui fonctionnent
plus que jamais il est nécessaire de beaucoup pratiquer
c
L.
Tichit, 2015-2016
POO et Java
9 / 32
Java “sans les objets”
Approche du langage
Parlant très (trop ?) simplement, la POO c’est de la carrosserie :
packaging et gestion des droits d’accès aux éléments des programmes
mise en commun et réutilisation du code
c
L.
Tichit, 2015-2016
POO et Java
10 / 32
Java “sans les objets”
Approche du langage
Parlant très (trop ?) simplement, la POO c’est de la carrosserie :
packaging et gestion des droits d’accès aux éléments des programmes
mise en commun et réutilisation du code
Qu’y a-t-il sous cette carrosserie ? essentiellement, le C :
même syntaxe de base
conservation de la grande majorité des concepts
c
L.
Tichit, 2015-2016
POO et Java
10 / 32
Java “sans les objets”
Approche du langage
Parlant très (trop ?) simplement, la POO c’est de la carrosserie :
packaging et gestion des droits d’accès aux éléments des programmes
mise en commun et réutilisation du code
Qu’y a-t-il sous cette carrosserie ? essentiellement, le C :
même syntaxe de base
conservation de la grande majorité des concepts
Officiellement nous connaissons Python. Aujourd’hui, nous allons
présenter rapidement quelques différences entre la syntaxe de base de Java et
celle de Python
faire 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 être déclarées. Exemple :
en Python
def distance(x1, y1, x2, y2):
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 être déclarées. Exemple :
en Python
def distance(x1, y1, x2, y2):
dx = x1 - x2
dy = y1 - y2
return 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 à +127)
short : entier sur 16 bits (65536 valeurs, de −32768 à +32767)
int : entier sur 32 bits (' 4, 3 × 109 valeurs)
long : entier sur 64 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 à +127)
short : entier sur 16 bits (65536 valeurs, de −32768 à +32767)
int : entier sur 32 bits (' 4, 3 × 109 valeurs)
long : entier sur 64 bits
Nombres décimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
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 à +127)
short : entier sur 16 bits (65536 valeurs, de −32768 à +32767)
int : entier sur 32 bits (' 4, 3 × 109 valeurs)
long : entier sur 64 bits
Nombres décimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
Valeurs booléennes
boolean : { false, true }
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 à +127)
short : entier sur 16 bits (65536 valeurs, de −32768 à +32767)
int : entier sur 32 bits (' 4, 3 × 109 valeurs)
long : entier sur 64 bits
Nombres décimaux
float : flottant sur 32 bits (norme IEEE, 7 chiffres significatifs)
double : flottant sur 64 bits (norme IEEE, 15 chiffres significatifs)
Valeurs booléennes
boolean : { false, true }
Caractères
char : caractères 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 rôle syntaxique
code erroné
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 rôle syntaxique
code erroné
if (a <= b)
min = a;
max = b;
else
min = b;
max = a;
La marge et la découpe en lignes sont sans importance. Il faut écrire :
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 requièrent un
; à la fin, d’autres non :
affectation
variable = expression;
c
L.
Tichit, 2015-2016
POO et Java
14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requièrent un
; à la fin, d’autres non :
affectation
variable = expression;
appel de fonction sans résultat
fonction(arg1 , arg2 , . . . argk );
c
L.
Tichit, 2015-2016
POO et Java
14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requièrent un
; à la fin, d’autres non :
affectation
variable = expression;
appel de fonction sans résultat
fonction(arg1 , arg2 , . . . argk );
instruction conditionnelle
if (expression) instruction else instruction
if (expression) instruction
c
L.
Tichit, 2015-2016
POO et Java
14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requièrent un
; à la fin, d’autres non :
affectation
variable = expression;
appel de fonction sans résultat
fonction(arg1 , arg2 , . . . argk );
instruction conditionnelle
if (expression) instruction else instruction
if (expression) instruction
boucle tant que while (expression) instruction
c
L.
Tichit, 2015-2016
POO et Java
14 / 32
Java “sans les objets”
Approche du langage
Certaines instructions requièrent un
; à la fin, d’autres non :
affectation
variable = expression;
appel de fonction sans résultat
fonction(arg1 , arg2 , . . . argk );
instruction conditionnelle
if (expression) instruction else instruction
if (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 : étant donné u > 0,
trouver le plus grand entier k tel que 2k < u
c
L.
Tichit, 2015-2016
POO et Java
15 / 32
Java “sans les objets”
Approche du langage
Boucle tant que :
while (expression) instruction
Exemple : étant donné u > 0,
trouver le plus grand entier k tel que 2k < u
extrait de code
...
k = 0;
p = 1;
while (p < u) {
k = k + 1;
p = 2 * p;
}
k = k - 1;
...
c
L.
Tichit, 2015-2016
/* p = 2^k */
/* ou k++; */
/* ou k--; */
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 à l’itération suivante
Exemple : somme des n éléments d’un tableau de nombres tab :
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 à l’itération suivante
Exemple : somme des n éléments 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
Présentation des classes sans parler des objets (en quelque sorte
faire du C en Java ? )
c
L.
Tichit, 2015-2016
POO et Java
comment
17 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Présentation des classes sans parler des objets (en quelque sorte
faire du C en Java ? )
Pour aujourd’hui, une classe est
comment
une unité de compilation (i.e. un texte source)
c
L.
Tichit, 2015-2016
POO et Java
17 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Présentation des classes sans parler des objets (en quelque sorte
faire du C en Java ? )
Pour aujourd’hui, une classe est
comment
une unité de compilation (i.e. un texte source)
un espace de noms (i.e. un moyen d’allonger les noms des variables et
fonctions, pour éviter les conflits)
c
L.
Tichit, 2015-2016
POO et Java
17 / 32
Java “sans les objets”
Une toute petite approche de la notion de classe
Présentation des classes sans parler des objets (en quelque sorte
faire du C en Java ? )
Pour aujourd’hui, une classe est
comment
une unité de compilation (i.e. un texte source)
un espace de noms (i.e. un moyen d’allonger les noms des variables et
fonctions, pour éviter les conflits)
Pratiquement, en quoi consiste
faire du C en Java ?
écrire le code à l’intérieur d’une classe (ou plusieurs)
qualifier static toutes les variables et fonctions
qualifier public certains éléments imposés
faire confiance à 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 probabilité uniforme
toutes les valeurs ont la même probabilité
la fonction Math.random() fait cela
c
L.
Tichit, 2015-2016
POO et Java
18 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
loi de probabilité uniforme
toutes les valeurs ont la même probabilité
la fonction Math.random() fait cela
loi normale ou gaussienne
1 x−µ
densité de probabilité p(x) = σ√12π e − 2 ( σ )
(les valeurs centrales sont
plus probables que les valeurs extrêmes)
2
comment l’avoir sur l’ordinateur ?
c
L.
Tichit, 2015-2016
POO et Java
18 / 32
Java “sans les objets”
Exemple : simulation de la loi normale
loi de probabilité uniforme
toutes les valeurs ont la même probabilité
la fonction Math.random() fait cela
loi normale ou gaussienne
1 x−µ
densité de probabilité p(x) = σ√12π e − 2 ( σ )
(les valeurs centrales sont
plus probables que les valeurs extrêmes)
2
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;
}
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);
}
}
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 {
Quels sont les membres de la classe
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);
}
}
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 {
Quels sont les membres de la classe
SimuLoiNormale ?
static double alea() {
double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
deux méthodes :
SimuLoiNormale.alea()
SimuLoiNormale.main(. . . )
static int nombre = 100;
une variable :
SimuLoiNormale.nombre
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);
}
}
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 {
Quels sont les membres de la classe
SimuLoiNormale ?
static double alea() {
double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
deux méthodes :
SimuLoiNormale.alea()
SimuLoiNormale.main(. . . )
static int nombre = 100;
une variable :
SimuLoiNormale.nombre
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);
}
dans la classe on peut utiliser le
nom court (voir appel d’alea)
}
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 {
Quels sont les membres de la classe
SimuLoiNormale ?
static double alea() {
double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random();
return s - 6;
}
deux méthodes :
SimuLoiNormale.alea()
SimuLoiNormale.main(. . . )
static int nombre = 100;
une variable :
SimuLoiNormale.nombre
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);
}
dans la classe on peut utiliser le
nom court (voir appel d’alea)
dans une autre classe il faudra
employer le nom complet
(voir l’appel de random)
}
c
L.
Tichit, 2015-2016
POO et Java
19 / 32
Java “sans les objets”
L’identification complète d’une méthode
alea s’appelle en fait
SimuLoiNormale.alea()
à l’intérieur de sa classe on peut utiliser le nom court
c
L.
Tichit, 2015-2016
POO et Java
20 / 32
Java “sans les objets”
L’identification complète d’une méthode
alea s’appelle en fait
SimuLoiNormale.alea()
à l’intérieur de sa classe on peut utiliser le nom court
deux méthode distinctes peuvent avoir le même nom :
il suffit qu’elles appartiennent à des classes distinctes
c
L.
Tichit, 2015-2016
POO et Java
20 / 32
Java “sans les objets”
L’identification complète d’une méthode
alea s’appelle en fait
SimuLoiNormale.alea()
à l’intérieur de sa classe on peut utiliser le nom court
deux méthode distinctes peuvent avoir le même nom :
il suffit qu’elles appartiennent à des classes distinctes
on peut appeler random notre fonction :
SimuLoiNormale.random()
Math.random()
les noms complets sont différents.
c
L.
Tichit, 2015-2016
POO et Java
20 / 32
Java “sans les objets”
Surcharge des noms des méthodes
plus fort : deux méthodes de la même classe peuvent avoir le même nom, il
suffit qu’elles aient des signatures distinctes
class SimuLoiNormale {
...
static double alea() { ... }
...
static double alea(int k) { ... }
...
}
c
L.
Tichit, 2015-2016
POO et Java
21 / 32
Java “sans les objets”
Surcharge des noms des méthodes
plus fort : deux méthodes de la même classe peuvent avoir le même nom, il
suffit qu’elles aient des signatures distinctes
class SimuLoiNormale {
...
static double alea() { ... }
...
static double alea(int k) { ... }
...
}
appels de ces méthodes :
y = SimuLoiNormale.alea();
...
y = SimuLoiNormale.alea(20);
c
L.
Tichit, 2015-2016
/* la première */
/* la deuxième */
POO et Java
21 / 32
Java “sans les objets”
Surcharge des noms des méthodes
un autre exemple (extrait de la bibliothèque standard)
class Math
static
static
static
...
}
c
L.
Tichit, 2015-2016
{
double abs(double x) { ... }
float abs(float x) { ... }
int abs(int x) { ... }
POO et Java
22 / 32
Java “sans les objets”
Surcharge des noms des méthodes
un autre exemple (extrait de la bibliothèque standard)
class Math
static
static
static
...
}
{
double abs(double x) { ... }
float abs(float x) { ... }
int abs(int x) { ... }
emploi
y = Math.abs(x);
c
L.
Tichit, 2015-2016
POO et Java
22 / 32
Java “sans les objets”
Surcharge des noms des méthodes
un autre exemple (extrait de la bibliothèque standard)
class Math
static
static
static
...
}
{
double abs(double x) { ... }
float abs(float x) { ... }
int abs(int x) { ... }
emploi
y = Math.abs(x);
encore un exemple
System.out.println("Résultat: ");
System.out.println(y);
c
L.
Tichit, 2015-2016
POO et Java
22 / 32
Java “sans les objets”
Paquets (package)
les classes sont un
c
L.
Tichit, 2015-2016
rangement des méthodes
POO et Java
23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un
rangement des méthodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {
static double alea() {
...
}
}
c
L.
Tichit, 2015-2016
POO et Java
23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un
rangement des méthodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {
static double alea() {
...
}
}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
c
L.
Tichit, 2015-2016
POO et Java
23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un
rangement des méthodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {
static double alea() {
...
}
}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la méthode : mesOutils.SimuLoiNormale.alea()
c
L.
Tichit, 2015-2016
POO et Java
23 / 32
Java “sans les objets”
Paquets (package)
les classes sont un
rangement des méthodes
les paquets sont un rangement des classes
package mesOutils;
class SimuLoiNormale {
static double alea() {
...
}
}
la classe s’appelle maintenant : mesOutils.SimuLoiNormale
et la méthode : mesOutils.SimuLoiNormale.alea()
but de tout cela : éviter les conflits de noms (réutilisabilité)
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 hiérarchie (java.awt.event n’est pas un
sous-paquet de java.awt)...
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 hiérarchie (java.awt.event n’est pas un
sous-paquet de java.awt)...
...mais les paquets correspondent à des répertoires : les classes de
java.awt.event doivent être dans java/awt/event
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 hiérarchie (java.awt.event n’est pas un
sous-paquet de java.awt)...
...mais les paquets correspondent à des répertoires : les classes de
java.awt.event doivent être dans java/awt/event
java.sun.com recommande un système de nommage planétaire (cosmique ?) :
package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {
...
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 hiérarchie (java.awt.event n’est pas un
sous-paquet de java.awt)...
...mais les paquets correspondent à des répertoires : les classes de
java.awt.event doivent être dans java/awt/event
java.sun.com recommande un système de nommage planétaire (cosmique ?) :
package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {
...
la fonction s’appelle maintenant
fr.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 : alléger les noms des classes lors de leur utilisation
on écrit au début du fichier
import mesOutils.SimuLoiNormale;
import java.awt.event.*;
c
L.
Tichit, 2015-2016
POO et Java
// une classe
// tout le paquet
25 / 32
Java “sans les objets”
Instruction import
but : alléger les noms des classes lors de leur utilisation
on écrit au début du fichier
import mesOutils.SimuLoiNormale;
import java.awt.event.*;
// une classe
// tout le paquet
cela permet d’écrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()
c
L.
Tichit, 2015-2016
POO et Java
25 / 32
Java “sans les objets”
Instruction import
but : alléger les noms des classes lors de leur utilisation
on écrit au début du fichier
import mesOutils.SimuLoiNormale;
import java.awt.event.*;
// une classe
// tout le paquet
cela permet d’écrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()
il ne s’agit pas de
désigner un paquet que, sinon, le compilateur ne trouverait pas,
ni d’obtenir le droit d’accéder 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 énoncé package
c
L.
Tichit, 2015-2016
POO et Java
26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun énoncé package
un nombre quelconque d’énoncés import
c
L.
Tichit, 2015-2016
POO et Java
26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun énoncé package
un nombre quelconque d’énoncés import
une (préférable) ou plusieurs classes
c
L.
Tichit, 2015-2016
POO et Java
26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun énoncé package
un nombre quelconque d’énoncés import
une (préférable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
c
L.
Tichit, 2015-2016
POO et Java
26 / 32
Java “sans les objets”
Structure d’un fichier source Java
un ou aucun énoncé package
un nombre quelconque d’énoncés import
une (préférable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout où 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
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 (réutilisabilité)
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 (réutilisabilité)
noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une
majuscule
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 (réutilisabilité)
noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
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 (réutilisabilité)
noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
noms des méthodes et variables : commencer par minuscule
int x, y;
double vitesseDuVent;
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 (réutilisabilité)
noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
noms des méthodes et variables : commencer par minuscule
int x, y;
double vitesseDuVent;
paquetages : commencer chaque élément par minuscule
import mesOutils.statistiques.*;
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 (réutilisabilité)
noms faits de plusieurs mots : à partir du 2e , commencer chaque mot par une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
noms des méthodes et variables : commencer par minuscule
int x, y;
double vitesseDuVent;
paquetages : commencer chaque élément par minuscule
import 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 (créés à l’exécution)
c
L.
Tichit, 2015-2016
POO et Java
28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (créés à l’exécution)
tous les accès aux tableaux sont contrôlés
c
L.
Tichit, 2015-2016
POO et Java
28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (créés à l’exécution)
tous les accès aux tableaux sont contrôlés
exemple : déclaration
int[] table;
(pour le moment, table vaut null)
c
L.
Tichit, 2015-2016
POO et Java
28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (créés à l’exécution)
tous les accès aux tableaux sont contrôlés
exemple : déclaration
int[] table;
(pour le moment, table vaut null)
création :
table = new int[nombreElts];
c
L.
Tichit, 2015-2016
POO et Java
28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (créés à l’exécution)
tous les accès aux tableaux sont contrôlés
exemple : déclaration
int[] table;
(pour le moment, table vaut null)
création :
table = new int[nombreElts];
accès aux éléments du tableau (exemple) :
table[i] = expression;
c
L.
Tichit, 2015-2016
POO et Java
28 / 32
Java “sans les objets”
Les tableaux du langage
Tous les tableaux sont dynamiques (créés à l’exécution)
tous les accès aux tableaux sont contrôlés
exemple : déclaration
int[] table;
(pour le moment, table vaut null)
création :
table = new int[nombreElts];
accès aux éléments du tableau (exemple) :
table[i] = expression;
un tel accès provoque toujours deux vérifications :
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]);
}
}
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 référence...
int[] t1, t2;
(déclaration)
null
t1
c
L.
Tichit, 2015-2016
null
t2
POO et Java
30 / 32
Java “sans les objets”
Une variable tableau est une référence...
int[] t1, t2;
(déclaration)
null
t1
t1 = new int[7];
null
t2
(création)
0
0
0
0
t1
c
L.
Tichit, 2015-2016
POO et Java
0
0
0
null
t2
30 / 32
Java “sans les objets”
Une variable tableau est une référence...
int[] t1, t2;
(déclaration)
null
t1
t1 = new int[7];
null
t2
(création)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
t1
t2 = t1;
null
t2
(affectation)
t1
c
L.
Tichit, 2015-2016
t2
POO et Java
30 / 32
Java “sans les objets”
Tableaux à deux indices
Déclaration
double[][] matrice;
Création
matrice = new double[nl][nc];
Exemple (avec nl = 3, nc = 4) :
matrice
0
c
L.
Tichit, 2015-2016
0
0
0
0
0
0
0
0
0
0
POO et Java
0
31 / 32
Java “sans les objets”
Tableaux à deux indices
On obtient le même résultat avec :
double[][] matrice;
...
matrice = new double[nl][];
for (int i = 0; i < nl; i++)
matrice[i] = new double[nc];
matrice
0
c
L.
Tichit, 2015-2016
0
0
0
0
0
0
0
0
0
0
POO et Java
0
32 / 32