Documente Academic
Documente Profesional
Documente Cultură
h"p://www.isima.fr/~loic
ObjecDfs
crire
un
programme
JAVA
UDliser
les
concepts
objets
avec
JAVA
Concevoir
des
IHM
Pr-requis
Syntaxe
C/C++
Concepts
objets
2
Cadre
Le
Java
vu
par
SUN
et
uniquement
Prparer
les
premires
cerDcaDons
ExcepDon
:
uDliser
l'EDI
Eclipse
valuaDon
Prsence
Examen
nal
3
NetBeans
vs
Eclipse
Sun
/
Oracle
Supporte
toujours
les
dernires
technos
Java
ConcepDon
de
GUI
naDve
(maDsse)
IBM
RputaDon
plus
pro
?
Plugin
:
dlai
?
IncompaDbilit
?
Plugin
:
WindowBuilder
Plan
1.
2.
3.
4.
5.
6.
7.
HS
Premier
programme
NoDons
de
base
&
syntaxe
Concepts
objets
en
Java
Les
excepDons
IHM
:
AWT
&
Swing
Concurrence
(Threads)
Fichiers
&
ux,
srialisaDon
Complments
8
23
44
94
108
144
155
173
5
IntroducDon
le
?
Javascript
(ECMA)
?
Langage
Machine
virtuelle
Plateforme
6
MoDvaDons
Langage
cr
en
1995
Patrick
Naughton
James
Gosling
Simple
Scuris
(rseaux,
Internet)
Portable
Performant
Concepts
diciles
du
C++
vacus
7
2. Premier programme
Premier
programme
/** ma premire classe */
public class Exemple
{
public static void main(String[] argv)
{
// afficher un message
java.lang.System.out.println(Bonjour);
System.out.println(;-));
}
}
2. Lancer
le
programme
java Exemple
.exe ?
.class
?
10
Fichier
source
Extension
:
.java
Nom
du
chier
=
nom
de
la
classe
publique
Respecter
la
casse
Exemple
1
classe
publique
par
chier
Pas
de
point
virgule
en
n
de
classe
!
Mlange
dclaraDon
+
implmentaDon
+
commentaires
11
CompilaDon
Fichier
compil
:
.class
Pseudo-code
(byte-code)
Code
machine
javac Exemple.java
12
ExcuDon
Pseudo-code
interprt
par
la
JVM
Java
Virtual
Machine
java Exemple
Exercice
Tester
le
programme
Exemple
Consulter
la
documentaDon
Google
:
java
documentaDon
api
7
ou
8
h"p://docs.oracle.com/javase/7/docs/api/
h"p://docs.oracle.com/javase/8/docs/api/
14
DocumentaDon
15
Version
Plateforme
16
Sous-package
Variable
systme
Paramtres
en
ligne
de
commande
(-cp
ou
classpath)
17
Clause
import
SpcicaDon
complte
dune
classe
dun
package
qui
nest
pas
charg
par
dfaut
javax.swing.SwingUtilities;
EnumraDon
lunit
Par
package
(*)
non
rcursif
;-(
import javax.swing.event.*;
18
L
E
G
A
C
Y
[1995]
[1998]
[2000]
[2002]
[2004]
[2006]
1.3
dbogage
1.4
performances
nio
1.5
-
patrons
/
templates
3279
classes
[2010]
[2011]
[2014]
19
Aujourdhui
?
Java
7
update
71/72
Open
JDK
SimplicaDon
de
syntaxe
Framework
de
paralllisaDon
Java
8
update
25
Streams
Lambdas
Code
dans
les
interfaces
etud
Java
7
u71
berzet
Java
8
u20
Java
9
?
2016
?
Modularit
20
Plateforme
L
Plus
grosse
dicult
du
java
connatre
ces
classes
standards
classes
deprecated
J
DocumentaDon
bien
faite
:
javadoc
&
tutoriels
java showversion
javac -version
// version > 1.3,
// options : source et -target
21
DistribuDon
?
Usage
ExcuDon
seule
(JRE)
Dveloppement
(JDK
<
2,
SDK
v
2)
Cibles
Standard
Java
SE
/
J2SE
Entreprise
Java
EE
/
J2EE
Micro
Java
ME
/
J2ME
(v
5)
22
3.
NoDons
de
base
Syntaxe
{
Accolades
}
public class Exemple
{
public static void main(String[] argv)
{
// afficher un commentaire monoligne
/* commentaire
sur plusieurs lignes
*/
/** commentaire javadoc
*/
}
}
Classe
Mthode
Bloc
:
ensemble
squenDel
dinstrucDons
24
A"ribut
/
Variable
?
Objet
Prdni
ou
uDlisateur
Chane
de
caractres
:
String
"Essai"
ManipulaDon
par
rfrences
(pointeurs
?)
Scalaire / PrimiDve
boolean
true
ou
false.
non
homomorphe
aux
enDers
types enDers
byte
(8
bits)
short
(16
bits)
int
(32
bits)
long
(64
bits)
types
rels
float
(32
bits)
double
(64
bits)
26
Mthodes
toString()
Double.parseDouble()
27
DclaraDon
de
variables
public static void main(String[] argv) {
int
i = 0;
char
c = 'A';
Classe
objet;
String
s;
double
d = 1.0;
float
f = 1.3f;
double[] tableau;
}
{
int i = 0 ;
{
int j= 3 ;
// i est utilisable dans ce bloc
}
// j nest plus disponible ici
}
{
int
i = 0 ;
boolean b = true;
{
double i= 3 ;
boolean b = false;
}
}
29
ManipulaDon
de
variables
public static void main(String[] a) {
int i = 0;
i = i + 1;
i += 1 ;
i *= 2 ;
System.out.println(i) ;
System.out.println(++i) ;
System.out.println(i) ;
System.out.println(i++) ;
System.out.println(i) ;
i = (int) 10.6;
}
30
CondiDon
(1)
if (test) {
}
Test
(i==5)
(i!=5)
Oprateur
ternaire
(test)?VRAI:FAUX
if (test) {
} else {
}
boolean b1 =(i==5);
boolean b2 = !b1;
CondiDon
(2)
if (test) instruction1;
else instruction2;
if (b1)
if (!b1)
Oprateur NON
CondiDon
(3)
switch (variable) {
case valeur1 :
instructions;
break;
case valeur2 :
case valeur3 :
instructions;
break;
default:
instructions;
[break;]
}
33
Boucles
condiDonnelles
for (initialisation;test;incrmentation) {
}
for (int i=0;i<10;++i)
System.out.println(i);
while (test) {
Accolades
facultaDves
s'il
ny
a
qu'une
instrucDon
do {
} while (test);
34
{ }
}
{
for (int i=0; i<10; ++i)
for (int i=0; i<10; ++i)
{
{
}
}
int i;
for (int i=0; i<10; ++i)
{ }
}
{
}
35
Tableaux
(1)
// cration d'un tableau vide de 10 entiers
int[] t1 = new int[10];
// dclaration d'un tableau sans lment
int[] t2;
for(int i=0; i<t1.length; ++i)
System.out.println(t1[i]);
Tableaux
(2)
IniDalisaDon
du
tableau
Par
des
valeurs
scalaires
Par
des
rfrences
nulles
t1[i] = ?;
"Librer"
un
tableau
t1 = null;
Tableau
mulDdimensionnel
String[][] chaines = new String[10][5];
37
38
Que
se
passe-t'il
?
String s3 = s1 + " " + s1;
39
String
String
String
String
String
String
s1
s2
s3
s4
s5
s6
=
=
=
=
=
=
"loic" ;
"loic";
new String("loic");
new String("loic");
s3;
null;
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s3==s4);
System.out.println(s5==s3);
System.out.println(s1.equals(s3));
System.out.println(s1.equals(s6));
System.out.println(s6.equals(s1));
40
ManipulaDon
de
chanes
// Un peu vieux, utiliser plutt split OU
// java.util.regex
StringTokenizer st =
new StringTokenizer("Quelle boucherie !");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
String[] result =
"et a dcoupe toujours".split("\\s");
for (int i=0; i<result.length; i++)
System.out.println(result[i]);
41
FoncDon
main
public static void main(String[] argv);
argv
:
tableau
de
chanes
de
caractres
Paramtres
de
la
ligne
de
commande
42
Ligne
de
commande
Acher
les
paramtres
de
la
ligne
de
commande
String[
]
tab
:
tableau
de
chanes
de
caractres
tab.length
:
longueur
du
tableau
43
4. Concepts objets
RelaDons
45
ConvenDon
:
Classe
=
type
Nom
avec
majuscule
A"ributs
A"ribut
de
classe
Modicateurs
de
mthode
Mthode
publique,
visible/appelable
par
tout
le
monde
Mthode
de
classe
Mthode
non
rednissable
Type
de
retour
Paramtre(s)
public static final int methode(double d);
Pas
de
valeur
par
dfaut
pour
les
arguments
[C++]
47
Constructeur
IniDaliser
les
a"ributs
d'un
nouvel
l'objet
Syntaxe
dirente
dune
mthode
Porte
le
mme
nom
que
la
classe
Pas
de
type
de
retour
Surcharge
de
constructeur
Appel
de
constructeurs
avec
paramtres
A"ributs
public Cours() {
nbEtudiants = 0; this(0);
}
Constructeurs
public Cours(int n) {
nbEtudiants = n; setNbEtudiants(n);
}
A
rpter
n) {
public void setNbEtudiants(int
Pas
de
public:
[C++]
nbEtudiants = n;
}
public int getNbEtudiants() { Accesseur/Mutateur
Ge"er/se"er/mutator
return nbEtudiants;
}
public boolean isPassionnant()
}
{ return passionnant; }
49
Crer
un
objet
Demander
la
mmoire
la
JVM
Oprateur
new
Appeler
le
constructeur
Classe instance = new Classe(paramtres);
Cours
unCours = new Cours(24);
(instance == null)
50
UDliser
un
objet
Accder
un
membre
=
Oprateur
point
l'extrieur
de
la
classe
instance.methode();
instance.attribut;
unCours.isPassionnant()
Rfrence
valide
?
Null Pointer exception
Membre
visible
Niveaux
d'accs
(public/priv/package)
Interface
de
classe
EncapsulaDon
51
Exercice
:
Grer
un
parc
de
vhicules
crire
une
applicaDon
perme"ant
de
grer
un
parc
de
vhicules
d'une
socit
possdant
des
voitures
des
camions
1. Crer
des
classes
simples
sans
relaDon
2. Instancier
des
classes
3. tudier
l'hritage
et
le
polymorphisme
4. tudier
les
autres
relaDons
53
O
me"re
le
main()
?
Quelles
classes
compiler
?
Quelle
classe
excuter
?
Voiture
-
immat
:
Chane
-
couleur
:
enDer
-
places
:
enDer
+
acher()
+
avancer()
Camion
-
immat
:
Chane
-
capacit
:
rel
+
acher()
+
avancer()
54
1
chier
:
GesDon1.java
3
classes
non
imbriques
import vehicule.Camion;
public class Gestion3 {
// classe pour le programme
public static void main(String[] a) {
vehicule.Voiture v;
! Camion c;
}
}
package vehicule;
./
GesDon3.java
vehicule/Voiture.java
public class Voiture {
vehicule/Camion.java
String immat;
Compiler
GesDon3
=
Voiture() {}
void avancer() {}
dpendances
}
Excuter
GesDon3
57
Fichiers
jar
java jar fichier.jar
58
Camion
-immat
:
Chane
-capacit
:
rel
+
acher()
+
avancer()
Mthode nalize( )
EncapsulaDon
// classe A avec encapsulation brise
class A {
A a = new A(2);
public int valeur 2
;
a.valeur = 5;
public A(int i) { valeur = i;}
}
2/ Changer limplmentation
sans impact sur lextrieur
// classe A avec encapsulation
class AE {
1/ Contrle daccs
private int valeur 2
;
public AE(int i) { setValeur(i);}
final public int getValeur() { return valeur; }
final public void setValeur(int v)
{ valeur = v; }
AE ae = new AE(0);
}
ae.setValeur(3);
ae.valeur = 5;
62
public class B {
static void methode1(A a) {
a = new A(2);
}
static void methode2(A c) {
c.valeur = 3;
}
Digression
static A methode3(A b) {
b = new A(4);
return b;
}
public static void main(String[] param) {
A a = new A(1);
methode1(a);
methode2(a);
A@adresse
a = methode3(a);
}
}
63
Au
chargement
de
la
classe
InstrucDons
spciques
excutes
au
chargement
de
la
classe
dans
la
JVM
Pas
l'instanciaDon
d'objet
Plus
gnral
que
l'iniDalisaDon
des
a"ributs
staDques
static int[] tab = new int[100];
class Exemple {
static int[] tab;
static {
// excut au chargement de la classe
tab = new int[20];
for(int i=0; i<20; ++i) tab[i] = 2*i;
}
}
64
Hritage
(1)
F
hrite
de
M
?
CondiDons
M
F
Hritage
(2)
public class F extends M {
public F() {
super(); // appel du constructeur de M
// initialisations spcifiques
}
}
Rfrence
this
public class C {
String chaine1, chaine2;
public C() {
chaine1 = "CHAINE1";
chaine2 = "CHAINE2" ;
}
void methode1(String chaine1, String c) {
this.chaine1 = chaine1;
chaine2
= c;
}
void methode2() {
methode1("e","f");
this.methode1("",""); // utile ?
}
}
67
Noms
qualis
class M {
NOTE
:
Ce
code
compile
protected int a;
}
public class F extends M {
protected double a;
public void toto() {
a
this.a
super.a
((M)this).a
((F)this).a
}
}
68
Polymorphisme
Forme
faible
Surcharge
de
mthode
overloading
StaDque
(compilaDon)
Mthodes
de
signatures
direntes
Voiture
+
avancer(temps
:
enDer)
+
avancer(distance
:
rel)
Forme forte
RedniDon
overriding
"Surcharge"
dynamique
(abus
de
langage)
AcDons
direntes
pour
des
classes
d'une
mme
hirarchie
Vhicule
Voiture
+ acher();
+
acher();
69
3-
Hriter
crire
une
classe
Vhicule
qui
reprend
les
caractrisDques
communes
des
classes
Voiture
et
Camion
Nous
allons
modier
les
classes
pour
tester
le
polymorphisme
Voiture
?
?
Vhicule
?
?
Camion
?
?
70
class Vehicule {
String immat;
public Vehicule(String im) {
immat = im;
}
public void afficher() {
S.o.p("Je suis un vehicule "+immat);
}
Voiture v = new Voiture("300 ISI 63");
}
v.afficher();
class Voiture extends Vehicule {
String immat;
public Voiture(String im) {
super(im);
}
// afficher ?
}
71
73
Mthodes nales
java.lang.Object
clone()
Rappel
:
on
ne
teste
pas
l'galit
nalize()
de
deux
objets
avec
==
toString()
getClass().getName()
equals()
doivent
tre
cohrentes
hashCode()
Deux
objets
gaux
ont
le
mme
hashcode
Ne
doit
pas
changer
pour
une
excuDon
Deux
objets
disDncts
peuvent
avoir
le
mme
75
Clonage
Copier
un
objet
pour
ne
pas
le
modier
Pas
de
constructeur
de
copie
Implmenter
Cloneable
Sert
seulement
prvenir
le
compilateur
ExcepDons
traites
au
chapitre
suivant
77
Niveaux
d'accs
Priv
|
private
:
mme
classe
Protg
|
protected
:
mme
package
ou
sous-classe
dun
package
dirent
Moins
restricDf
que
le
C++
!
Dirent
en
UML
galement
public class C1 {
public int a;
protected int b;
int c;
private int d;
Package
p2
public class C4 extends C1 {
...
}
public class C2
extends c1 {
...
}
public
class C3 {
public class C5 {
...
...
Accessible
par
C2
Accessible
par
C3
Accessible
par
C4
Accessible
par
C5
d
79
Classe
abstraite
Toute
classe
avec
au
moins
une
mthode
abstraite
OU
ALORS
toute
classe
dclare
comme
telle
(sans
abstract,
elle
serait
instanciable)
Non
instanciable
Permet
d'implmenter
la
noDon
de
concept
80
81
Interface
(1)
DescripDon
/
contrat
<<interface>>
FloJant
+
oJer()
+
avancer()
8
Liste
de
mthode(s)
sans
code
"Constantes"
autorises
(public
staFc
nal
par
dfaut)
Pas
de
variable/a"ribut
[UML]
Classe
virtuelle
pure
[C++]
interface Flottant {
public static final int CONSTANTE = 30;
double PI = 3.14;
par dfaut
Interface
(2)
[Vocabulaire
]
IMPLEMENTER
une
interface
public class Bateau implements Flottant {
public void flotter() {}
public void avancer() {}
}
83
84
Interface
(3)
ImplmentaDon
mulDple
dinterfaces
RAPPEL
:
Hritage
simple
seulement
public class B extends A implements IC, ID {
//
}
85
Hritage mulDple ?
tend
implmente
class H extends A, B {
}
86
Vhicule
Vhicule
+ avancer()
+
avancer()
<<interface>>
FloJant
+
oJer()
+
avancer()
avancer()?
C++
:
hritage
virtuel
conit
de
mthode
?
pas
de
conit
87
Interface
(4)
Hritage
mulDple
d'interfaces
interface IC {
}
interface ID {
}
interface I extends IC, ID {
//
}
88
90
Tableau
De
scalaires
int,
double,
char,
Une
case
=
un
scalaire
uDlisable
directement
D'objets
92
Rsum
[Modificateur]* class identifiant
[extends
classe_de_base ]
[implements interface {, interface}*
}
] {
5. ExcepDons
ExcepDons
Manire
lgante
et
ecace
de
grer
les
erreurs
potenDelles
dexcuDon
FoncDonnement
similaire
au
C++
95
Double.parseDouble(chaine);
"dix"
"10.5"
un
double
Cas
normal
Reporter
l'erreur
au
niveau
suprieur
une
excep7on
Cas
"excep7onnel"
Comportement
adapt
Surveiller
le
code
Traiter
l'erreur
96
Exemple
public void somme(String chaine) {
res = Double.parseDouble(chaine);
total += res;
Erreur
de
compila7on
}
public void saisie {
String chaine = System.console().readLine();
while (!chaine.isEmpty()) {
somme(chaine);
chaine = System.console().readLine();
}
97
98
Reporter
l'erreur
public void somme()
throws NumberFormatException {
double res = .0;
res = Double.parseDouble(chaine);
total += res;
Dclara7on
de
lerreur
poten7elle
}
Obligatoire
p
our
le
compilateur
public void saisie() {
somme(chaine);
}
GesDon
direncie
RunDmeExcepDon
NullPointerExcepDon
IndexOutOfBoundsExcepDon
FileNotFoundExcepDon
100
101
Mme traitement ?
try {
// bloc surveiller
} catch (NumberFormatException e) {
e.printStackTrace();
throw e;
} catch (IOException e) {
e.printStackTrace();
throw e;
Mme
traitement
}
try {
// bloc surveiller
} catch (NumberFormatException |
IOException
e ) {
e.printStackTrace();
throw e;
}
102
Bloc
nally
OpDonnel
TOUJOURS
excut
Mme
si
aucune
excepDon
n'a
t
leve
Mme
si
une
instrucDon
conFnue,
break
ou
return
se
trouve
dans
le
bloc
try
Sauf
n
de
thread
ou
de
JVM
103
ExcepDon
personnalise
ExcepDon
drive
de
Throwable
Error
Exception
Driver
dException
Surcharger
Constructeur (String message)
OU
Rednir
getMessage()
Conclusion excepDonnelle
106
6.
Bibliothques
graphiques
AWT
&
Swing
AWT
vs
Swing
Abstract
Window
Toolkit
(java.awt.*)
Swing (javax.swing.*)
Toujours
en
voluDon
Plus
complexe
qu'AWT
Composants
lgers
Surcouche
d'AWT
(Jcomposant)
109
110
Swing
Composants
de
haut-niveau
(lourds)
JFrame,
JDialog,
JApplet
Conteneurs
Composants basiques
Dessiner
http://download.oracle.com/javase/tutorial/ui/features/components.html
111
112
113
114
115
Cas 1
Calcul
de
la
taille
Et
ac
hage
invokeLater(new Runnable() {
public void run() {
// faire qq chose
}
});
118
Cas 2
public MonApplication() {
frame = new JFrame("Mon Application");
}
static public void main(String[] argv) {
MonApplication ma = new MonApplication();
ma.afficher();
}
}
Cas 3
119
JOptionPane.showConfirmDialog(frame,
"Alors, a vous plat ?");
121
122
PosiDonnement
Placer
des
composants
Taille
(xe,
minimale,
maximale
et
prfre)
PosiDon
relaDve
(portabilit)
PosiDon
absolue
(extension
JBuilder)
124
Complexe
mais
puissant
Horizontal
ou
verDcal
Formulaire
h"p://download.oracle.com/javase/tutorial/uiswing/layout/visual.html
125
Flow
Box
Border
Grid
Card
GridBag
Spring
Aucun
On
teste
Tester
le
BorderLayout
avec
un
bouton
dans
chaque
zone
Nord,
Sud,
Est,
Ouest,
Centre
Tester le FlowLayout
Changer
la
taille
de
la
fentre
127
contentPane (JFrame)
frame.getContentPane().add(pane, BorderLayout.CENTER);
128
ContentPane
Layout
Manager
C1
C2
Cn
Glass Pane
129
vnements
(1)
CommunicaDon
entre
les
composants
d'une
applicaDon
et
l'uDlisateur
Envoi
de
messages
Appel
de
mthodes
dune
interface
130
vnements
(2)
AcDver
un
JBu"on
AcDon
Choisir
un
menu
Appuyer
sur
une
touche
(focus)
Appuyer
/
relcher
un
bouton
de
souris
Entrer
ou
sorDr
dun
composant
avec
la
souris
Dplacer
la
souris
Regroupement
foncDonnel
=
UDliser
la
mole"e
MouseListener
Dplacer
la
fentre
Rduire
la
fentre
Fermer
la
fentre
Changer
la
taille
131
2. Enregistrer
le
gesDonnaire
JButton bouton = new JButton("Libell");
bouton.addActionListener(new Gestionnaire());
Acher
une
boite
de
dialogue
avec
le
programme
prcdent
132
MouseEvent
MouseListener
Spcique
l'vnement
Liste
des
mthodes
/
messages
possibles
composant.addEventListener()
addMouseListener()
Adapter
Patron
de
concepDon
/
design
paJern
ImplmentaDon
"vide"
de
convenance
ActionAdapter n'existe pas !
AbstractAction existe
MouseAdapter
Toujours
possible ?
133
134
MonBouton
#compteur
:
int
GesDonnaire
?
+
MonBouton();
+
incrementer();
DEPRECATED
AcDonListener
135
Qui"er
136
Contexte
graphique
Bote
dessin
Associ
une
fentre
ou
une
image
Classe
java.awt.Graphics
Couleur
Mode
de
dessin
(XOR
)
Police
de
caractres
AcDons
basiques
(
drawXXX,
llXXX)
Classe
java.awt.Graphics2D
Plus
de
foncDonnalits
en
dessin
Changement
de
repre,
transformaDons
137
x
(x1,y1)
height
width
138
Dessiner
Canvas
[AWT]
Composant
"lourd"
void paint(Graphics g)
JPanel [Swing]
Composant
lger
Opacit
void paintComponent(Graphics g)
paint() existe
mais
139
JCanvas
tendre
la
classe
JPanel
Opaque
?
double
buering
?
Layout
inuDle
!
Rednir
paintComponent()
ne
jamais
appeler
directement
Appeler
super.paintComponent(g)
si
besoin
Eace
le
composant
140
SoluDon
?
contentPane (JFrame)
N
W
C
S
JBubon
+
gesDonnaire
(AcDon)
appelle
repaint()de
la
zone
de
dessin
ou
du
JFrame.
getParent().repaint()
JLabel
setPreferredSize(new Dimension(800,600));
JCanvas
Math.random()
tend
JPanel
rednit
paintComponent()
=>
dessin
commencer
par
un
rectangle
tout
simple
prcise
la
taille
prfre
142
Barre
de
menus
Fichier
Nouveau
Ouvrir
Sauvegarder
Qui"er
7. Concurrence (Threads)
Threads
(1)
Processus
"lger"
ExcuDon
simultane
/
concurrence
Partage
de
donnes
3
mthodes
Implmenter
run(
)
de
Runnable
Dlguer
un
Executor
5
(java.util.concurrent)
Rednir
la
mthode
run(
)
de
Thread
145
Threads
(2)
// Exemple avec implmentation d'interface
// Modlisation : crer une nouvelle tche
class Tache implements Runnable {
// implmenter run()
}
CONSEILL
// AILLEURS :
Tache tache = new Tache();
(new Thread(tache)).start();
// Exemple avec spcialisation de classe
// Modlisation : crer un nouveau type de Thread
class Special extends Thread {
}
Special special = new Special();
special.start();
146
Threads
(3)
Scurit
d'accs
aux
mthodes
et
donnes
Mthode/statement
quali
synchronized
Variable
qualie
vola0le
Variable
qualie
nal
(Immutable)
148
Threads
et
Swing
Temps
inits
clic
gc
paint
AcDons
simples
successives
Fin
149
Toujours
dans
paintComponent()
Modle
MVC
Modle
/
Vue
/
Contrleur
Logique
applicaDve
vs
prsentaDon
Design(s)
pa"ern(s)
/
Patron
de
concepDon
153
Contrleur
Transmet
lacDon
Changement
dtat
Modle
AcDon
uDlisateur
Rafrachissement
NoDcaDon
changements
(Observer)
Donnes
Vue
Vue
(s)
Vue
154
java.nio
(java
4)
Mmoire
tampon
Buer
Canaux
+
Slecteurs
:
hautes
performances
TraducDon
des
jeux
de
caractres
java.nio2
SimplicaDon
Path
7
157
java.io.*
InputStream
File
FileDescriptor
Object
ByteArrayInputStream
BufferedInputStream
FileInputStream
DataInputStream
FilterInputStream
LineNumberInputStream
PipedInputStream
PushbackInputStream
SequenceInputStream
StringBufferInputStream
RandomAccessFile
ByteArrayOutputStream
OutputStream
StreamTokenizer
FileOutputStream
FilterOutputStream
PipedOutputStream
BufferedOutputStream
DataOutputStream
PrintStream
158
Flux
de
sorDe
conversion
ux sorFe
OutputStream
ux texte
DataOutputStream
FileOutputStream
ux binaire
chier sorFe
conversion
PrintStream
ux
cran
System.out
159
Flux
dentre
ux
entre
conversion
InputStream
DataInputStream
FileInputStream
ux binaire
ux
System.in clavier
chier entre
conversion
ux texte
StreamTokenizer
Tir
de
h"p://www.nawouak.net,
B.
Bachelet
ux
texte
(item
par
item)
160
Saisie
clavier
// Version 1 standard
// Attention aux exceptions souleves
InputStreamReader isr =
new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
br.readLine();
// Version 1.6
// les exceptions sont gres par la Console
System.console().readLine();
Try-with-resources
Ressource
Tout
objet
fermer
/
librer
aprs
uDlisaDon
Fichier,
ux,
chausse"e,
requte
7
162
try {
BufferedReader br = null;
FileReader
fr = null;
try {
ExcepDons
fr = new FileReader(nomFichier);
possibles
?
br = new BufferedReader(fr);
String lecture;
while ((lecture = br.readLine())!=null) {
//
}
br.close();
Pas
la
bonne
place
fr.close();
} catch (Exception e) {
Pas
la
bonne
place
non
plus
e.printStackTrace();
if (br!=null) br.close();
}
} finally {
if (br!=null) br.close();
if (fr!=null) fr.close();
}
} catch(Exception e) {
= duplicaDon de code
Bonne
place
Mais
excepDon
possible
163
// bloc try-with-resources
try (
BufferedReader br = new FileReader(nomFichier);
FileReader
fr = new BufferedReader(fr);
){
String lecture;
while ((lecture = br.readLine())!=null) {
//
}
} // Les ressources sont fermes automatiquement
catch (Exception e) {
e.printStackTrace();
}
SrialisaDon
(1)
Transformer
un
objet
prsent
en
mmoire
en
bits
Sur
un
disque
(Stockage
-
Persistance)
Sur
le
rseau
(CommunicaDon
RMI)
Les
infos
de
classe
ne
sont
pas
transmises
SrialisaDon
(2)
Mthodes
rednir
pour
un
comportement
parDculier
void writeObject(ObjectOutputStream out)
throws IOException;
void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException;
void readObjectNoData()
throws ObjectStreamException;
FileOutputStream
fos
= null;
ObjectOutputStream oos
= null;
try {
fos = new FileOutputStream("fichier.dat");
oos = new ObjectOutputStream(fos);
oos.writeObject(objects);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (oos!=null)
oos.close();
FileInputStream
fis
= null;
if (fos!=null)
fos.close();
ObjectInputStream
ois
= null;
}
try {
fis = new FileInputStream("fichier.dat");
ois = new ObjectInputStream(fis);
objects = (Composite) ois.readObject();
} catch (Exception e) {
Classe
de
l'objet
e.printStackTrace();
} finally {
if (ois!=null) ois.close();
if (fis!=null) fis.close();
}
167
SrialisaDon
en
XML
XMLEncoder
pour
les
objets
respectant
les
convenDons
NetBeans
XStream
pour
les
autres
;-)
Une
bibliothque
Ders
168
FileOutputStream
fos
= null;
XStream
xstream = null;
try {
fos = new FileOutputStream(name);
xstream = new XStream();
xstream.toXML(objects, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos!=null) fos.close();
}
FileInputStream
fis
= null;
XStream
xstream = null;
try {
fis = new FileInputStream(name);
xstream = new XStream();
objects = (Composite)xstream.fromXML(fis));
} catch (Exception e) {
e.printStackTrace();
Classe
de
l'objet
} finally {
if (fis!=null) fis.close();
}
169
TP "Houzehou"
Houzehou
Personne
// tableau statique
static int MAX = 50;
Personne[] p1 = new Personne[MAX];
p1[0] = new Personne();
// tableau dynamique (Legacy ou thread-safe)
Vector<Personne> p2 = new Vector<Personne>();
p2.addElement(new Personne());
// tableau dynamique avec "erasure"
Vector p2 = new Vector();
p2.addElement(new Personne());
// Liste : ArrayList, LinkedList,
ArrayList<Personne> p3 = new ArrayList<Personne>();
p3.add(new Personne());
new StringBuffer(nom+":"+prenom);
171
Constructeur() {
Constructeur(int b) {
a = null;
a = null;
DuplicaDon
d
e
c
ode
!!!
b = 1;
this.b = b;
}
}
Constructeur() {
init(null, 1);
}
Constructeur(int b) {
init(null, b);
}
(SorDe du constructeur)
Constructeur() {
this(null, 1);
}
Constructeur(int b) {
this(null, b);
}
Constructeur(O a, int b) {
this.a = a;
this.b = b;
}
172
s
t
n
e
m
l
p
Com
A
V
JA
a
aussi
c'est
important
ditions
173
Plan
Plus
d'exemples
avec
JAVA
EnumraDon,
Ajouts
5,
6
et
7,
pas
encore
8
Langage
ConvenDons (1)
DocumentaDon
ocielle
Tutoriaux
SUN/Oracle
Respect
l'criture,
facilit
de
lecture
ProducDon
rapide
177
ConvenDons
(2)
Nom
de
classe
ou
interface
Premire
le"re
majuscule
Reste
en
minuscules
Majuscules
aux
mots
composs
class
CoursGenial
Mthode
int attribut;
ConvenDons
(3)
Accesseur
/
Accessor
get
+
nom
de
l'a"ribut
is
pour
un
boolen
getAttribut()
isAttribut()
Mutateur/Mutator
set
+
nom
de
l'a"ribut
setAttribut()
"Constante"
Tout
en
majuscules
CONSTANTE
Package
Tout
en
minuscules
fr.isima.paquetage
179
numraDon
?
(<1.5)
Pas
de
vricaDon
de
type
Achage
de
la
valeur
sans
intrt
public
public
public
public
static
static
static
static
final
final
final
final
int
int
int
int
LUNDI
MARDI
MERCREDI
JEUDI
=
=
=
=
0;
1;
2;
3;
180
numraDon
enum Semaine { LUNDI, MARDI, MERCREDI,
JEUDI, VENDREDI, SAMEDI, DIMANCHE}
for (Semaine jour : Semaine.values())
System.out.println(jour);
for (Semaine j :
EnumSet.range(
Semaine.LUNDI,
Semaine.VENDREDI))
System.out.println(j);
Dangereux
mais
uDle
:
le
staDc
import
h"p://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html
181
Enum
amliors
enum Nom { VAL1(1), VAL2 (2);
private int valeur;
Nom(int i) { this.valeur = i };
}
enum Nom {
VAL1 { retour methode(params) {}},
VAL2 { retour methode(params) {}};
abstract retour methode(params);
}
182
AnnotaDon
Dveloppeur
Compilateur
Machine
virtuelle
GnraDon
code,
documentaDon,
conguraDon
AnnotaDons
standards
@Override
@SuppressWarnings
@SuppressWarnings(value="deprecaDon")
@SuppressWarnings("deprecaDon")
@SuppressWarnings({"unchecked",
"deprecaDon"})
@Deprecated
@Documented
DocumentaDon
@RetenDon(RetenDonPolicy.RUNTIME)
ExcuDon
class Mere {
public void methode() {
System.out.println("Methode de Mere");
}
}
class Fille extends Mere {
@Override
public void Methode() {
System.out.println("Methode de Fille");
}
}
Fille f = new Fille();
f.methode();
The
method
Methode()
of
Fille
must
override
or
implement
a
supertype
method
185
AnnotaDons
personnalises
@interface ClassPreamble {
String author();
String date();
int currentRevision()
default 1;
String lastModified()
default "N/A";
String lastModifiedBy() default "N/A";
String[] reviewers();
// utilisation possible des tableaux
}
Aller
plus
loin
:
h"p://download.oracle.com/javase/tutorial/java/javaOO/annotaDons.html
h"p://www.jmdoudoux.fr/java/dej/chap010.htm#annotaDons
186
Mthode
nombre
d'arguments
variable
Auto
unboxing
int n = nombre; // converti automatiquement
int n = nombre.intValue();
188
Gnricit
&
CollecDons
Gnricit
Classes
paramtres
Mthodes
paramtres
Wildcards
(<?
extends
classe>)
En
lecture
(pas
en
craDon)
DniDon gnrique
Pas de typedef
Plus
de
renseignements
:
h"p://www.oracle.com/technetwork/java/javase/generics-tutorial-159168.pdf
190
Gnricit : exemple
CollecDons
(1)
Grer
des
collecDons
dynamiques
d'objets
Conteneurs
non
gnrique
d'objets
de
classe
Object
Conteneurs
gnriques
5
IncompaDbilit
de
plateforme
Algorithmes
Tri
Recherche
ManipulaDon
Paquetage
java.util
h"p://docs.oracle.com/javase/tutorial/collecDons/index.html
192
CollecDon
(2)
interface
CollecDon
interface
Map
implmente
interface
Set
K,T
implmente
interface
List
interface
Queue
K,T
SortedMap
interface
implmente
T
SortedSet
interface
Vector
CollecDons
(3)
Avant
Java
1.5
Conteneurs
d'Object
Downcast
obligatoire
Vector
Enumeration
Dictionary
(Hashtable)
[Vecteur
dynamique]
[itrateur]
[Map]
Aprs 1.5
5
194
Exemple
(gnrique)
Vector<Integer> v = new Vector<Integer>();
// on ne peut toujours pas stocker de int
for (int i=0; i<10; ++i)
v.addElement(new Integer(i));
// plus de transtypage
int somme = 0;
for (int i=0; i<10; ++i)
somme += v.elementAt(i).intValue();
// avec une numration, elle aussi paramtre
Enumeration<Integer> e = v.elements();
while (e.hasMoreElements())
somme += e.nextElement().intValue();
196
Applet
Applet
/
Applique"e
Embarque
dans
une
page
Ouaib
BuDneur
OuDl
appletviewer
Java
plug-in
Bientt
obsolte
?
(HTML5)
Code
HTML
ConDent
une
balise
dcrivant
l'applet
excuter
Dans
un
chier
.class
Dans
un
chier
.jar
<applet code="Exemple.class"
codebase="."
archive="ex01.jar, ex02.jar"
width="600" height="95">
<param name="param1" value="1000">
<param name="nom" value="loic">
</applet>
200
Code
JAVA
public String getParameter(String)
OuDls
OuDls
1.
2.
3.
4.
javadoc
appletviewer
jar
Netbeans
203
javadoc
OuDl
externe
pour
gnrer
une
documentaDon
au
format
HTML
(similaire
la
documentaDon
ocielle
Java)
/**
*/
L
Lisibilit
du
code
L
Le
code
doit
compiler
L
Ne
fait
pas
tout
!
204
javadoc
?
Commentaires
spciaux
PersonnalisaDon
avec
code
HTML
ou
CSS
Balises
@param
@return
@throws
@excepDon
@see
@since
@deprecated
@author
/**
*/
Exemple
/**
* Description de la classe
*
*/
class ExempleJavaDoc {
/**
* description courte
*
* description longue
* @param param1 description
* @param param2 description
* @return le resultat de la methode
*/
public int methode(int param1, double param2) {}
}
206
Appletviewer
Excuter
une
applet
sans
buDneur
appletviewer page.html
207
jar
Java
ARchive
Excutable
(
tar)
Format
de
chier
compress
Contrle
de
version
par
exemple
Permet
de
distribuer/dployer
une
applicaDon
(autonome
ou
applet,
JEE)
un
package
Contenu
Fichiers
.class
Fichiers
ressources
(images)
Fichier
Manifest
208
Java
Plug-in
Pour
les
Applets
h"p://download.oracle.com/javase/tutorial/deployment/index.html
209
Bibliographie
(1)
DocumentaDon
JAVA
de
Sun/Oracle
Tutoriaux
Web
de
Sun/Oracle
h"p://download.oracle.com/javase/tutorial/
211
Bibliographie
(2)
Thinking
in
Java,
2nd
ed,
Bruce
Eckel
Head
First
Java,
2nd
ed,
Kathy
Sierra,
Bert
Bates
,
O'Reilly,
2005
212
IntrospecDon
Gnriques
Rseau,
RMI
Threads
avancs
JNLP
OuDls
Ant,
Maven
Netbeans,
IntelliJ
IDE
Java
Entreprise
Glasssh,
tomcat
Servlets,
jsp,
beans
Persistance
(JPA,
Hibernate)
Facelets
(JSF)
Frameworks
:
Struts,
Spring,
213