Rappel & API Java
Adil Kellouai
Plan du cours
1. Introduction gnrale
2. Base du langage Java
3. Programmation oriente objets en Java
4. Les collections
5. La gestion des Exceptions
6. Multithreading
Rappel Java
I. Introduction gnrale
Cest quoi Java
Java est un langage de programmation
Un programme Java est compil et interprt
Java est une plateforme
La plateforme Java (software uniquement) est excute sur la
plateforme du systme dexploitation
La Java Platform est constitue de :
La Java Virtual Machine (JVM)
Des interfaces de programmation dapplication (Java API)
Avantages du langage Java
Simplicit et productivit:
Intgration complte de lOO
Gestion mmoire ( Garbage collector )
Grand nombre dAPI disponible
Robustesse et fiabilit
Gestion des erreurs software (Exceptions)
Garbage collector pour la libration de la mmoire
Langage fortement typ
Indpendance par rapport aux plateformes (portable)
Ouverture:
Support intgr dInternet
Connexion intgre aux bases de donnes (JDBC)
Support des caractres internationaux (UTF-8)
Plateforme Java
Plateforme = environnement hardware ou software sur
lequel le programme est excut.
La Java Platform se compose de:
la Java Virtual Machine (Java VM)
la Java Application Programming Interface (Java API)
Plateforme Java
Java Application Programming Interface (API)
LAPI Java est structur en libraires (packages). Les packages
comprennent des ensembles fonctionnels de composants (classes)..
Le noyau (core) de lAPI Java (incluse dans toute implmentation
complte de la plateforme Java) comprend notamment :
Essentials (data types, objects, string, array, vector, I/O,date,)
Applet
Abstract Windowing Toolkit (AWT) et Swing pour les interfaces graphiques
Basic Networking (URL, Socket TCP or UDP-,IP)
Evolved Networking (Remote Method Invocation)
Internationalization
Security
..
Plateforme Java
Java Virtual Machine
Une machine virtuelle software qui tourne sur dautres
machine hardware
Lit le bytecode compil (indpendant de la plateforme)
fournit dans des fichiers .class
Implmente pour diffrents environnements hardware
(Windows 32, 64, Linux )
Cest lenvironnement dexcution unique des
applications Java
Dploiement dun programme (1/2)
La compilation dans les langages compils
MyProgram.c
Excut une seule fois
Mais diffrent pour
chaque environnement
Compiler
MyProgram.o
010110
Gnre du code natif directement
excutable, mais spcifique
chaque environnement
Dploiement dun programme (2/2)
La compilation en Java
Chaque programme est compil et interprt
Write once run everywhere
[Link]
Excut une seule fois
Compiler
Traduit le programme en un code intermdiaire
Appel bytecode indpendant de la machine
[Link]
Chaque fois que le
programme est excut
JVM
010110
Lit le bytecode et lexcute sur la machine
Introduction Java
II. Bases du langage
Survol du chapitre
Commentaires dans le code source
Identificateurs
Mots-cl
Types primitifs et types de rfrences
Les tableaux ( Array )
La classe String
Arithmtique et oprateurs
Instructions de contrle
If, then, else
For
While
Do While
Break et Continue
Packages
Commentaires dans le code source
Trois faons dinclure des commentaires :
Tout texte entre // et la fin de la ligne
// Commentaires sur une seule ligne
Tout texte entre /* et */
/* Commentaires
sur un nombre important voire trs important
de lignes */
Les textes entre /** et */ sont utiliss pour crer des commentaires que
lexcutable JAVADOC pourra traiter afin de produire une documentation (cf.
documentation de lAPI Java)
/** Commentaires destins
la documentation */
Identificateurs
Un identificateur (identifier) permet de dsigner une classe, une
mthode, une variable
Rgles de dfinition des identificateur :
Interdiction dutiliser les mots-cls
Doit commencer par :
Une lettre
Un $
Un _ (underscore)
Ne doit pas commencer par :
Un chiffre
Un signe de ponctuation autre que $ ou _
Mots-cl
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Types primitifs et types de rfrence
Java est un langage fortement typ
Le type de donnes prcise
les valeurs que la variable peut contenir
les oprations que lon peut raliser dessus
Deux types de donnes:
Donne primitive: contient physiquement la valeur
(caractre, nombre, boolen)
Rfrence: contient ladresse mmoire o linformation relative lobjet est
rellement stocke
Rfrence:
Adresse
Types primitifs et types de rfrence
Types de donnes primitifs
Chart Title
Primitive Data Types
Integral
byte
8bits -128 to 127
short 16bits -32768 to 32767
int
32bits -2^31 to 2^31-1
long 64 bits -2^63 to 2^63-1
Textual
char 16bits 0 to 65535
Floating
float 32bits 1.4E-45 3.4E38
double 64bits 4.9E-324 1.8E308
Logical
one bit : true or false
Types primitifs et types de rfrence
Types de donnes primitifs
Exemple:
int a = 5;
int b = 8;
a=b;
a=8
Dclaration et initialisation de 2 entiers: a et b
Affectation de la valeur de b a
b=8
Dsormais, il existe deux variables en mmoire qui ont la
mme valeur
Types primitifs et types de rfrence
Types de rfrence
Tous les types hormis les types primitifs
Pointeur implicite sur un objet
Rfrence:
Adresse
Les tableaux (Array) (1/3)
Un tableau est utilis pour stocker une collection de variables de
mme type
On peut crer des tableaux de types primitifs ou de types de
rfrences
Un tableau doit tre
Dclar
Cr
Ses variables initialises
int[] nombres;
// dclaration
nombres = new int[10];
// cration
int[] nombres = new int[10]; // dclaration et cration
nombres[0] = 28;
// initialisation du 1er lment
Les tableaux (Array) (2/3)
On peut construire des tableaux plusieurs dimensions
Des tableaux plusieurs dimensions sont des tableaux de tableaux
int[][] matrice = new int[3][];
matrice[0] = new int[4];
matrice[1] = new int[5];
matrice[2] = new int[3];
matrice[0][0] = 25;
matrice est une rfrence vers
un tableau contenant lui-mme 3
tableaux de taille non dfinie
Le premier lment de la matrice
est une rfrence vers un tableau
de 4 entiers,
Le premier lment du premier
tableau de la matrice est un entier
de valeur 25
Exemple:
Crer et initialiser une matrice contenant deux tableaux de 2 et 3 points respectivement
Crer 5 objets de type Point
Affecter ces 5 objets aux 5 lments de la matrice
Les tableaux (Array) (3/3)
Point[][] matriceDePoints;
matriceDePoints
matriceDePoints = new Point[2][];
matriceDePoints[0] = new Point[2];
matriceDePoints[1] = new Point[3];
[0]
Point p1, p2, p3, p4, p5;
p1 = new Point(10,15);
10,15
ox0adfc12
p1
p2 = new Point(11,16);
p3 = new Point(12,17);
[0]
[1]
11,16
ox0adfc43
p2
12,17
dy0adfc14
p3
p4 = new Point(13,18);
p5 = new Point(14,19);
matriceDePoints[0][0] = p1;
matriceDePoints[0][1] = p2;
[0]
13,18
ox0fdfc17
p4
matriceDePoints[1][0] = p3;
[1]
[2]
matriceDePoints[1][1] = p4;
matriceDePoints[1][2] = p5;
[1]
14,19
ox0agrc57
p5
La classe String
String nest pas un type primitif, cest une classe
Dclaration de deux String:
String s1, s2;
Initialisation :
s1 = "Hello";
s2 = "le monde";
Dclaration et initialisation :
String s3 = "Hello";
Concatnation :
String s4 = s1 + " " + s2;
Arithmtique et oprateurs
Arithmtique lmentaire
Quelle est la valeur de : 5+3*4+(12/4+1)
Rgles de prcdences sur les oprateurs:
Niveau
1
Symbole Signification
()
Parenthse
Produit
Division
Modulo
Addition ou concatnation
Soustraction
Arithmtique et oprateurs
Oprateurs de comparaison
Pour comparer deux valeurs:
Oprateur
Exemple
Renvoie TRUE si
>
v1 > v2
v1 plus grand que v2
>=
v1 >= v2
Plus grand ou gal
<
v1 < v2
Plus petit que
<=
v1 <= v2
Plus petit ou gal
==
v1 == v2
gal
!=
v1 != v2
diffrent
Oprateurs logiques:
Oprateur
Usage
Renvoie TRUE si
&&
expr1 && expr2
&
expr1 & expr2
Idem mais value toujours les 2 expressions
||
expr1 || expr2
Expr1 ou expr2, ou les deux sont vraies
expr1 | expr2
idem mais value toujours les 2 expressions
! expr1
!=
expr1 != expr2
expr1 et expr2 sont vraies
expr1 est fausse
si expr1 est diffrent de expr2
Arithmtique et oprateurs
Oprateurs dassignation (daffectation)
Loprateur de base est =
Il existe des oprateurs dassignation qui ralisent la fois
une opration arithmtique, logique, ou bit bit
et lassignation proprement dite
Oprateur
Exemple
quivalent
+=
expr1 += expr2
expr1 = expr1 + expr2
-=
expr1 -= expr2
expr1 = expr1 expr2
*=
expr1 *= expr2
expr1 = expr1 * expr2
/=
expr1 /= expr2
expr1 = expr1 / expr2
%=
expr1 %= expr2
expr1 = expr1 % expr2
Instructions et structures de contrle
Dclarations, instructions, blocs
Une instruction
Ralise un traitement particulier:
Renvoie ventuellement le rsultat du calcul
Est comparable une phrase du langage naturel
Constitue lunit dexcution
Est toujours suivie de ;
Instruction daffectation (dassignation), instruction de dclaration
Un bloc
Est une suite dinstructions entre accolades { et }
Dlimite la porte des variables qui y sont dclares
Une dclaration
Constitue la signature dun lment (classe, variable ou mthode)
Annonce la dfinition de cet lment
Est (normalement) toujours suivie dun bloc dinstructions
Instructions et structures de contrle
Structures de contrle
Les structures de contrles permettent darrter lexcution linaire
des instructions (de bas en haut et de gauche droite)
Elles permettent dexcuter conditionnellement une instruction, ou de
raliser une boucle
Type dinstruction
Dcision
Boucle
Traitement dexceptions
Branchement
Mots cls utiliss
if() else switch() case
for( ; ; ) while () do while()
try catch finally throw
label : -- break continue -- return
Instructions et structures de contrle
Structures de contrle
IF THEN ELSE
if (expression)
{
//instructions
}
if (expression)
{
//instructions
}
else
{
//instructions dans les autres cas
}
Instructions et structures de contrle
Structures de contrle
SWITCH CASE
switch (number)
{
case 1 : instructions;
break;
case 2 : instructions;
break;
default : instructions;
}
Instructions et structures de contrle
Structures de contrle
FOR
for (initialisation; condition; mise jour de valeurs){
// instructions
}
Initialisation: excuter lorsque le programme rentre pour la premire
fois dans la boucle
Condition : remplir pour recommencer le bloc dinstructions
Mise jour: instruction excute chaque fois que la boucle est termine
Exemples:
for (int i=0 ; i<10 ; i++) {
[Link]("The value of i is : " + i);
}
Instructions et structures de contrle
Structures de contrle
WHILE DO WHILE
while (test logique) {
//instructions
}
Si le code de la boucle doit tre excut la premire fois de toute faon:
do {
// code to perform
} while (logical_test)
Boucle infinie:
while (true) {
//instructions
}
Instructions et structures de contrle
Structures de contrle
BREAK / CONTINUE
BREAK: achve immdiatement la boucle
CONTINUE: ignore le reste des instructions et recommence au dbut
de la boucle
for (int i=0; i<10 ;i++){
if (i==5) continue; // Si i=5, on recommence au dbut
if (i==7) break;
// Si i=7, on sort de la boucle
[Link]("The value of i is : " + i);
}
Instructions et structures de contrle
Structures de contrle
BREAK [LABEL]
CONTINUE [LABEL]
outer:
for (int i=0 ; i<10 ; i++)
for(int j=20;j>4;j--){
if (i==5) continue;
// if i=5, passer litration suivante de la boucle intrieur
if (i==7) break outer; // if i=7, arrter la boucle extrieur et continuer le programme
[Link](The value of i,j is :+i+
}
// suite du programme
,+j);
Les packages et les importations
Les packages offrent une organisation structure des classes
La rpartition des packages correspond lorganisation physique
La variable CLASSPATH indique le chemin daccs aux packages
Les packages permettent la coexistence de classes de mme nom
Les mots-cl associs sont package et import
Exemple:
package [Link]
package [Link]
class Chapitre
class Chapitre
class Paragraphe
package formation
class Paragraphe
import [Link]
package [Link]
class Chapitre
Exercices
Pair/Impair
Ecrire un programme qui gnre les multiples dun nombre donn
Affiche ces nombres lcran
Remplace les pairs par pair
Remplace les impairs par impair
Calcul de factorielle
Vrification si un entier est premier
Rappel Java
III. Les commandes de base
Les utilitaires de Java
javac
Compilateur, traduit fichier source .java en fichier bytecode .class
java
Interprteur java, lance des programmes
javadoc
Gnrateur de documentation dAPI
jar
Utilitaire darchivage et de compression
Les utilitaires de Java
Javac et Java
Javac
Compile un fichier source .java ou un package entier
Exemples:
javac [Link]
compile le fichier mentionn, qui doit se trouver dans le package par dfaut
javac be\newco\*.java d c:\classes
compile tout le package [Link] et gnre du code compil dans c:\classes, qui
doit exister
Java
Lance un programme principal
Exemples:
java [Link]
Lance le programme spcifi par la mthode public static void main(String[]
args) dans la classe MyProgram qui se trouve dans le package test.
Possibilit de spcifier un classpath un chemin de recherche o java est cens
de trouver ses classes
Les utilitaires de Java
Jar Utilitaire darchivage
Permet de grouper et compresser des fichiers utiliss par un
programme Java
Syntaxe dutilisation similaire tar
jar cf [Link] *.class
archivage de tout fichier .class, trouv dans le rpertoire courant et tout sousrpertoire, dans le fichier [Link]
jar xf [Link]
Extrait tout fichier contenu dans [Link] vers une structure de rpertoires
linterprteur java reconnat les fichiers .jar et peut les traiter comme
un rpertoire.
java classpath [Link] [Link]
Lance le main() contenu dans [Link], tout en ajoutant les fichiers
de [Link] dans le classpath
Introduction Java
IV. Programmation oriente objets en Java
Survol du chapitre
La cration dobjets: Constructeurs et mot-cl new
Les variables: Dclaration et porte
Les mthodes: Dclaration, interface et surcharge
Lencapsulation: public , private et protected
Les membres dinstance et de classe: static
Utilisation de lhritage: this et super
Conversion de types
Polymorphisme
Classes abstraites
Interfaces
La cration dobjets (1/2)
Le constructeur
A le mme nom que la classe
Quand un objet est cr, on invoque tout
dabord le constructeur de la classe
Un constructeur utilise comme arguments
des variables initialisant son tat interne
On peut surcharger les constructeurs, i.e
dfinir de multiples constructeurs
Il existe toujours un constructeur. Sil nest
pas explicitement dfini, il sera un
constructeur par dfaut, sans arguments
Signature dun constructeur:
Modificateur daccs ( en gnral public)
Pas de type de retour
Le mme nom que la classe
Les arguments sont utiliss pour initialiser les
variables de la classe
public BankAccount(String
n,int s)
{
name=n ;
solde=s;
}
public BankAccount(String n)
{
name=n ;
solde=0;
}
La cration dobjets (2/2)
Lappel au constructeur
Se fait pour initialiser un objet
Provoque la cration relle de lobjet en mmoire
Par linitialisation de ses variables internes propres
Se fait par lemploi du mot cl new
BankAccount ba1, ba2;
ba1 = new BankAccount("Bersini", 10.000);
ba2 = new BankAccount("Bersini");
Les variables
Dclaration des variables membres
Rappel: toute variable doit tre dclare et initialise
Les variables membres sont des variables dclares
lintrieur du corps de la classe mais lextrieur dune
mthode particulire, elles sont donc accessibles depuis
nimporte o dans la classe.
La signature de la variable :
optionnel
Les modificateurs daccs: indiquent le niveau daccessibilit de la variable
[static]: permet la dclaration dune variable de classe
[final]: empche la modification de la variable
[transient]: on ne tient pas compte de la variable en srialisant lobjet
Le type de la variable (ex: int, String, double, RacingBike,)
Le nom de la variable (identificateur)
Les variables
Porte dune variable et des attributs
Porte = Section du programme dans laquelle une variable existe
La variable ne peut donc pas tre utilise en dehors de cette section
La porte est dfinie par les accolades qui lentourent directement
Exemple:
if(solde < 0){
String avertissement = "Attention, solde ngatif !"
}
else{
String avertissement = "Tutti va bene !"
}
[Link](avertissement);
// Une erreur apparatra ds la compilation, car la variable
// avertissement nexiste pas en dehors du bloc IF
Avantages
Rend les programmes plus faciles corriger
Limite le risque derreurs lies au remploi dun nom pour diffrentes variables
Les variables
Types de rfrence (1/3)
Tous les types hormis les types primitifs
Pointeur implicite sur un objet
Rfrence:
Adresse
class Point{
int x=0, y=0;
Point(int x,int y){this.x=x;this.y=y;}
void move(int dx,int dy){x+=dx;y+=dy;}
}
Les variables
Types de rfrence (2/3)
Dclaration et cration dobjets
Dclaration : Point p;
????
Cration : p = new Point(2,3);
1. Cherche une place mmoire p
????
x
y
0
0
2. Excution du constructeur
????
x
y
2
3
3. Cration du pointeur
p ox0123abcd
x
y
2
3
Les variables
Types de rfrence (3/3)
Assignation dun type de rfrence
Point start=new Point(4,3);
Point end=new Point(23,32);
Il ny a dsormais plus de
rfrence vers lancien
Point start , il sera donc
dtruit par le Garbage
Collector
Point p=end;
p.x=12;
start=p;
start ox0123abcd
x
y
4
3
end
oxcafebabe
x
y
23 12
32
oxcafebabe
Les mthodes (1/3)
Dclaration dune mthode
Une mthode est compose de:
public void deposit (int amount) {
solde+=amount ;
Signature dune mthode:
Sa dclaration
Son corps
Modificateurs daccs : public, protected, private, aucun
Signature
[modificateurs optionnels] : static, native, synchronized, final, abstract
Type de retour : type de la valeur retourne
Nom de la mthode (identificateur)
Listes de paramtres entre parenthses (peut tre vide mais les parenthses sont
indispensables)
[exception] (throws Exception)
Au minimum:
La mthode possde un identificateur et un type de retour
Si la mthode ne renvoie rien le type de retour est void
Les paramtres dune mthode fournissent une information depuis
lextrieur du scope de la mthode (idem que pour le constructeur)
Les mthodes (2/3)
Passage darguments
Les arguments dune mthode peuvent tre de deux types
Variable de type primitif
Objet
Lorsque largument est une variable de type primitif, cest la valeur de
la variable qui est passe en paramtre
Lorsque largument est un objet, il y a, thoriquement, deux lments
qui pourraient tre passs en paramtre:
La rfrence vers lobjet
Lobjet lui-mme
A la diffrence de C/C++, Java considre toujours que cest la valeur
de la rfrence et non la valeur de lobjet qui est passe en argument
Les mthodes (3/3)
La surcharge de mthodes
La surcharge est un mcanisme qui consiste a dupliquer une
mthode en modifiant les arguments de sa signature
Java ne permet pas de surcharger une mthode en modifiant son
type de retour
Exemple:
int solde ;
public void deposit(int amount){
solde+=amount;
}
// lgal
public void deposit(double amount) {
solde +=(int) amount;
}
// illgal
Public int deposit(int amount) {// corps}
Lencapsulation (1/2)
Raisons dtre
Les modificateurs daccs qui caractrisent lencapsulation sont
justifies par diffrents lments:
Prservation de la scurit des donnes
Les donnes prives sont simplement inaccessibles de lextrieur
Elles ne peuvent donc tre lues ou modifies que par les mthodes daccs
rendues publiques
Prservation de lintgrit des donnes
La modification directe de la valeur dune variable prive tant impossible,
seule la modification travers des mthodes spcifiquement conues est
possible, ce qui permet de mettre en place des mcanismes de vrification et
de validation des valeurs de la variable
Cohrence des systmes dvelopps en quipes
Les dveloppeurs de classes extrieures ne font appel quaux mthodes et,
pour ce faire, nont besoin que de la signature. Leur code est donc
indpendant de limplmentation des mthodes
Lencapsulation (2/2)
Accs aux membres dune classe
En java, les modificateurs daccs sont utiliss pour protger
laccessibilit des variables et des mthodes.
Les accs sont contrls en respectant le tableau suivant:
Mot-cl
classe
package
sous classe
private
protected
public
[aucun]
Une classe a toujours
accs ses membres.
Les classes dun mme
package protgent
uniquement leurs
membres privs (
lintrieur du package)
world
Seul les membres publics
sont visibles depuis le
monde extrieur.
Une classe fille (ou
drive) na accs quaux
membres publics et
protected de la classe
mre.
Membres dinstance et membres de classe (1/2)
Le mot-cl static
Chaque objet a sa propre mmoire de ses variables dinstance
Le systme alloue de la mmoire aux variables de classe ds quil
rencontre la classe. Chaque instance possde la mme valeur dune
variable de classe.
variable dinstance
class BankAccount {
int solde;
static int soldePrim;
void deposit(int amount){
variable de classe
solde+=amount;
soldePrim+=amount;
}
}
solde
solde
soldePrim
Account1
Account2
Membres dinstance et membres de classe (2/2)
Le mot-cl static
Variables et mthodes statiques
Initialises ds que la classe est charge en mmoire
Pas besoin de crer un objet (instance de classe)
Mthodes statiques
Fournissent une fonctionnalit une classe entire
Cas des mthodes non destines accomplir une action sur un objet
individuel de la classe
Exemples: [Link](),
[Link](String s), main(String[] args)
Les mthodes statiques ne peuvent pas accder aux variables dinstances
class AnIntegerNamedX {
x est une variable
int x;
dinstance, donc
static public int x() { return x; }
inaccessible pour la
static public void setX(int newX) { this.x = newX; }mthode static setX
}
Utilisation de lhritage (1/5)
Java noffre pas la possibilit dhritage multiple
La super super classe, est la classe Object (parente de toute
classe)
Une sous-classe hrite des variables et des mthodes de ses classes
parentes
La clause extends apparat dans la dclaration de la classe
class BankAccount {
protected int solde;
BankAccount
int solde
}
class NormalAccount extends BankAccount {
public void job(){solde+=1000;}
NormalAccount
job(): void
Utilisation de lhritage (3/5)
Les mots-cl this et super
Dans une mthode
this est une rfrence sur lobjet en cours lui-mme
super permet daccder aux membres de la superclasse (peut tre
ncessaire en cas de redfinition, par ex.)
Dans le constructeur
Il existe toujours un constructeur. Sil nest pas explicitement dfini, il sera un
constructeur par dfaut, sans arguments
this est toujours une rfrence sur lobjet en cours (de cration) lui-mme
super permet dappeler le constructeur de la classe parent, ce qui est
obligatoire si celui-ci attend des arguments
class MyClass{
int x;
MyClass(int x){
this.x=x;// constructeur
}
}
parent
class Child extends MyClass {
Child(){
super(6); // appel du constructeur
}
}
parent
Utilisation de lhritage (4/5)
Les mots-cl this et super
En cas de surcharge du constructeur:
class Employee {
String name,firstname;
Address a;
int age;
Employee(String name,String firstname,Address a,int age){
super();
this. firstname= firstname;
[Link]=name;
this.a=a;
[Link]=age;
}
Employee(String name,String firstname){
this(name,firstname,null,-1);
}
Utilisation de lhritage (5/5)
Redfinition de mthodes
La redfinition nest pas obligatoire !! Mais elle permet dadapter un
comportement et de le spcifier pour la sous-classe.
class BankAccount {
public void computeInterest(){
solde+=300;
//annual gift
}}
class NormalAccount extends BankAccount {
public void computeInterest(){
[Link]();//call the overriden method
solde*=1.07;
//annual increase
}}
Obligation de redfinir les mthodes dclares comme abstraites (abstract)
Interdiction de redfinir les mthode dclares comme finales (final)
Conversion de types (1/2)
Dfinition
Java, langage fortement typ, impose le respect du type dun objet
Toutefois, il est possible de convertir le type dun objet vers un type
compatible
Un type A est compatible avec un type B si une valeur du type A peut tre
assigne une variable du type B
Ex: Un entier et un double
La conversion de type peut se produire
Implicitement (conversion automatique)
Explicitement (conversion force)
La conversion explicite sobtient en faisant prcder la variable du
type vers lequel elle doit tre convertie entre parenthses (casting)
double d = 3.1416;
int i = (int) d;
Conversion de types (2/2)
Application
Appliquer un oprateur de cast au nom dune variable
Ne modifie pas la valeur de la variable
Provoque le traitement du contenu de la variable en tant que variable du type
indiqu, et seulement dans lexpression o loprateur de cast se trouve
Sapplique aux variables de types primitifs et aux variables de types
de rfrences
Types primitifs:
Implicite vers un type plus large (sinon explicite avec risque de perte de
donnes), Interdit pour le type boolean
Ex: shot int long
Types de rfrences:
Entre classe avec relation dheritage/implmentation (ou risque derreur)
Dans ce cas de cast vers le parent, loprateur de cast nest pas ncessaire
Ex: Voiture Vehicule Object
Polymorphisme (1/2)
Dfinition
Concept bas sur la notion de redfinition de mthodes
Permet de sadresser une classe en sollicitant une mthode
gnrique qui sappliquera diffremment au niveau de chaque sousclasse de celle-ci
En dautres termes, permet de changer le comportement dune classe
de base sans la modifier Deux objets peuvent ragir diffremment
au mme appel de mthode
Uniquement possible entre classes relies par un lien dhritage
class Bank{
BankAccount[] theAccounts = new BankAccount[10];
public static void main(String[] args){
theAccounts[0] = new NormalAccount("Joe",10000);
theAccounts[0].compute();
}}
Polymorphisme (2/2)
Utilisation du polymorphisme sur des collections htrognes
BankAccount[] ba=new BankAccount[5];
ba[0] = new NormalAccount("Joe",10000);
ba[1] = new NormalAccount("John",11000);
ba[2] = new SpecialAccount("Jef",12000);
ba[3] = new SpecialAccount("Jack",13000);
ba[4] = new SpecialAccount("Jim",14000);
for(int i=0;i<[Link]();i++)
{
ba[i].computeAmount();
}
Les classes abstraites
Une classe abstraite
Peut contenir ou hriter de mthodes abstraites (des mthodes sans corps)
Peut contenir des constantes globales
Peut avoir des mthodes normales, avec corps
Une classe abstraite ne peut tre instancie
On peut seulement instancier une sous-classe concrte
La sous-classe concrte doit donner un corps toute mthode abstraite
La dclaration dune classe abstraite contenant une mthode
abstraite ressemble ceci:
abstract class Animal {
abstract void move();
}
Les interfaces
Certaines classes sont conues pour ne contenir prcisment que la
signature de leurs mthodes, sans corps. Ils sont appels interface.
Ne contient que la dclaration de mthodes, sans dfinition (corps)
Permet de dclarer des constantes globales (public static final)
Une classe peut implmenter une ou plusieurs interfaces
Permet de sparer les fonctionnalits offertes par une API de leurs
implmentations
Une classe implmente une interface en utilisant le mot rserv
implements
public interface Runnable {
public void run();
}
public interface GraphicalObject {
public void draw(Graphics g);
}
API Java
I. Les collections
Survol du chapitre
Introduction
Quest-ce quune Collection?
Le Java Collections Framework
Interfaces
Collections Set et List
Maps Map et SortedMap
Itrateurs Iterator
Comparateurs Comparable et Comparator
Implmentations
HashSet et TreeSet
ArrayList et LinkedList
Algorithmes
Tri
Autres: Recherche, Mlange, etc.
Introduction
Quest-ce quune collection?
Collection
Un objet utilis afin de reprsenter un groupe dobjets
Utilis pour:
Stocker, retrouver et manipuler des donnes
Transmettre des donnes dune mthode une autre
Reprsente des units de donnes formant un groupe
logique ou naturel, par exemple:
Une classe dtudiants (collection dtudiants)
Un dossier demails (collection de messages)
Un rpertoire tlphonique (collection de correspondances NOM N)
Introduction
Java Collections Framework
Dfinit toute la structure des collections en Java
Constitue une architecture unifie pour
la reprsentation des collections
la manipulation des collections
Contient des:
Interfaces
Types de donnes abstraits reprsentant des collections
Permettent de manipuler les collections indpendamment de leur reprsentation
Organises en une hirarchie unique
Implmentations
Implmentations concrtes des interfaces Structures de donnes rutilisables
Fournies pour acclrer le dveloppement
Algorithmes
Mthodes standards fournissant des oprations comme le tri, la recherche, etc.
Interfaces
Structure
Il existe 4 groupes dinterfaces lies aux collections
Collection
Racine de la structure des collections
Reprsente un groupe dobjets (dits lments )
Peut autoriser ou non les duplicats
Peut contenir un ordre intrinsque ou pas
Map
Un objet qui tablit des correspondances entre des cls et des valeurs
Ne peut en aucun cas contenir des duplicats
Chaque cl ne peut correspondre qu une valeur au plus
Interfaces de comparaison
Permettent le tri des objets du type implmentant linterface
Deux versions: Comparator et Comparable
Iterator
Permet de grer les lments dune collection
Interfaces
Collection (1/2)
La racine de la structure des collections
Sans ordre spcifique
Duplicats permis
Dfinit les comportements standards des collections
Vrification du nombre dlments
size(), isEmpty()
Test dappartenance dun objet la collection
contains(Object)
Ajout et suppression dlments
add(Object), remove(Object)
Fournir un itrateur pour la collection
iterator()
Bulk Operations
addAll(Collections), clear(), containsAll(Collections)
Interfaces
Collection (2/2)
Trois variantes principales:
Set
Duplicats interdits
Sans ordre spcifique
List
Duplicats permis
Contient un ordre spcifique intrinsque
Parfois appel Squences
Permet 2 mthodes daccs particulires:
Positional Access: manipulation base sur lindex numrique des
lments
Search: recherche dun objet en particulier dans la liste et renvoi
de son numro dindex (sa position dans la liste)
SortedSet
Duplicats interdits
Contient un ordre spcifique intrinsque
Interfaces
Map
Map = Objet qui contient des correspondances Cl Valeur
Ne peut contenir de doublons (cls uniques)
Fournit des oprations de base standards:
put(key,value)
get(key)
remove(key)
containsKey(key)
containsValue(value)
size()
isEmpty()
Peut gnrer une collection qui reprsente les couples Cl Valeur
Il existe aussi
des SortedMap fournissant des Map naturellement tris
Interfaces
Comparaison (1/3)
Deux interfaces
Comparable
Fournit une mthode de comparaison au sein dune classe
Impose de redfinir une seule mthode public int compareTo(Object o)
qui renvoie un entier:
1 si lobjet courant > lobjet o fourni dans la mthode
0 si lobjet courant = lobjet o fourni dans la mthode
-1 si lobjet courant < lobjet o fourni dans la mthode
Comparator
Permet de dfinir une classe servant de comparateur une autre
Impose de redfinir une seule mthode
public int compare(Object o1, Object o2) qui renvoie un entier:
1 si o1 > o2
0 si o1 = o2
-1 si o1 < o2
Interfaces
Comparaison (2/3)
Exemple dimplmentation de Comparable
import [Link].*;
public class Name implements Comparable {
private String firstName, lastName;
public Name(String firstName, String lastName) {
[Link] = firstName;
[Link] = lastName;
}
public int compareTo(Object o) {
Name n = (Name) o;
int lastCmp = [Link]([Link]);
if(lastCmp==0)
lastCmp = [Link]([Link]);
return lastCmp;
}
}
Interfaces
Comparaison (3/3)
Les types primitifs contiennent toujours un ordre naturel
Implmentations
Structure
Les implmentations sont les types dobjets rels utiliss pour
stocker des collections
Toutes les classes fournies implmentent une ou plusieurs des
interfaces de base des collections
Implmentations
Sets
Deux principales implmentations de linterface Set
HashSet (Set)
Plus rapide
Noffre aucune garantie en termes de dordre
TreeSet (SortedSet)
Contient une structure permettant dordonner les lments
Moins rapide
A nutiliser que si la collection doit tre trie ou doit pouvoir tre parcourue
dans un certain ordre
Implmentations
Lists (1/2)
Deux principales implmentations de linterface List
ArrayList (et Vector)
La plus couramment utilise
Offre un accs positionnel vitesse constante
LinkedList
A utiliser pour
Ajouter rgulirement des lments au dbut de la liste
Supprimer des lments au milieu de la liste en cours ditration
Mais plus lent en termes daccs positionnel
Implmentations
Lists (2/2)
Oprations spcifiques aux listes:
Obtenir la position dun objet
indexOf(T o): int
lastIndexOf(T o): int
Rcuprer lobjet en position i
get(int i) Renvoie un objet de type T
Placer un objet une certaine position
set(int i, T o)
Supprimer lobjet en position i
remove(int i)
Algorithmes
Tri
On peut trier un tableau/collection au moyen de mthodes simples:
Trier un tableau mthode sort de la classe [Link]
[Link](<type>[])
Trier une collection mthodes sort de la classe [Link]
Ne fonctionne quavec les collections drivant de List
Si les lments de la collection sont comparables (implmentent linterface
Comparable )
[Link](List)
Si les lments de la collection ne sont pas comparables, il faut alors indiquer quelle
classe servira de comparateur
[Link](List, Comparator)
Algorithmes
Autres
Dautres oprations sont fournies par le Java Collections Framework:
Recherche binaire
[Link](liste, cl)
Mlange
[Link](liste)
Inversion de lordre
[Link](liste)
Rinitialisation des lments (remplace tous les lmnts par lobjet spcifi)
[Link](liste, objetParDefaut)
Copie des lments dune liste dans une autre
[Link](listeSource, listeDestination)
Recherche dextrema
Sur base de lordre des lments sils sont Comparable min(liste) et max(liste)
Sur base dun comparateur min(liste, comparateur) et max(liste, comparateur)
Introduction Java
IX. Gestion des exceptions
Survol du chapitre
Introduction
Hirarchie des exceptions
Traitement des exceptions
Interception dexceptions: bloc try catch finally
Lancement (gnration) par une mthode: throws et throw
Introduction
La gestion des exceptions en Java
Des erreurs surviennent dans tout programme
La classe Exception traite les erreurs prvisibles qui apparaissent
dans lexcution dun programme:
Panne du rseau
Fichier inexistant
Problme propre la logique business
La classe Error traite les conditions srieuses que le programmeur
nest pas cens traiter
Hirarchie des exceptions
On doit traiter ces exceptions-ci (checked exceptions)
On ne peut pas traiter
les Error
Chart Title
Throwable
Exception
RunTime Exception
Error
IOException
NullPointerException
FileNotFoundException
ArithmeticException
EOFException
AWTError
VirtualMachineError
OutOfMemoryError
On nest pas oblig de traiter ces exceptions-ci
Traitement des exceptions
Principes
Le traitement des exceptions contient deux aspects:
Linterception des exceptions
Utilisation du bloc try catch finally pour rcuprer les exceptions
Et raliser les actions ncessaires
Le lancement (la gnration) dexceptions
Automatiquement par lenvironnement run-time ou la machine virtuelle
pour certaines exceptions prdfinies par Java
Explicitement par le dveloppeur dans une mthode avec throws et
throw (en tout cas pour les exceptions cres par le dveloppeur
Traitement des exceptions
Interception par bloc try catch finally (1/2)
try
{
// quelques actions potentiellement risques
}
catch(SomeException se)
{
// que faire si une exception de ce type survient
}
catch(Exception e)
{
// que faire si une exception dun autre type survient
}
finally
{
// toujours faire ceci, quelle que soit lexception
}
Traitement des exceptions
le mot-cl throws
Si une exception peut survenir, mais que la mthode nest pas cense
la traiter elle-mme, il faut la remonter la mthode appelante
Il faut prciser que la mthode peut lancer ces exceptions
ajouter une clause throws la signature de la mthode
public void writeList() {
PrintWriter out = new PrintWriter(new FileWriter("[Link]"));
for (int i = 0; i < [Link](); i++)
[Link]("Valeur = " + [Link](i));
}
Peut lancer une IOException doit tre attrape
Peut lancer une ArrayIndexOutOfBoundsException
public void writeList() throws IOException,
ArrayIndexOutOfBoundsException {
Traitement des exceptions
le mot-cl throw
Une mthode avec une proprit throws peut lancer des exceptions avec
throw
Toute exception ou erreur lance pendant lexcution provient dun throw
Fonctionne avec les exceptions qui hritent de Throwable (la classe de base)
Le dveloppeur peut crer de nouvelles classes dexceptions
et les lancer avec throw
class MyException extends Exception {
MyException(String msg){
[Link]("MyException lancee, msg =" + msg);
}
}
void someMethod(boolean flag)throws MyException {
if(!flag) throw new MyException(someMethod);
Traitement des exceptions
Gestion des exceptions
Une fois lexception lance avec throw, il faut soit lattraper (avec catch), soit
la re-lancer. Si vous la re-lancez, votre mthode doit le dclarer
public void connectMe(String serverName) throws ServerTimedOutException {
boolean success;
int portToConnect = 80;
success = open(serverName, portToConnect);
if (!success) {
throw new ServerTimedOutException("Connection impossible", 80);
}
}
public void connectMe(String serverName) {
boolean success;
int portToConnect = 80;
success = open(serverName, portToConnect);
if (!success) {
try{ throw new ServerTimedOutException("Connection impossible ", 80);
} catch(ServerTimedOutException stoe){ }
}
}
Exercice
Traitement de fichier
Ecrire un programme qui copie le contenu un fichier sur le disque vers
un autre en utilisant la classe BufferedReader, FileReader, FileWriter
Gerer les exceptions lies au programme
API Java
X. Multithreading
Survol du chapitre
Introduction
Dfinition
Raison dtre
Cration de Thread
Par implmentation
Par hritage
Gestion de Thread
Mthodes de gestion
Diagrammes dtat
Introduction
Quest-ce quun Thread?
Un ordinateur qui excute un programme :
Possde un CPU
Stocke le programme excuter
Possde une mmoire manipule par le programme
Multitasking gr par lOS
Un thread a ces mmes capacits
A accs au CPU
Gre un processus
A accs la mmoire, quil partage avec dautres threads
Multithreading gr par la JVM
Introduction
Pourquoi le multithreading?
Le multithreading
Permet de raliser plusieurs processus indpendants en parallle
Permet de grer les files dattente
Permet au besoin de synchroniser les diffrents processus entre eux
Cration de Thread
Mise en uvre (1/3)
Par implmentation de linterface
Usage
public void MaClasse implements Runnable
Avantages et inconvnients
Meilleur sur le plan orient objet
La classe peut hriter dune autre classe
Consistance
Par hritage de la classe Thread elle-mme
Usage
public void MaClasse extends Thread
Avantages et inconvnients
Code simple (lobjet est un Thread lui-mme)
La classe ne peut plus hriter dune autre classe
Cration de Thread
Mise en uvre (2/3)
public class MaFile implements Runnable {
public void run(){
byte[] buffer=new byte[512];
int i=0;
while(true){
if(i++%10==0)[Link](""+i+" est divisible par 10");
if (i>101) break;
}
}
}
public class LanceFile {
public static void main(String[]arg){
Thread t=new Thread(new MaFile());
[Link]();
Le constructeur de la classe Thread
}
attend un objet Runnable
}
en argument
Cration de Thread
Mise en uvre (3/3)
public class MyThread extends Thread {
public void run(){
byte[] buffer=new byte[512];
int i=0;
while(true){
if(i++%10==0) [Link](""+i+" est divisible par 10");
if(i>101) break;
}
}
}
public class LaunchThread{
public static void main(String[]arg){
Grce lhritage, un objet de type
MyThread t=new MyThread();
MyThread est lui-mme Runnable,
[Link]();
on peut donc appeler un constructeur
}
sans argument
}
Gestion des Thread
Mthodes de gestion (1/3)
[Link]()
Appeler cette mthode place le thread dans ltat runnable
Eligible par le CPU
[Link]() throws InterruptedException
La VM arrte le thread actif et le place dans un ensemble de threads
activables. (runnable state)
La VM prend un thread activable et le place dans ltat actif (running
state)
[Link](int millis) throws InterruptedException
La VM bloque le thread actif pour un temps spcifi (tat dattente )
[Link]() throws InterruptedException
Met le thread actif en attente jusquau moment o le thread t est
termine (a fini sa mthode run()). Le thread appelant redevient alors
activable.
Gestion des Thread
Mthodes de gestion (2/3)
public class ExJoin {
public static void main(String[]arg){
Thread t=new Thread(new FileSecondaire());
[Link]();
for(int i=0;i<20;i++){
[Link]("File principale en cours dexcution "+i);
try{
[Link](10);
} catch(InterruptedException ie){}
}
try {
[Link]();
} catch (InterruptedException ie) {}
[Link](t termine son excution, fin programme");
}
}
Gestion des Thread
Mthodes de gestion (4/4)
class FileSecondaire implements Runnable{
public void run(){
for(int i=0;i<40;i++){
[Link]("File secondaire en execution "+i);
try{
[Link](10);
} catch (InterruptedException ie) {}
}
[Link]("Fin de file secondaire");
}
}
Gestion des Thread
Diagrammes dtat
[Link]()
[Link]()
[Link]()
En attente
dbut
fin
[Link]()
Fin du sleep()
[Link]()
[Link]()
Active
Activable
Scheduler
Ensemble de files ligibles
Fin de run()
Une des files ligibles, pas
ncessairement celle avec la plus
grande priorit.
Exercice
Ecrire un programme qui permet de suivre lordonnancement des
taches entre deux thread.
Chaque thread affiche son nom et se met en attente pendant un
intervalle de temps
La mthode main attend la fin des deux threads avant de terminer
Implmenter un modle producteur/consommateur
Une classe File qui stocke les ressources et les mthodes daccs put et
get, en grant le blocage si pas de ressources nest disponible
Deux threads producteur et consommateur pour la lecture et criture
depuis la file
Une mthode main pour tester