Cours Java

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 105

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
MyProgram.java
Excut une seule fois

Compiler

Traduit le programme en un code intermdiaire


Appel bytecode indpendant de la machine

MyProgram.class
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++) {
System.out.println("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

System.out.println("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


System.out.println(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 cours.java

package cours.java
class Chapitre

class Chapitre

class Paragraphe

package formation

class Paragraphe

import cours.java.Chapitre

package cours.cpp
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 MyBankAccount.java

compile le fichier mentionn, qui doit se trouver dans le package par dfaut
javac be\newco\*.java d c:\classes
compile tout le package be.newco et gnre du code compil dans c:\classes, qui

doit exister

Java
Lance un programme principal
Exemples:
java test.MyProgram

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 myjarfile.jar *.class

archivage de tout fichier .class, trouv dans le rpertoire courant et tout sousrpertoire, dans le fichier myjarfile.jar
jar xf myjarfile.jar

Extrait tout fichier contenu dans myjarfile.jar vers une structure de rpertoires

linterprteur java reconnat les fichiers .jar et peut les traiter comme
un rpertoire.

java classpath myarchive.jar be.newco.MyMain

Lance le main() contenu dans be.newco.MyMain, tout en ajoutant les fichiers


de myarchive.jar 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 !"
}
System.out.println(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: Math.random(),

Integer.parseInt(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;
this.name=name;
this.a=a;
this.age=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(){
super.computeInterest();//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<ba.length();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 java.util.*;
public class Name implements Comparable {
private String firstName, lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public int compareTo(Object o) {
Name n = (Name) o;
int lastCmp = lastName.compareTo(n.lastName);
if(lastCmp==0)
lastCmp = firstName.compareTo(n.firstName);
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 java.util.Arrays
Arrays.sort(<type>[])

Trier une collection mthodes sort de la classe java.util.Collections


Ne fonctionne quavec les collections drivant de List
Si les lments de la collection sont comparables (implmentent linterface
Comparable )
Collections.sort(List)
Si les lments de la collection ne sont pas comparables, il faut alors indiquer quelle
classe servira de comparateur
Collections.sort(List, Comparator)

Algorithmes
Autres

Dautres oprations sont fournies par le Java Collections Framework:


Recherche binaire
Collections.binarySearch(liste, cl)

Mlange
Collections.shuffle(liste)

Inversion de lordre
Collections.reverse(liste)

Rinitialisation des lments (remplace tous les lmnts par lobjet spcifi)
Collections.fill(liste, objetParDefaut)

Copie des lments dune liste dans une autre


Collections.copy(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("OutFile.txt"));
for (int i = 0; i < vector.size(); i++)
out.println("Valeur = " + vector.elementAt(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){
System.out.println("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)System.out.println(""+i+" est divisible par 10");
if (i>101) break;
}
}
}
public class LanceFile {
public static void main(String[]arg){
Thread t=new Thread(new MaFile());
t.start();
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) System.out.println(""+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,
t.start();
on peut donc appeler un constructeur
}
sans argument
}

Gestion des Thread

Mthodes de gestion (1/3)


t.start()

Appeler cette mthode place le thread dans ltat runnable


Eligible par le CPU
Thread.yield() 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)
Thread.sleep(int millis) throws InterruptedException

La VM bloque le thread actif pour un temps spcifi (tat dattente )


t.join() 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());
t.start();
for(int i=0;i<20;i++){
System.out.println("File principale en cours dexcution "+i);
try{
Thread.sleep(10);
} catch(InterruptedException ie){}
}
try {
t.join();
} catch (InterruptedException ie) {}
System.out.println(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++){
System.out.println("File secondaire en execution "+i);
try{
Thread.sleep(10);
} catch (InterruptedException ie) {}
}
System.out.println("Fin de file secondaire");
}
}

Gestion des Thread


Diagrammes dtat

Object.notify()
Object.notifyAll()

t.sleep()

En attente

dbut

fin

Object.wait()

Fin du sleep()
t.yield()
t.start()

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

Vous aimerez peut-être aussi