Vous êtes sur la page 1sur 95

La programmation orientee objets

et le langage Java

Master BBSG 2
Laurent Tichit
Departement Informatique et Interactions, Faculte des Sciences de Luminy

Cours 1: Java sans les objets

L.
c 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 lAPI : http://docs.oracle.com/javase/8/docs/api/

L.
c 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 lAPI : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + biblioth`eques, pour
executer les programmes java
JDK - Java Development Toolkit : compilateur et outils pour developper
(contient un JRE)
editeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)
tr`es preferable : eclipse (EDI tr`es puissant)

L.
c 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 lAPI : http://docs.oracle.com/javase/8/docs/api/
Logiciel
JRE - Java Runtime Environment : machine java + biblioth`eques, pour
executer les programmes java
JDK - Java Development Toolkit : compilateur et outils pour developper
(contient un JRE)
editeur de textes quelconque (bloc-notes, vi, Jext, gedit, etc.)
tr`es preferable : eclipse (EDI tr`es 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

L.
c Tichit, 2015-2016 POO et Java 2 / 32
Java sans les objets

Le langage Java

cree par James Gosling, vers 1995 chez


Sun Microsystems Inc.
destine `a linformatique repartie : securite,
reutilisabilite, portabilite
langage neuf
(pas de compatibilite `a assurer)
langage oriente objets
biblioth`eque tr`es importante
langage compile et interprete par un
interpreteur (appele machine virtuelle)

L.
c 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

texte javac
bytecode

donnes java rsultats

machine
-hte

L.
c Tichit, 2015-2016 POO et Java 4 / 32
Java sans les objets

Deux commandes `a connatre

compilation dun fichier source


javac <nom de fichier>
ex : javac Bonjour.java

L.
c Tichit, 2015-2016 POO et Java 5 / 32
Java sans les objets

Deux commandes `a connatre

compilation dun fichier source


javac <nom de fichier>
ex : javac Bonjour.java
execution dune classe executable
java <nom de classe>
ex : java Bonjour
il doit exister une classe Bonjour
comportant une methode main particuli`ere

L.
c Tichit, 2015-2016 POO et Java 5 / 32
Java sans les objets

Deux commandes `a connatre

compilation dun fichier source


javac <nom de fichier>
ex : javac Bonjour.java
execution dune classe executable
java <nom de classe>
ex : java Bonjour
il doit exister une classe Bonjour
comportant une methode main particuli`ere
avec eclipse tout cela devient transparent rapidite de developpement mais
nuit `a la comprehension des mecanismes)

L.
c Tichit, 2015-2016 POO et Java 5 / 32
Java sans les objets

Linevitable  PRINT "HELLO" 

Une classe executable compl`ete (minimale) :

fichier Bonjour.java
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonsoir !");
}
}

L.
c Tichit, 2015-2016 POO et Java 6 / 32
Java sans les objets

Linevitable  PRINT "HELLO" 

Une classe executable compl`ete (minimale) :

fichier Bonjour.java
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonsoir !");
}
}

Essai :
>javac Bonjour.java
>

L.
c Tichit, 2015-2016 POO et Java 6 / 32
Java sans les objets

Linevitable  PRINT "HELLO" 

Une classe executable compl`ete (minimale) :

fichier Bonjour.java
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonsoir !");
}
}

Essai :
>javac Bonjour.java
>java Bonjour
Bonsoir !
>

L.
c 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

L.
c 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

L.
c 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 signature
public static void main(String[] args)

L.
c 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 la
complexite des grosses applications :
il est difficile den montrer linteret sur de petits exemples
ce cours fait appel ` a lexperience et/ou limagination de lauditeur

L.
c 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 la
complexite des grosses applications :
il est difficile den montrer linteret sur de petits exemples
ce cours fait appel ` a lexperience et/ou limagination de lauditeur

Les biblioth`eques accompagnant ces langages sont tr`es copieuses :


la documentation de lAPI est absolument indispensable
les recherches dans cette doc sont de veritables  jeux de pistes 
ne pas hesiter `
a reutiliser des programmes qui fonctionnent
plus que jamais il est necessaire de beaucoup pratiquer

L.
c Tichit, 2015-2016 POO et Java 9 / 32
Java sans les objets

Approche du langage

Parlant tr`es (trop ?) simplement, la POO cest de la carrosserie :


packaging et gestion des droits dacc`es aux elements des programmes
mise en commun et reutilisation du code

L.
c Tichit, 2015-2016 POO et Java 10 / 32
Java sans les objets

Approche du langage

Parlant tr`es (trop ?) simplement, la POO cest de la carrosserie :


packaging et gestion des droits dacc`es aux elements des programmes
mise en commun et reutilisation du code

Quy a-t-il sous cette carrosserie ? essentiellement, le C :


meme syntaxe de base
conservation de la grande majorite des concepts

L.
c Tichit, 2015-2016 POO et Java 10 / 32
Java sans les objets

Approche du langage

Parlant tr`es (trop ?) simplement, la POO cest de la carrosserie :


packaging et gestion des droits dacc`es aux elements des programmes
mise en commun et reutilisation du code

Quy a-t-il sous cette carrosserie ? essentiellement, le C :


meme syntaxe de base
conservation de la grande majorite des concepts

Officiellement nous connaissons Python. Aujourdhui, nous allons


presenter rapidement quelques differences entre la syntaxe de base de Java et
celle de Python
faire une mauvaise approche de la notion de classe

L.
c 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 - x2
dy = y1 - y2
return math.sqrt(dx * dx + dy * dy)

L.
c 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 - 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);
}

L.
c 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

L.
c 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)

L.
c 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 }

L.
c 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 }
Caract`eres
char : caract`eres Unicode sur 16 bits

L.
c Tichit, 2015-2016 POO et Java 12 / 32
Java sans les objets

Approche du langage
Lindentation (marge) et la fin de ligne nont aucun r
ole syntaxique

code erron
e
if (a <= b)
min = a;
max = b;
else
min = b;
max = a;

L.
c Tichit, 2015-2016 POO et Java 13 / 32
Java sans les objets

Approche du langage
Lindentation (marge) et la fin de ligne nont aucun r
ole syntaxique

code erron
e
if (a <= b)
min = a;
max = b;
else
min = b;
max = a;

La marge et la d
ecoupe en lignes sont sans importance. Il faut
ecrire :

code correct
if (a <= b) {
min = a;
max = b;
} else {
min = b;
max = a;
}

L.
c Tichit, 2015-2016 POO et Java 13 / 32
Java sans les objets

Approche du langage

Certaines instructions requi`erent un  ;  `a la fin, dautres non :


affectation
variable = expression;

L.
c Tichit, 2015-2016 POO et Java 14 / 32
Java sans les objets

Approche du langage

Certaines instructions requi`erent un  ;  `a la fin, dautres non :


affectation
variable = expression;
appel de fonction sans resultat
fonction(arg1 , arg2 , . . . argk );

L.
c Tichit, 2015-2016 POO et Java 14 / 32
Java sans les objets

Approche du langage

Certaines instructions requi`erent un  ;  `a la fin, dautres non :


affectation
variable = expression;
appel de fonction sans resultat
fonction(arg1 , arg2 , . . . argk );
instruction conditionnelle
if (expression) instruction else instruction
if (expression) instruction

L.
c Tichit, 2015-2016 POO et Java 14 / 32
Java sans les objets

Approche du langage

Certaines instructions requi`erent un  ;  `a la fin, dautres non :


affectation
variable = expression;
appel de fonction sans resultat
fonction(arg1 , arg2 , . . . argk );
instruction conditionnelle
if (expression) instruction else instruction
if (expression) instruction
boucle  tant que 
while (expression) instruction

L.
c Tichit, 2015-2016 POO et Java 14 / 32
Java sans les objets

Approche du langage

Certaines instructions requi`erent un  ;  `a la fin, dautres non :


affectation
variable = expression;
appel de fonction sans resultat
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

L.
c 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

L.
c 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--; */
...

L.
c 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 literation suivante

Exemple : somme des n elements dun tableau de nombres tab :

L.
c 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 literation suivante

Exemple : somme des n elements dun tableau de nombres tab :

extrait de code
...
somme = 0;
for (i = 0; i < n; i = i + 1)
somme = somme + tab[i];
...

L.
c 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  comment
faire du C en Java ? )

L.
c 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  comment
faire du C en Java ? )
Pour aujourdhui, une classe est
une unite de compilation (i.e. un texte source)

L.
c 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  comment
faire du C en Java ? )
Pour aujourdhui, une classe est
une unite de compilation (i.e. un texte source)
un espace de noms (i.e. un moyen dallonger les noms des variables et
fonctions, pour eviter les conflits)

L.
c 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  comment
faire du C en Java ? )
Pour aujourdhui, une classe est
une unite de compilation (i.e. un texte source)
un espace de noms (i.e. un moyen dallonger les noms des variables et
fonctions, pour eviter les conflits)
Pratiquement, en quoi consiste  faire du C en Java  ?
ecrire le code `
a linterieur dune classe (ou plusieurs)
qualifier static toutes les variables et fonctions
qualifier public certains elements imposes
faire confiance `
a C, sauf pour les tableaux

L.
c 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 probabilite
la fonction Math.random() fait cela

L.
c 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 probabilite
la fonction Math.random() fait cela
loi normale ou gaussienne
1 x 2
densite de probabilite p(x) = 12 e 2 ( )
(les valeurs centrales sont
plus probables que les valeurs extremes)

comment lavoir sur lordinateur ?

L.
c 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 probabilite
la fonction Math.random() fait cela
loi normale ou gaussienne
1 x 2
densite de probabilite p(x) = 12 e 2 ( )
(les valeurs centrales sont
plus probables que les valeurs extremes)

comment lavoir sur lordinateur ?


Bonne approximation (les ri sont des tirages uniformes, 0 <= ri <= 1) :
y = r1 + r2 + + r12 6

L.
c 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;
}

L.
c 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);
}
}

L.
c 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
static double alea() { SimuLoiNormale ?
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);
}
}

L.
c 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
static double alea() { SimuLoiNormale ?
double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random(); deux m
ethodes :
return s - 6; SimuLoiNormale.alea()
}
SimuLoiNormale.main(. . . )
static int nombre = 100;
une variable :
public static void main(String[] args) {
double somme, somcar;
SimuLoiNormale.nombre
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);
}
}

L.
c 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
static double alea() { SimuLoiNormale ?
double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random(); deux m
ethodes :
return s - 6; SimuLoiNormale.alea()
}
SimuLoiNormale.main(. . . )
static int nombre = 100;
une variable :
public static void main(String[] args) {
double somme, somcar;
SimuLoiNormale.nombre
somme = somcar = 0;
for (int i = 0; i < nombre; i++) { dans la classe on peut utiliser le
double x = alea();
somme = somme + x;
nom court (voir appel dalea)
somcar = somcar + x * x;
}
double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
System.out.println("moyenne " + moy);
System.out.println("variance " + var);
}
}

L.
c 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
static double alea() { SimuLoiNormale ?
double s = 0;
for (int i = 0; i < 12; i++)
s = s + Math.random(); deux m
ethodes :
return s - 6; SimuLoiNormale.alea()
}
SimuLoiNormale.main(. . . )
static int nombre = 100;
une variable :
public static void main(String[] args) {
double somme, somcar;
SimuLoiNormale.nombre
somme = somcar = 0;
for (int i = 0; i < nombre; i++) { dans la classe on peut utiliser le
double x = alea();
somme = somme + x;
nom court (voir appel dalea)
somcar = somcar + x * x;
} dans une autre classe il faudra
double moy = somme / nombre;
double var = somcar / nombre - moy * moy;
employer le nom complet
System.out.println("moyenne " + moy); (voir lappel de random)
System.out.println("variance " + var);
}
}

L.
c Tichit, 2015-2016 POO et Java 19 / 32
Java sans les objets

Lidentification compl`ete dune methode

alea sappelle en fait


SimuLoiNormale.alea()
`a linterieur de sa classe on peut utiliser le nom court

L.
c Tichit, 2015-2016 POO et Java 20 / 32
Java sans les objets

Lidentification compl`ete dune methode

alea sappelle en fait


SimuLoiNormale.alea()
`a linterieur de sa classe on peut utiliser le nom court
deux methode distinctes peuvent avoir le meme nom :
il suffit quelles appartiennent `a des classes distinctes

L.
c Tichit, 2015-2016 POO et Java 20 / 32
Java sans les objets

Lidentification compl`ete dune methode

alea sappelle en fait


SimuLoiNormale.alea()
`a linterieur de sa classe on peut utiliser le nom court
deux methode distinctes peuvent avoir le meme nom :
il suffit quelles appartiennent `a des classes distinctes
on peut appeler random notre fonction :
SimuLoiNormale.random()
Math.random()
les noms complets sont differents.

L.
c 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, il
suffit quelles aient des signatures distinctes
class SimuLoiNormale {
...
static double alea() { ... }
...
static double alea(int k) { ... }
...
}

L.
c 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, il
suffit quelles aient des signatures distinctes
class SimuLoiNormale {
...
static double alea() { ... }
...
static double alea(int k) { ... }
...
}
appels de ces methodes :
y = SimuLoiNormale.alea(); /* la premi`ere */
...
y = SimuLoiNormale.alea(20); /* la deuxi`eme */

L.
c Tichit, 2015-2016 POO et Java 21 / 32
Java sans les objets

Surcharge des noms des methodes

un autre exemple (extrait de la biblioth`eque standard)


class Math {
static double abs(double x) { ... }
static float abs(float x) { ... }
static int abs(int x) { ... }
...
}

L.
c Tichit, 2015-2016 POO et Java 22 / 32
Java sans les objets

Surcharge des noms des methodes

un autre exemple (extrait de la biblioth`eque standard)


class Math {
static double abs(double x) { ... }
static float abs(float x) { ... }
static int abs(int x) { ... }
...
}
emploi
y = Math.abs(x);

L.
c Tichit, 2015-2016 POO et Java 22 / 32
Java sans les objets

Surcharge des noms des methodes

un autre exemple (extrait de la biblioth`eque 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 exemple
System.out.println("R
esultat: ");
System.out.println(y);

L.
c Tichit, 2015-2016 POO et Java 22 / 32
Java sans les objets

Paquets (package)

les classes sont un  rangement  des methodes

L.
c 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() {
...
}
}

L.
c 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 sappelle maintenant : mesOutils.SimuLoiNormale

L.
c 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 sappelle maintenant : mesOutils.SimuLoiNormale


et la methode : mesOutils.SimuLoiNormale.alea()

L.
c 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 sappelle maintenant : mesOutils.SimuLoiNormale


et la methode : mesOutils.SimuLoiNormale.alea()
but de tout cela : eviter les conflits de noms (reutilisabilite)

L.
c 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 ny voit pas une hierarchie (java.awt.event nest pas un
 sous-paquet  de java.awt)...

L.
c 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 ny voit pas une hierarchie (java.awt.event nest pas un
 sous-paquet  de java.awt)...

...mais les paquets correspondent `a des repertoires : les classes de


java.awt.event doivent etre dans java/awt/event

L.
c 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 ny voit pas une hierarchie (java.awt.event nest pas un
 sous-paquet  de java.awt)...

...mais les paquets correspondent `a des repertoires : les classes de


java.awt.event doivent etre dans java/awt/event
java.sun.com recommande un syst`eme de nommage planetaire (cosmique ?) :
package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {
...

L.
c 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 ny voit pas une hierarchie (java.awt.event nest pas un
 sous-paquet  de java.awt)...

...mais les paquets correspondent `a des repertoires : les classes de


java.awt.event doivent etre dans java/awt/event
java.sun.com recommande un syst`eme de nommage planetaire (cosmique ?) :
package fr.univ mrs.dil.tichit.stats.mesOutils;
class SimuLoiNormale {
...
la fonction sappelle maintenant
fr.univ mrs.dil.tichit.stats.mesOutils.SimuLoiNormale.alea()

L.
c 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 fichier
import mesOutils.SimuLoiNormale; // une classe
import java.awt.event.*; // tout le paquet

L.
c 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 fichier
import mesOutils.SimuLoiNormale; // une classe
import java.awt.event.*; // tout le paquet
cela permet decrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()

L.
c 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 fichier
import mesOutils.SimuLoiNormale; // une classe
import java.awt.event.*; // tout le paquet
cela permet decrire SimuLoiNormale.alea()
au lieu de mesOutils.SimuLoiNormale.alea()
il ne sagit pas de
designer un paquet que, sinon, le compilateur ne trouverait pas,
ni dobtenir le droit dacceder aux classes du paquetage
mais uniquement de
permettre lemploi du nom court des classes du paquetage

L.
c Tichit, 2015-2016 POO et Java 25 / 32
Java sans les objets

Structure dun fichier source Java

un ou aucun enonce package

L.
c Tichit, 2015-2016 POO et Java 26 / 32
Java sans les objets

Structure dun fichier source Java

un ou aucun enonce package


un nombre quelconque denonces import

L.
c Tichit, 2015-2016 POO et Java 26 / 32
Java sans les objets

Structure dun fichier source Java

un ou aucun enonce package


un nombre quelconque denonces import
une (preferable) ou plusieurs classes

L.
c Tichit, 2015-2016 POO et Java 26 / 32
Java sans les objets

Structure dun fichier source Java

un ou aucun enonce package


un nombre quelconque denonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier

L.
c Tichit, 2015-2016 POO et Java 26 / 32
Java sans les objets

Structure dun fichier source Java

un ou aucun enonce package


un nombre quelconque denonces import
une (preferable) ou plusieurs classes
dont une seule est public, elle impose son nom au fichier
partout o`
u 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
}

L.
c Tichit, 2015-2016 POO et Java 26 / 32
Java sans les objets

Conventions de nommage

des recommandations, non des obligations

L.
c 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)

L.
c 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 une
majuscule

L.
c 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 une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...

L.
c 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 une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minuscule
int x, y;
double vitesseDuVent;

L.
c 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 une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minuscule
int x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minuscule
import mesOutils.statistiques.*;

L.
c 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 une
majuscule
noms des classes : commencer par majuscule
class CadrePrincipalDeMonApplication { ...
noms des methodes et variables : commencer par minuscule
int x, y;
double vitesseDuVent;
paquetages : commencer chaque element par minuscule
import mesOutils.statistiques.*;
variables statiques finales : tout en majuscule, avec des  

static final int NOMBRE DE POINTS = 1000;

L.
c Tichit, 2015-2016 POO et Java 27 / 32
Java sans les objets

Les tableaux du langage

Tous les tableaux sont dynamiques (crees `a lexecution)

L.
c Tichit, 2015-2016 POO et Java 28 / 32
Java sans les objets

Les tableaux du langage

Tous les tableaux sont dynamiques (crees `a lexecution)


tous les acc`es aux tableaux sont contr
oles

L.
c Tichit, 2015-2016 POO et Java 28 / 32
Java sans les objets

Les tableaux du langage

Tous les tableaux sont dynamiques (crees `a lexecution)


tous les acc`es aux tableaux sont contr
oles
exemple : declaration
int[] table;
(pour le moment, table vaut null)

L.
c Tichit, 2015-2016 POO et Java 28 / 32
Java sans les objets

Les tableaux du langage

Tous les tableaux sont dynamiques (crees `a lexecution)


tous les acc`es aux tableaux sont contr
oles
exemple : declaration
int[] table;
(pour le moment, table vaut null)
creation :
table = new int[nombreElts];

L.
c Tichit, 2015-2016 POO et Java 28 / 32
Java sans les objets

Les tableaux du langage

Tous les tableaux sont dynamiques (crees `a lexecution)


tous les acc`es aux tableaux sont contr
oles
exemple : declaration
int[] table;
(pour le moment, table vaut null)
creation :
table = new int[nombreElts];
acc`es aux elements du tableau (exemple) :
table[i] = expression;

L.
c Tichit, 2015-2016 POO et Java 28 / 32
Java sans les objets

Les tableaux du langage

Tous les tableaux sont dynamiques (crees `a lexecution)


tous les acc`es aux tableaux sont contr
oles
exemple : declaration
int[] table;
(pour le moment, table vaut null)
creation :
table = new int[nombreElts];
acc`es aux elements du tableau (exemple) :
table[i] = expression;
un tel acc`es provoque toujours deux verifications :
table 6= null, sinon NullPointerException
0 i <nombreElts, sinon ArrayIndexOutOfBoundsException

L.
c 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]);
}
}

L.
c 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
>

L.
c Tichit, 2015-2016 POO et Java 29 / 32
Java sans les objets

Une variable tableau est une reference...

int[] t1, t2; (d


eclaration)

null null
t1 t2

L.
c Tichit, 2015-2016 POO et Java 30 / 32
Java sans les objets

Une variable tableau est une reference...

int[] t1, t2; (d


eclaration)

null null
t1 t2

t1 = new int[7]; (cr


eation)

0 0 0 0 0 0 0 null
t1 t2

L.
c Tichit, 2015-2016 POO et Java 30 / 32
Java sans les objets

Une variable tableau est une reference...

int[] t1, t2; (d


eclaration)

null null
t1 t2

t1 = new int[7]; (cr


eation)

0 0 0 0 0 0 0 null
t1 t2

t2 = t1; (affectation)

0 0 0 0 0 0 0
t1 t2

L.
c Tichit, 2015-2016 POO et Java 30 / 32
Java sans les objets

Tableaux `a deux indices

Declaration
double[][] matrice;
Creation
matrice = new double[nl][nc];
Exemple (avec nl = 3, nc = 4) :

matrice
0 0 0 0

0 0 0 0

0 0 0 0

L.
c 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];

matrice
0 0 0 0

0 0 0 0

0 0 0 0

L.
c Tichit, 2015-2016 POO et Java 32 / 32

Vous aimerez peut-être aussi