language java

189
KACIMI Lamine / 2014 1 Programmation en JAVA

Upload: lamine-kacimi

Post on 18-Jul-2015

255 views

Category:

Software


2 download

TRANSCRIPT

KACIMI Lamine / 20141

Programmation en JAVA

KACIMI Lamine / 20142

Sommaire

I. Introduction

II. Historique

III. Structure d’un programme JAVA

IV. Types primitifs, Opérateurs & Expressions

V. Enoncés conditionnels & Itératifs

VI. Les classes et les objets

VII. Tableaux

VIII. Héritage

IX. Classes abstraites & Interfaces

X. Collections

XI. Chaînes de caractères & Types énumérés

XII. Les Exceptions

KACIMI Lamine / 20143

DéfinitionG

én

éra

lité

s

Définition de SUN : "Java est un langage simple, orienté objet,

distribué, robuste, sûr, indépendant des architectures matérielles,

portable, de haute performance, multithread et dynamique"

KACIMI Lamine / 20144

1. Simple

1. Pas de pointeurs

2. Pas d’héritage multiple

2. Distribué: Les fonctions d'accès au réseau et les protocoles

internet les plus courants sont intégrés

1. Sockets

2. RMI

3. Portable: Les types de données sont indépendants de la plate

forme

4. Robuste: pas d’arithmétiques pointeurs, typage strict

CaractéristiquesG

én

éra

lité

s

KACIMI Lamine / 20145

5. Multithread

Une application peut être décomposée en unités

d'exécution fonctionnant simultanément

6. Dynamique: Les classes peuvent être modifiées sans pour

autant modifier les programmes qui les utilisent.

7. Performance ?: Oui grâce aux améliorations successives

dont la JVM a bénéficiée mais aussi grâce à l’amélioration

des API

Caractéristiques…suiteG

én

éra

lité

s

KACIMI Lamine / 20146

HistoriqueH

isto

riq

ue

Année Evénements

1995mai : premier lancement commercial du JDK 1.0

1996 janvier : JDK 1.0.1

1997 février : JDK 1.1

1998décembre : lancement de J2SE 1.2 et lancement du JDC (Java Community

Process)

1999 décembre : lancement J2EE

2000 mai : J2SE 1.3

2002 février : J2SE 1.4

2004 septembre : J2SE 5.0

2006mai : Java EE 5décembre : Java SE 6.0

2008 décembre : Java FX 1.0

2009 décembre : Java EE 6

2010 janvier : rachat de Sun par Oracle

2011 juillet : Java SE 7

2013 Juin: Lancement de JEE 7

2014 Mars: Java SE 8

https://jcp.org/en/participation/mail

KACIMI Lamine / 20147

VersionsV

ers

ion

sVersion Nom du projet Date de diffusion

JDK 1.0 Oak Mai 1995

JDK 1.1 Février 1997

JDK 1.1.4 Sparkler Septembre 1997

JDK 1.1.5 Pumpkin Décembre 1997

JDK 1.1.6 Abigail Avril 1998

JDK 1.1.7 Brutus Septembre 1998

JDK 1.1.8 Chelsea Avril 1999

J2SE 1.2 Playground Décembre 1998

J2SE 1.2.1 Mars 1999

J2SE 1.2.2 Cricket Juillet 1999

J2SE 1.3 Kestrel Mai 2000

J2SE 1.3.1 Ladybird Mai 2001

J2SE 1.4.0 Merlin Février 2002

J2SE 1.4.1 Hopper Septembre 2002

J2SE 1.4.2 Mantis Juin, 2003

J2SE 5.0 (1.5) Tiger Septembre 2004

Java SE 6.0 (1.6) Mustang Décembre 2006

Java SE 7 (1.7) Dolphin Juillet 2011

KACIMI Lamine / 20148

Versions/Nombre de ClassesV

ers

ion

s/C

lass

es

Java

1.0

Java

1.1

Java

1.2

J2SE

1.3

J2SE

1.4

J2SE

5.0

Java

SE 6

Java

SE 7

Packages 8 23 59 76 135 166 202 209

Classes 201 503 1520 1840 2990 3280 3780 4024

KACIMI Lamine / 20149

Editions Java & Outils de développementG

én

éra

lité

s

1.Les environnements JAVA

• Java SE (Standard Edition)

• Java ME (Mobile, Micro Edition)

• Java EE (Enterprise Edition)

• Java FX (Enterprise Edition)

2. Les IDE •Visual J++ (Microsoft)

•JBuilder (Borland/Inprise)

•Eclipse

•Netbeans

KACIMI Lamine / 201410

Que peut-on faire avec JavaG

én

éra

lité

s

1. Applications (Console, desktop)

2. Applets (pour le web)

3. Applications /Sites Web

4. Applications embarquées

5.…..tout!

KACIMI Lamine / 201411

Génération du code exécutableG

én

éra

tio

n E

cu

tab

le /

No

n

JA

VA

KACIMI Lamine / 201412

Génération du code exécutableG

én

éra

tio

n E

cu

tab

le /

JA

VA

KACIMI Lamine / 201413

Principe de la machine virtuelleM

ac

hin

e v

irtu

elle

/ P

rin

cip

e

KACIMI Lamine / 201414

Structure d’un programme JAVAU

n p

rem

ier

Pro

gra

mm

e o

u

plu

tôt

de

ux

KACIMI Lamine / 201415

JAVA, les types primitifsJA

VA

, le

s ty

pe

s p

rim

itifs

Les types primitifs de Java se répartissent en quatre grandes

catégories selon la nature des informations qu’ils permettent de

représenter :

• nombres entiers,

• nombres flottants,

• caractères,

• booléens.

KACIMI Lamine / 201416

JAVA, Types entiersJA

VA

, le

s ty

pe

s e

ntie

rs

Valeur décimale Valeur binaire Valeur Hexadécimale

1 0000000000000001 0001

2 0000000000000010 0002

3 0000000000000011 0003

16 0000000000010000 00F0

127 0000000001111111 007F

255 0000000011111111 00FF

-1 1111111111111111 FFFF

-256 1111111100000000 FF00

KACIMI Lamine / 201417

JAVA, Types flottantsJA

VA

, le

s ty

pe

s flo

tta

nts

n= 1.5 ∗ 10181.5: mantisse

18 : exposant

Notation générale n≈ 𝑠𝑀. 10𝑛

KACIMI Lamine / 201418

JAVA, Types flottants: ExempleJA

VA

, le

s ty

pe

s flo

tta

nts

.

Exe

mp

le

KACIMI Lamine / 201419

JAVA, Types flottants: ConséquenceJA

VA

, le

s ty

pe

s flo

tta

nts

.

Co

nsé

qu

en

ce

Valeur décimale Représentation en float

0.9

0.09

0.009

0.0009

0.00009

0.000009

9E-7

9E-8

9E-9

9E-10

0.9

0.089999996

0.0090

9.0E-4

9.0E-5

9.0E-6

9.0000003E-7

9.0E-8

9.0E-9

8.9999996E-10

KACIMI Lamine / 201420

JAVA, Types flottantsJA

VA

, le

s ty

pe

s flo

tta

nts

.

Le tableau suivant récapitule les caractéristiques des types float

et double. Notez ici encore l’existence de constantes prédéfinies

de la forme Float.MAX_VALUE qui fournissent les différentes

limites.

KACIMI Lamine / 201421

JAVA, Type CaractèreJA

VA

, le

ty

pe

ca

rac

tère

.

Comme la plupart des langages, Java permet de manipuler des

caractères. Mais il offre l’originalité de les représenter en mémoire

sur deux octets en utilisant le code universel Unicode

KACIMI Lamine / 201422

JAVA, Type booléenJA

VA

, le

ty

pe

bo

olé

en

.

Ce type sert à représenter une valeur logique du type vrai/faux. Il

n’existe pas dans tous les langages car il n’est pas aussi

indispensable que les autres. En effet, on peut souvent se

contenter d’expressions booléennes du genre de celles qu’on

utilise dans une instruction if:

if (n<p) ..... // n<p est une expression booléenne valant vrai ou

faux

En Java, on peut disposer de variables de ce type, ce qui

permettra des affectations telles que :

boolean ordonne ; // déclaration d’une variable de type

booléen

.....

ordonne = n<p ; // ordonne reçoit la valeur de l’expression

booléenne n<p

Les deux constantes du type booléen se notent true et false

KACIMI Lamine / 201423

JAVA, Constantes, le mot clé finalJA

VA

, D

éc

lare

r u

ne

co

nst

an

te.

Java permet de déclarer que la valeur d’une variable ne doit

pas être modifiée pendant l’exécution du programme. Par

exemple, avec :

on déclare la variable cst de type int, de valeur initiale 20.

De plus, toute tentative ultérieure de

modification de la valeur de n sera rejetée par le compilateur :

KACIMI Lamine / 201424

JAVA, Opérateurs & ExpressionsJA

VA

, O

rate

urs

& E

xp

ress

ion

s

1. Les opérateurs arithmétiques

Opérateur Signification

+ Addition

- Soustraction

* Multiplication

/ Division

% Modulo

2. Les opérateurs relationnels

Opérateur Signification

< Inférieur à

<= Inférieur ou égal à

> Supérieur à

>= Supérieur ou égal à

== Égal à

!= Différent de

KACIMI Lamine / 201425

JAVA, Opérateurs & ExpressionsJA

VA

, O

rate

urs

& E

xp

ress

ion

s

3. Les opérateurs logiques

Opérateur Signification

! Non

&& Et logique

|| Ou logique

4. Les opérateurs bit à bit

Opérateur Signification

& Et bit à bit

| Ou bit à bit

^ Ou exclusif bit à bit

>>, <<, >>> Décalage

5. Autres opérateurs, Casting, instanceof et Opérateur conditionnel

KACIMI Lamine / 201426

JAVA, Instructions de contrôleJA

VA

, In

stru

ctio

ns

de

Co

ntr

ôle

A priori, dans un programme, les instructions sont exécutées

séquentiellement, c’est-à-dire dans l’ordre où elles apparaissent.

Or la puissance et le comportement intelligent d’un programme

proviennent essentiellement de la possibilité de s’affranchir de cet

ordre pour effectuer des choix et des boucles (répétitions).

Tous les langages disposent d’instructions, nommées instructions

de contrôle, permettant de les réaliser.

KACIMI Lamine / 201427

JAVA, Instructions de contrôleJA

VA

, In

stru

ctio

ns

de

Co

ntr

ôle

1. Les choix (if, else et switch)

2. Les boucles (while, for et do …. while)

3. Les branchements inconditionnels: continue, break

KACIMI Lamine / 201428

JAVA, L’instruction ifJA

VA

, L’

Inst

ruc

tio

n if

If Imbriqué

KACIMI Lamine / 201429

JAVA, L’instruction if. Exemple completJA

VA

, L’

Inst

ruc

tio

n if. E

xe

mp

le

co

mp

let

KACIMI Lamine / 201430

JAVA, L’instruction switchJA

VA

, L’

Inst

ruc

tio

n s

witc

h

KACIMI Lamine / 201431

JAVA, Les instructions do… while et whileJA

VA

, Le

s in

stru

ctio

ns

do

wh

ile

et

wh

ile

do … while

while

KACIMI Lamine / 201432

JAVA, L’instruction forJA

VA

, L’

Inst

ruc

tio

n f

or

Le JDK 5.0 a introduit une nouvelle structure de boucle souvent

nommée for... each

Elle ne s’applique toutefois qu’au parcours des éléments d’une

collection, d’un tableau ou d’une chaîne et nous vous la

présenterons par la suite dans ces différents contextes.

KACIMI Lamine / 201433

JAVA, Les instructions break et continueJA

VA

, Le

s in

stru

ctio

ns

bre

ak

et

co

ntin

ue

L’instruction break dite ordinaire permet de sortir d’une boucle

ou comme on l’a déjà vu d’un switch.

Pour sortir de 2 boucles imbriquées, on utilisera toujours break

mais avec une étiquette cette fois-ci.

L’instruction continue permet de passer prématurément au tour

de boucle suivant. Pensez par exemple à l’utiliser pour calculer

la somme des nombre pairs inférieurs à 540.

KACIMI Lamine / 201434

JAVA, Les classes et les objetsJA

VA

, Le

s c

lass

es

et

les

ob

jets

1. Notion de classe

2. Instanciation des objets

3. Notion de référence à un objet

4. Différence entre types primitifs et types objets

5. Notion de constructeur

6. Champs et méthodes d’objet vs Champs et méthodes de

classe

7. Notion de paquetage

KACIMI Lamine / 201435

JAVA, Classe PointJA

VA

, U

ne

pre

miè

re c

lass

e:

La

cla

sse

Po

int

Nous supposerons ici qu’un objet de type Point sera représenté

par deux coordonnées entières. Ils nous suffira de les déclarer

ainsi :

KACIMI Lamine / 201436

JAVA, Classe Point: Ajout de méthodesJA

VA

, La

sse

Po

int,

ajo

ut

de

tho

de

s

Méthode:

• Nom de la méthode

• Mode (niveau ) d’accès

• Arguments

• Type de la valeur de retour

KACIMI Lamine / 201437

JAVA, Utiliser la classe PointJA

VA

, U

tilise

r la

cla

sse

Po

int

KACIMI Lamine / 201438

JAVA, Notion de constructeurJA

VA

, N

otio

n d

e c

on

stru

cte

ur

Dans la définition de la classe Point, nous n’avons défini aucun constructeur, dans un tel cas, Java nous fournit un constructeur par défaut, sans paramètres.

Un constructeur n’est qu’une méthode sans type de retour.

KACIMI Lamine / 201439

JAVA, Initialisation des attributs d’un objetJA

VA

, In

itia

lisa

tio

n d

es

att

rib

uts

d’u

n o

bje

t

Il est également possible d’initialiser les attributs d’un

objet à la déclaration.

KACIMI Lamine / 201440

JAVA, Eléments de conception des

classes

JA

VA

, Elé

me

nts

de

co

nc

ep

tio

n

de

s c

lass

es

1. Encapsuler les attributs: l’extérieur n’a pas à connaître ces

attributs ni le corps des méthodes. L’extérieur utilisera

uniquement l’interface de la classe.

2. Typologies des méthodes:

a) Méthodes d’accès: getters

b) Méthodes d’altération: setters

c) Méthodes métier

KACIMI Lamine / 201441

JAVA, Eléments de conception des

classes

JA

VA

, Elé

me

nts

de

co

nc

ep

tio

n

de

s c

lass

es

a et b désignent le même objet

KACIMI Lamine / 201442

JAVA, la notion de cloneJA

VA

, la

no

tio

n d

e c

lon

e

Nous venons de voir que l’affectation de variables de type objet

se limite à la recopie de références. Elle ne provoque pas la

recopie de la valeur des objets.

NB: On peut toujours utiliser les opérateurs logiques avec les

objets, mais ceux-là ne porteront pas sur les objets mais plutôt sur

leurs références.

KACIMI Lamine / 201443

JAVA, Attributs et méthodes de classeJA

VA

, A

ttrib

uts

et

tho

de

s d

e

cla

sse

En Java, on peut définir des champs qui, au lieu d’exister dans

chacune des instances de la classe, n’existent qu’en un seul

exemplaire pour toutes les instances d’une même classe.

Il s’agit en quelque sorte de données globales partagées par

toutes les instances d’une même classe.

On parle alors de champs de classe ou de champs statiques.

De même, on peut définir des méthodes de classe (ou statiques)

qui peuvent être appelées indépendamment de tout objet de la

classe (c’est le cas de la méthode main ).

KACIMI Lamine / 201444

JAVA, Attributs et méthodes de classeJA

VA

, A

ttrib

uts

et

tho

de

s d

e

cla

sse

Les méthodes statiques ne sont donc liées à aucun objet, leur

implémentation ne peut pas faire référence à this.

Exercice: Dans la classe Point, définissez une méthode de

classe qui renvoie le point origine (0,0)

KACIMI Lamine / 201445

JAVA, Surdéfinition de méthodes JA

VA

, Su

rdé

fin

itio

nd

e

tho

de

s

1. a+b (a et b entiers) vs s+t (s et t String)

2. Une classe peut définir la même méthode plusieurs fois

mais avec des signatures différentes.

KACIMI Lamine / 201446

JAVA, Passage de paramètresJA

VA

, Pa

ssa

ge

de

pa

ram

ètr

es

En Java, la transmission d’un argument à une méthode et celle

de son résultat ont toujours lieu par valeur.

Comme pour l’affectation, les conséquences en seront

totalement différentes, selon que l’on a affaire à une valeur d’un

type primitif ou d’un type classe.

KACIMI Lamine / 201447

JAVA, La récursivitéJA

VA

, La

cu

rsiv

ité

Java autorise la récursivité des appels de méthodes. Celle-ci peut

être :

• directe : une méthode comporte, dans sa définition, au moins un

appel à elle-même ;

• croisée : l’appel d’une méthode entraîne l’appel d’une autre

méthode qui, à son tour, appelle la méthode initiale (le cycle

pouvant d’ailleurs faire intervenir plus de deux méthodes).

Exercice: Ajouter une méthode, qui calcule la factorielle

récursivement, à la classe Util précédente. Essayer ensuite de

l’implémenter en utilisant les itérations classiques.

KACIMI Lamine / 201448

JAVA, Les objets membresJA

VA

, Le

s o

bje

ts m

em

bre

s

Comme nous l’avons souligné à plusieurs reprises, les champs

d’une classe sont soit d’un type primitif, soit des références à des

objets.

Dans le second cas, on parle souvent d’objet membre pour

caractériser cette situation.

Les méthodes de la

classe Cercle

peuvent évoquer les

méthodes de la

classe Point en

utilisant l’objet

membre c.

Compléter

l’implémentation

KACIMI Lamine / 201449

JAVA, Les classes internesJA

VA

, Le

s c

lass

es

inte

rne

s

Une classe est dite interne lorsque sa définition est située à

l’intérieur de la définition d’une autre classe. Malgré certaines

ressemblances avec la notion d’objet membre étudiée ci-dessus,

elle ne doit surtout pas être confondue avec elle, même s’il est

possible de l’utiliser dans ce contexte.

KACIMI Lamine / 201450

JAVA, Les classes internes, intérêtsJA

VA

, Le

s c

lass

es

inte

rne

s,

inté

rêts

On peut se demander en quoi les situations précédentes diffèrent

d’une définition de I qui serait externe à celle de E.

3 propriétés particulières:

1. Un objet d’une classe interne est toujours associé, au moment

de son instanciation, à un objet d’un classe externe dont on

dit qu’il lui a donné naissance.

2. Un objet d’une classe interne a toujours accès aux champs et

méthodes (même privés) de l’objet externe lui ayant donné

naissance (attention : ici, il s’agit bien d’un accès restreint à

l’objet, et non à tous les objets de cette classe).

3. Un objet de classe externe a toujours accès aux champs et

méthodes (même privés) d’un objet d’une classe interne

auquel il a donné naissance.

Exercice: recréer la classe Cercle en utilisant une classe interne

Centre qui représentera son centre.

KACIMI Lamine / 201451

JAVA, Les classes internesJA

VA

, Le

s c

lass

es

inte

rne

s

1. Il est possible de créer une instance de la classe interne depuis

l’extérieur.

2. JAVA permet la définition d’une classe interne à l’intérieur

d’une méthode, seule cette méthode est dans la mesure de

l’instancier.

3. Il est possible de déclarer la classe interne comme statique;

auquel cas, elle n’aura accès qu’aux membres statiques de la

classe externe.

KACIMI Lamine / 201452

JAVA, Les paquetagesJA

VA

, Le

s p

aq

ue

tag

es

La notion de paquetage correspond à un regroupement logique

sous un identificateur commun d’un ensemble de classes.

Elle est proche de la notion de bibliothèque que l’on rencontre

dans d’autres langages.

Elle facilite le développement et la cohabitation de logiciels

conséquents en permettant de répartir les classes

correspondantes dans différents paquetages.

Le risque de créer deux classes de même nom se trouve alors limité

aux seules classes d’un même paquetage.

KACIMI Lamine / 201453

JAVA, Les paquetagesJA

VA

, Le

s p

aq

ue

tag

es

L’attribution d’un nom de paquetage se fait au niveau du fichier

source.

Toutes les classes d’un même fichier source appartiendront donc

toujours à un même paquetage. Pour ce faire, on place, en début

de fichier, une instruction de la forme :

Pour utiliser une classe définie dans un paquetage autre que le

paquetage courant, on utilisera l’instruction import. On peut

également qualifier la classe en spécifiant son paquetage.

On peut également importer toutes les classes du paquetage en

utilisant import nompaquetage.*

KACIMI Lamine / 201454

JAVA, Les tableauxJA

VA

, Le

s ta

ble

au

x

En programmation, on parle de tableau pour désigner un

ensemble d’éléments de même type désignés par un nom

unique, chaque élément étant repéré par un indice précisant sa

position au sein de l’ensemble.

1. Déclarer un tableau

2. Créer un tableau

3. Utiliser un tableau

4. Passage de paramètre tableau

5. La notion d’ellipse

KACIMI Lamine / 201455

JAVA, Déclaration et création de

tableaux

JA

VA

, D

éc

lara

tio

n e

t c

réa

tio

n

de

ta

ble

au

x

Le tableau peut être initialisé dès sa déclaration en utilisant:

KACIMI Lamine / 201456

JAVA, Utilisation de tableauxJA

VA

, U

tilisa

tio

n d

e t

ab

lea

ux

En Java, on peut utiliser un tableau de deux façons différentes :

• en accédant individuellement à chacun de ses éléments,

avec un indice

• en accédant globalement à l’ensemble du tableau. Pour

changer la référence du tableau et le faire pointer vers un autre

On peut toujours récupérer la taille d’un tableau en utilisant

l’attribut length de celui-ci.

NB: On peut également déclarer un tableau d’objets, essayer

avec un tableau d’objets de la classe Cercle

Il existe également une variante de la boucle for souhaitable

pour parcourir les éléments d’un tableau.

KACIMI Lamine / 201457

JAVA, Tableaux en argument et en retourJA

VA

, Ta

ble

au

x e

n a

rgu

me

nt

et

en

re

tou

r

Les tableaux java étant des objets, les remarques faites

concernant le passage d’objets en argument et leur

récupération s’appliquent également pour les tableaux.

KACIMI Lamine / 201458

JAVA, Tableaux à plusieurs indicesJA

VA

, Ta

ble

au

x à

plu

sie

urs

ind

ice

sDe nombreux langages disposent de la notion de tableau à

plusieurs indices. Par exemple, un tableau à deux indices permet

de représenter une matrice mathématique.

Java ne dispose pas d’une telle notion. Néanmoins, il permet de

la "simuler" en créant des tableaux de tableaux

KACIMI Lamine / 201459

JAVA, Arguments variablesJA

VA

, A

rgu

me

nts

va

ria

ble

s

Depuis le JDK 5.0, on peut définir une méthode dont le nombre

d’arguments est variable. Par exemple, si l’on définit une

méthode somme avec l’en-tête suivant :

On pourra l’appeler avec 0, 1 ou plusieurs paramètres

La notation … se nomme ellipse

KACIMI Lamine / 201460

JAVA, L’héritageJA

VA

, L’

rita

ge

L’héritage est à l’origine des possibilités de réutilisation des

composants logiciels que sont les classes.

1. Notion d’héritage

2. Droits d’accès

3. Construction et initialisation des objets des classes

dérivées

4. Redéfinition de méthodes vs Surdéfinition

5. Notion de polymorphisme

KACIMI Lamine / 201461

JAVA, Notion d’héritageJA

VA

, N

otio

n d

’hé

rita

ge

Imaginons que nous ayons besoin d’une classe PointColore,

destinée à manipuler des points colorés d’un plan

Il est clair que un point coloré est en fait un point à la base, Il est

donc légitime de penser à dériver la classe Point pour créer

PointColore

D’une manière générale, un objet d’une classe dérivée accède

aux membres publics de sa classe de base, exactement comme

s’ils étaient définis dans la classe dérivée elle-même.

KACIMI Lamine / 201462

JAVA, Héritage et droits d’accèsJA

VA

, H

érita

ge

et

dro

its

d’a

cc

ès

Une méthode d’une classe dérivée n’a pas accès aux membres

privés de sa classe de base.

Une méthode d’une classe dérivée a accès aux membres

publics de sa classe de base.

Une méthode d’une classe dérivée a accès aux membres

protégés de sa classe de base. protected (classes dérivées et

classes appartenant au même paquetage)

KACIMI Lamine / 201463

JAVA, Construction des objets dérivésJA

VA

, H

érita

ge

, C

on

stru

ctio

n

de

s o

bje

ts d

érivé

s

En Java, le constructeur de la classe dérivée doit prendre en

charge l’intégralité de la construction de l’objet.

Si un constructeur d’une classe dérivée appelle un constructeur

d’une classe de base, il doit obligatoirement s’agir de la

première instruction du constructeur et ce dernier est désigné

par le mot-clé super.

KACIMI Lamine / 201464

JAVA, Initialisation des objets dérivésJA

VA

, H

érita

ge

, In

itia

lisa

tio

n

de

s o

bje

ts d

érivé

sOBJET SIMPLE OBJET DÉRIVÉ

1. Allocation mémoire,

2. Initialisation par défaut des

champs,

3. Initialisation explicite des

champs,

4. Exécution des instructions du

constructeur.

1. Allocation mémoire pour un

objet de type B;

2. Initialisation par défaut de

tous les champs de B(aussi

bien ceux hérités de A, que

ceux propres à B) aux valeurs

"nulles" habituelles.

3. Initialisation explicite, s’il y a

lieu, des champs hérités de A.

4. Exécution du corps du

constructeur de A.

5. Initialisation explicite, s’il y a

lieu, des champs propres à B.

6. Exécution du corps du

constructeur de B.

KACIMI Lamine / 201465

JAVA, Redéfinition de méthodesJA

VA

, R

ed

éfin

itio

n d

e

tho

de

sJava permet à une classe

dérivée de redéfinir des

méthodes définies dans la

classe de base.

03 Conditions:1. Le type de retour doit

être le même et/ou

covariant.

2. le droit d’accès de la

méthode de la classe

dérivée ne doit pas être

moins élevé que celui de

la classe ascendante.

3. la clause throws de laméthode de la classe

dérivée ne doit pas

mentionner des

exceptions non

mentionnées dans la

clause throws de laméthode de la classe

ascendante

KACIMI Lamine / 201466

JAVA, Redéfinition de méthodesJA

VA

, R

ed

éfin

itio

n d

e

tho

de

s

• classe A: méthode f de A

• classe B: méthode f de A

• classe C: méthode f de C

• classe D: méthode f de D

• classe E: méthode f de A

• classe F: méthode f de C.

KACIMI Lamine / 201467

JAVA, PolymorphismeJA

VA

, Po

lym

orp

his

me

Le polymorphisme permet de manipuler des objets sans en

connaître (tout à fait) le type.

Exercice: Ecrire un programme qui crée un tableau hétérogène

d’objets Point et envoie le message afficher() à chacun d’eux.

KACIMI Lamine / 201468

JAVA, Limites du polymorphismeJA

VA

, Li

mite

s d

u

po

lym

orp

his

me

KACIMI Lamine / 201469

JAVA, La super-classe ObjetJA

VA

, La

su

pe

r-c

lass

eO

bje

t

En réalité, dans JAVA, il existe une classe nommée Object dont

dérive implicitement toute classe simple.

Méthodes de la classe Object:

Méthode Explication

toString Fournit une chaîne contenant :• le nom de la classe concernée,• l’adresse de l’objet en hexadécimal (précédée de @).

equals Se contente de comparer les adresses des deux objets concernés

KACIMI Lamine / 201470

JAVA, Les classes et les méthodes finalesJA

VA

, Le

s c

lass

es

et

les

tho

de

s fin

ale

sUne méthode déclarée final ne peut pas être redéfinie dans une

classe dérivée.

Une classe déclarée final ne peut plus être dérivée.

Par exemple, les classes wrappers (Integer, Double, …etc.) sont

déclarées finales et ne peuvent donc pas être dérivées.

Quand doit-on déclarer des classes finales?

KACIMI Lamine / 201471

JAVA, Les classes abstraitesJA

VA

, Le

s c

lass

es

ab

stra

ite

s

Une classe abstraite est une classe qui ne permet pas d’instancier

des objets. Elle ne peut servir que de classe de base pour une

dérivation. Elle se déclare ainsi :

Animal Son

Abeille Bourdonne

Hibou Hue, ulule

Bœuf Beugle, meugle

Cerf Brame

Cheval Hennit

Chien Aboie

Cochon Grogne

Corbeau Croasse

Pigeon Caracoule

KACIMI Lamine / 201472

JAVA, Les interfacesJA

VA

, Le

s in

terf

ac

es Si l’on considère une classe abstraite n’implantant aucune

méthode et aucun champ (hormis des constantes), on aboutit à la

notion d’interface. En effet, une interface définit les en-têtes d’un

certain nombre de méthodes, ainsi que des constantes.

Cependant, nous allons voir que cette dernière notion se révèle

plus riche qu’un simple cas particulier de classe abstraite. En effet :

• Une classe pourra implémenter plusieurs interfaces (alors

qu’une classe ne pouvait dériver que d’une seule classe

abstraite), à condition qu’elles soient compatibles

• les interfaces pourront se dériver,

• on pourra utiliser des variables de type interface.

KACIMI Lamine / 201473

JAVA, Les classes anonymesJA

VA

, Le

s c

lass

es

an

on

ym

es

KACIMI Lamine / 201474

JAVA, Les chaînes de caractères et les

types énumérés

JA

VA

, Le

s c

ha

îne

s d

e

ca

rac

tère

s e

t le

s ty

pe

s

én

um

éré

s

1. La classe String

2. La classe StringBuffer

3. La classe StringBuilder

4. Les types énumérés (depuis JDK 5.0)

KACIMI Lamine / 201475

JAVA, La classe StringJA

VA

, La

cla

sse

Str

ing

Java dispose d’une classe standard nommée String, permettant

de manipuler des chaînes de caractères, c’est-à-dire des suites de

caractères. Les constantes chaînes telles que « bonjour » ne sont

en fait que des objets de type String construits automatiquement

par le compilateur.

La classe String dispose de deux constructeurs, l’un sans

argument créant une chaîne vide, l’autre avec un argument de

type String qui en crée une copie.

La classe String dispose d’autres constructeurs aussi, mais les deux

ci-dessus mentionnés sont les plus utilisés.

KACIMI Lamine / 201476

JAVA, Méthodes de la classe StringJA

VA

, M

éth

od

es

de

la

cla

sse

Str

ing

1. Longueur d’une chaîne : length

La méthode length permet d’obtenir la longueur d’une chaîne,

c’est-à-dire le nombre de caractères qu’elle contient (pour être

plus précis, il faudrait parler de la longueur de l’objet String dont

on lui fournit la référence).

2. Accès aux caractères d’une chaîne : charAt

La méthode charAt de la classe String permet d’accéder à un

caractère de rang donné d’une chaîne (le premier caractère

porte le rang 0)

3. Concaténation de chaînes: +

L’opérateur + est défini lorsque ses deux opérandes sont des

chaînes. Il fournit en résultat une nouvelle chaîne formée de la

concaténation des deux autres. Si seule une opérande est de

type String, l’autre se voit converti en String aussi (Formatage)

KACIMI Lamine / 201477

JAVA, Méthodes de la classe StringJA

VA

, M

éth

od

es

de

la

cla

sse

Str

ing

4. Recherche dans une chaîne: indexOf, lastIndexOf

La méthode indexOf permet de rechercher, à partir du début

d’une chaîne ou d’une position donnée :

•la première occurrence d’un caractère donné,

•la première occurrence d’une autre chaîne.

Dans tous les cas, elle fournit :

•la position du caractère (ou du début de la chaîne

recherchée) si une correspondance a effectivement été

trouvée,

•la valeur -1 sinon.

Il existe également une méthode lastIndexOf, qui effectue les

mêmes recherches que indexOf, mais en examinant la chaîne

depuis sa fin.

5. Comparaison de chaînes: ==,!=,equals, equalsIgnoreCase

KACIMI Lamine / 201478

JAVA, Méthodes de la classe StringJA

VA

, M

éth

od

es

de

la

cla

sse

Str

ing

6. Comparaison de chaînes: compareTo

La méthode compareTo s’utilise ainsi :

chaîne1.compareTo(chaîne2)

Elle fournit :

•un entier négatif si chaîne1 arrive avant chaîne2.

•un entier nul si chaîne1 et chaîne2 sont égales.

•un entier positif si chaîne1 arrive après chaîne2

.7. Majuscule et Minuscule: toLowerCase, toUpperCase:

.8. Suppression des séparateurs de début et de fin: trim

Exercice: Ecrire un programme Java qui permet de trier un

tableau de chaînes normalisées.

9. Conversions: String.valueOf()

KACIMI Lamine / 201479

JAVA, La classe StringBufferJA

VA

, La

cla

sse

Str

ing

Bu

ffe

r

Les objets de type String ne sont pas modifiables mais nous avons

vu qu’il était possible de les employer pour effectuer la plupart des

manipulations de chaînes.

Cependant, la moindre modification d’une chaîne ne peut se

faire qu’en créant une nouvelle chaîne (c’est le cas d’une simple

concaténation).

C’est pourquoi Java dispose d’une classe StringBuffer destinée elle

aussi à la manipulation de chaînes, mais dans laquelle les objets

sont modifiables.

KACIMI Lamine / 201480

JAVA, Méthodes de la classe StringBufferJA

VA

, M

éth

od

es

de

la

cla

sse

Str

ing

Bu

ffe

r

Il existe des méthodes :

• de modification d’un caractère de rang donné : setCharAt,

• d’accès à un caractère de rang donné : charAt,

• d’ajout d’une chaîne en fin : la méthode append accepte des

arguments de tout type primitif et de type String,

• d’insertion d’une chaîne en un emplacement donné : insert,

• de remplacement d’une partie par une chaîne donnée :

replace,

• de conversion de StringBuffer en String : toString.

KACIMI Lamine / 201481

JAVA, Types énumérésJA

VA

, Ty

pe

s é

nu

rés

1. Définition

2. Déclaration d’une variable de type énuméré

KACIMI Lamine / 201482

JAVA, Types énumérésJA

VA

, Ty

pe

s é

nu

rés

3. Comparaison

4. Utilisation d’un type énuméré dans une instruction switch

KACIMI Lamine / 201483

JAVA, Types énumérésJA

VA

, Ty

pe

s é

nu

rés

5. Conversion entre types énumérés et chaînes

6. Itération sur les valeurs d’un type énuméré

KACIMI Lamine / 201484

JAVA, Types énumérésJA

VA

, Ty

pe

s é

nu

rés

7. Ajout de constructeur et de méthodes

KACIMI Lamine / 201485

JAVA, La gestion des exceptionsJA

VA

, G

est

ion

de

s e

xc

ep

tio

ns

Même lorsqu’un programme est au point, certaines circonstances

exceptionnelles peuvent compromettre la poursuite de son

exécution.

• Il peut s’agir par exemple de données incorrectes.

• Problème d’accès à un fichier.

• Attente de réponse d’un serveur hors service.

• Problème matériel quelconque.

KACIMI Lamine / 201486

JAVA, La hiérarchie des exceptions JAVAJA

VA

, La

hié

rarc

hie

de

s

exc

ep

tio

ns

JA

VA

KACIMI Lamine / 201487

JAVA, La hiérarchie des exceptions JAVAJA

VA

, La

hié

rarc

hie

de

s

exc

ep

tio

ns

JA

VA

KACIMI Lamine / 201488

JAVA, Runtime ExceptionsJA

VA

, R

un

tim

eExc

ep

tio

ns

Exception Explications

ArithmeticException Exception générée suite à une erreur d’arithmétique

ArrayIndexOutOfBoundsException Exception générée suite à l’accès à un index en dehors des limites d’un tableau, d’une collection

ArrayStoreException Exception générée lorsque un programme essaye de mettre dans un tableau d’objets un objet incompatible

ClassCastException Exception générée en essayant de convertir explicitement un objet vers un type non compatible

IllegalArgumentException Exception générée suite au passage d’un mauvais argument à une méthode

IllegalMonitorStateException Appel de wait, notify, notifyAll depuis un thread qui ne détient pas le moniteur de l’objet

IllegalStateException Opération demandée alors que l’état de la machine virtuelle est elle dans un état qui lui permet pas de traiter l’opération

IllegalThreadStateException Exemple: demander la continuation d’un thread alors qu’il est dans l’état terminé.

IndexOutOfBoundsException Super-classe de ArrayIndexOutOfBoundsExcception

NegativeArraySizeException Création d’un tableau avec un nombre négatif d’éléments

NullPointerException Accès à des méthodes d’un objet via la référence null

NumberFormatException Echec de la conversion depuis String ver Number

SecurityException Exécution d’une opération qui viole la politique de sécurité préservée par un objet SecurityManger

StringIndexOutOfBoundsException Exception générée suite à l’accès à un index en dehors des limites d’un objet String, StringBuffer.

KACIMI Lamine / 201489

JAVA, Traitement des exceptions,

Exceptions handling

JA

VA

, Tr

aite

me

nt

de

s

exc

ep

tio

ns Deux types d’exceptions:

1. Checked Exceptions (Exceptions explicites): (à traiter par le

programmeur)

2. Unchecked Exceptions (Exceptions implicites): Traité par un

mécanisme mis en place par la JVM.

KACIMI Lamine / 201490

JAVA, Traitement des exceptions

unchecked

JA

VA

, Tr

aite

me

nt

de

s

exc

ep

tio

ns

Default handler(stackTrace + arrêt du

thread)

KACIMI Lamine / 201491

JAVA, Traitement des exceptions

checked

JA

VA

, Tr

aite

me

nt

de

s

exc

ep

tio

ns

Utilisation de blocs try, catch, ou en ajoutant throws à la

méthode à l’origine de l’exception

Si les exceptions checked ne sont pas traitées par le

programmeur, elle seront traitées par la jvm au même titre que

les exceptions unchecked.

D’autre part, les exceptions unchecked peuvent également être

traitées par le programmeur

Il n y a aucune différence en terme de fonctionnalités entres les

exceptions checked et unchecked. Les exceptions checked« obstruent » le code métier .

KACIMI Lamine / 201492

JAVA, Déclencher une exception, throwJA

VA

, D

éc

len

ch

er

un

e

exc

ep

tio

n

KACIMI Lamine / 201493

JAVA, Gestionnaire d’exception, le bloc

try …..catchJA

VA

, G

est

ion

na

ire

d’e

xc

ep

tio

n

KACIMI Lamine / 201494

JAVA, Gestion de plusieurs exceptionsJA

VA

, G

est

ion

de

plu

sie

urs

exc

ep

tio

ns

KACIMI Lamine / 201495

JAVA, Gestion de plusieurs exceptionsJA

VA

, G

est

ion

de

plu

sie

urs

exc

ep

tio

ns

Depuis Java7, il est possible d’écrire un seul block catch pour

traiter plusieurs exceptions

KACIMI Lamine / 201496

JAVA, La clause throwsJA

VA

, La

cla

use

th

row

s

Toute méthode susceptible de déclencher une exception explicite

qu’elle ne traite pas localement doit mentionner son type dans

une clause throws figurant dans son en-tête.

Bien entendu, cette règle concerne les exceptions que la

méthode peut déclencher directement par l’instruction throw,

mais aussi toutes celles que peuvent déclencher (sans les traiter)

toutes les méthodes qu’elle appelle

KACIMI Lamine / 201497

JAVA, Redéclenchement d’une

exception

JA

VA

, R

ed

éc

len

ch

em

en

td

’un

e

exc

ep

tio

n

Dans un gestionnaire d’exception, il est possible de demander

que, malgré son traitement, l’exception soit retransmise à un

niveau englobant, comme si elle n’avait pas été traitée. Il suffit

pour cela de la relancer en appelant à nouveau l’instruction

throw.

KACIMI Lamine / 201498

JAVA, Le bloc finallyJA

VA

, Le

blo

c f

ina

lly Nous avons vu que le déclenchement d’une exception provoque

un branchement inconditionnel au gestionnaire, à quelque niveau

qu’il se trouve. L’exécution se poursuit avec les instructions suivant

ce gestionnaire.

Java permet d’introduire, à la suite d’un bloc try, un bloc

particulier d’instructions qui seront toujours exécutées :

• soit après la fin "naturelle" du bloc try, si aucune exception n’a

été déclenchée,

• soit après le gestionnaire d’exception (à condition, bien sûr, que

ce dernier n’ait pas provoqué d’arrêt de l’exécution).

KACIMI Lamine / 201499

JAVA, Les structures de données (les

collections)

JA

VA

, Le

s st

ruc

ture

s d

e

do

nn

ée

s (l

es

co

lle

ctio

ns)

List: Stocker des objets sans conditions particulières

Set: Pas deux fois ou plus le même objet

Map: Système clé-valeur

KACIMI Lamine / 2014100

JAVA, Les structures de données (les

collections)

JA

VA

, Le

s st

ruc

ture

s d

e

do

nn

ée

s (l

es

co

lle

ctio

ns)

KACIMI Lamine / 2014101

JAVA, Les structures de données (les

collections)

JA

VA

, Le

s st

ruc

ture

s d

e

do

nn

ée

s (l

es

co

lle

ctio

ns)

KACIMI Lamine / 2014102

JAVA, Les classes implémentant

l’interface List

JA

VA

, Le

s c

lass

es

imp

lém

en

tan

t

l’in

terf

ac

e L

ist

LinkedList, Vector, ArrayList

KACIMI Lamine / 2014103

JAVA, Quelques méthodes de l’interface

List

JA

VA

, Le

s c

lass

es

imp

lém

en

tan

t

l’in

terf

ac

e L

ist

•add() permet d'ajouter un élément ;

•get(int index) retourne l'élément à l'indice demandé ;

•remove(int index) efface l'entrée à l'indice demandé ;

•isEmpty() renvoie « vrai » si l'objet est vide ;

•removeAll() efface tout le contenu de l'objet ;

•contains(Object element) retourne « vrai » si l'élément passé en paramètre est dans l'ArrayList.

Si vous effectuez beaucoup de lectures sans vous soucier de

l'ordre des éléments, optez pour une ArrayList ; en revanche, si

vous insérez beaucoup de données au milieu de la liste, optez

pour une Linkedlist.

KACIMI Lamine / 2014104

JAVA, les classes implémentant

l’interface Map

JA

VA

, Le

s c

lass

es

imp

lém

en

tan

t

l’in

terf

ac

e L

ist

HashTable, HashMap

KACIMI Lamine / 2014105

JAVA, Méthodes de l’interface MapJA

VA

, M

éth

od

es

de

l’in

terf

ac

e

Ma

pHashTable, HashMapLa classe HashTable nous offre tout un panel de méthodes utiles :

•isEmpty() retourne « vrai » si l'objet est vide ;

•contains(Object value) retourne « vrai » si la valeur est présente.

Identique àcontainsValue(Object value) ;

•containsKey(Object key) retourne « vrai » si la clé passée en

paramètre est présente dans laHashtable ;

•put(Object key, Object value) ajoute le couple key - value dans

l'objet ;

•elements() retourne une énumération des éléments de l'objet ;

•keys() retourne la liste des clés sous forme d'énumération.

HashMap accepte null et n’est pas thread safe (plus rapide

donc)

KACIMI Lamine / 2014106

JAVA, Classes implémentant l’interface

Set

JA

VA

, C

lass

es

imp

lém

en

tan

t

l’in

terf

ac

e S

et

HashSet, TreeSet, LinkedHashSet

Exercice: Trier un tableau d’ entiers en utilisant an objet TreeSet

KACIMI Lamine / 2014107

JAVA, Méthodes de l’interface SetJA

VA

, M

éth

od

es

de

l’in

terf

ac

e

Ma

pHashTable, HashMap

La classe HashTable nous offre tout un panel de méthodes utiles :

•add()

•contains(Object value)

•isEmpty()

•iterator()

•remove()

•toArray()

KACIMI Lamine / 2014108

JAVA, Récapitulatif sur les collectionsJA

VA

, R

éc

ap

itu

latif

sur

les

co

lle

ctio

ns

•Une collection permet de stocker un nombre variable d'objets.

•Il y a principalement trois types de collection : les List, les Set et

les Map.

•Chaque type a ses avantages et ses inconvénients.

•Les Collection stockent des objets alors que les Map stockent un

couple clé - valeur.

•Si vous insérez fréquemment des données en milieu de liste,

utilisez une LinkedList.

•Si vous voulez rechercher ou accéder à une valeur via une clé

de recherche, optez pour une collection de type Map.

•Si vous avez une grande quantité de données à traiter, tournez-

vous vers une liste de type Set.

KACIMI Lamine / 2014

FIN INITIATION JAVA

109

FIN

IN

ITIA

TIO

N J

AV

A

KACIMI Lamine / 2014

Gestion des entrées/sorties

110

Les

en

tré

es/

sort

ies

KACIMI Lamine / 2014111

Gestion des fichiersLe

s e

ntr

ée

s/so

rtie

s • La gestion de fichiers se fait par l'intermédiaire de la classe

java.io.File.

• Cette classe possède des méthodes qui permettent d'interroger

ou d'agir sur le système de fichiers du système d'exploitation.

• Un objet de la classe java.io.File peut représenter un fichier ou un

répertoire.

KACIMI Lamine / 2014112

Gestion des fichiersLe

s e

ntr

ée

s/so

rtie

s

KACIMI Lamine / 2014113

Méthode de la classe FileLe

s e

ntr

ée

s/so

rtie

s File (String name)

File (String path, String name)

File (File dir, String name)

boolean isFile ()

boolean isDirectory ()

boolean mkdir ()

boolean exists ()

boolean delete ()

boolean canWrite ()

boolean canRead ()

File getParentFile ()

long lastModified ()

String [] list ()

KACIMI Lamine / 2014114

Gestion des fluxLe

s e

ntr

ée

s/so

rtie

s • Un flux (stream) est un chemin de communication entre la

source d'une information et sa destination.

• Difficulté d'un langage d'avoir un bon système d'entrées/sorties.

• Beaucoup de sources d'E/S de natures différentes (console,

fichier, socket,...).

• Beaucoup d'accès différents (accès séquentiel, accès

aléatoire, mise en mémoire tampon, binaire, caractère, par

ligne, par mot, etc.).

• Problème de codage (UNICODE, ASCII, ISO……)

KACIMI Lamine / 2014115

Gestion des flux…suiteLe

s e

ntr

ée

s/so

rtie

s • Java propose les flux suivants.

• Flux d'entrée/sortie de bytes.

• Flux d'entrée/sortie de caractères depuis la version 1.1 de java.

• Toutes les classes d'entrée/sortie sont dans le package java.io

• Toutes les méthodes peuvent générer une java. io.IOException

KACIMI Lamine / 2014116

InputStream, classes dérivéesLe

s e

ntr

ée

s/so

rtie

s

InputStream

FilterInputStream

DataInputStream BufferedInputStream PushBackInputStream

PipeInputStream FileInputStream

KACIMI Lamine / 2014117

OutputStream, classes dérivéesLe

s e

ntr

ée

s/so

rtie

s

OutputStream

FilterOutputStream

DataOutputStream BufferedOutputStream PrintStream

ObjectOutputStreamByteArrayOutputStrea

m

KACIMI Lamine / 2014118

FileOutputStream et FileInputStreamLe

s e

ntr

ée

s/so

rtie

s

KACIMI Lamine / 2014119

La classe InputStreamLe

s e

ntr

ée

s/so

rtie

s

Méthodes de lecture

• public int read () ;

• public int read (byte b[ ]) ;

• public int read (byte b[], int off, int len) ;

Sauter des octets : public long skip (long n) ;

Combien d'octets dans le flux : public int available () ;

Le flux supporte-t'il le marquage ? public boolean

markSupported () ;

Marquage d'un flux : public void mark (int readlimit) ;

Revenir sur la marque: public void reset () ;

Fermer un flux : public void close () ;

KACIMI Lamine / 2014120

La classe OutputStreamLe

s e

ntr

ée

s/so

rtie

s Méthodes d’écriture

• public void write (int b) ;

• public void write (byte b []) ;

• public void write (byte b [], int off, int len)

Nettoyage d'un flux, forçant l'écriture des données bufférisées:

public void flush () ;

Fermeture d'un flux public void close () ;

KACIMI Lamine / 2014121

FilterInputStream et FilterOutputStreamLe

s e

ntr

ée

s/so

rtie

s

Ces deux classes servent de classes de base à des classes de

gestion d'entrées/sorties plus évoluées:

• BufferedInputStream et BufferedOutputStream permettent de

lire et écrire des données à travers un tampon de

lecture/écriture pour améliorer les performances.

• DataInputStream et DataOutputStream permettent de

lire/écrire des données formatées (byte, int, char, float,

double, etc.)

KACIMI Lamine / 2014122

Classes de flux de caractèresLe

s e

ntr

ée

s/so

rtie

s

KACIMI Lamine / 2014123

Exemple avec BufferedReaderLe

s e

ntr

ée

s/so

rtie

s

KACIMI Lamine / 2014124

La sérialisationLe

s e

ntr

ée

s/so

rtie

s

La sérialisation d'un objet est le processus de stockage d'un objet

complet (par exemple sur un disque).

• Le processus inverse est la désérialisation.

• Un objet sérialisé est dit persistant

Une classe est sérialisable si elle implémente l'interface

java.io.Serializable.

Des objets de type java.io.ReadObjectStream et

java.io.WriteObjectStream vont permettre de

sérialiser/désérialiser.

Les données membres que l'on ne souhaite pas sauvegarder

doivent être déclarées transient.

KACIMI Lamine / 2014125

La sérialisation….suiteLe

s e

ntr

ée

s/so

rtie

s Des méthodes de lecture/écriture peuvent être redéfinies le cas

échéant:

private void writeObject (java.io.ObjectOutputStream out) throws

IOException ;

private void readObject (java.io.ObjectInputStream in) throws

IOException, ClassNotFoundException ;

KACIMI Lamine / 2014126

Le package java.nioLe

s e

ntr

ée

s/so

rtie

s • Nouveau package de gestion des entrées/sorties introduit dans la

version 1.4.

• NIO permet d'utiliser des entrées/sorties plus rapides en gérant des

blocs plutôt que des bytes ou caractères.

• Les objets de base pour ce type d'entrée sortie sont: Buffer et

Channel

• Un "Buffer' contient les données à lire ou écrire, un "Channel"

désigne la source ou la destination de l'information. Une

entrée/sortie sur un objet "Channel" transite obligatoirement par un

objet "Buffer"

KACIMI Lamine / 2014127

Le package java.nio… exempleLe

s e

ntr

ée

s/so

rtie

s

KACIMI Lamine / 2014128

Nouveautés dans Java7Le

s e

ntr

ée

s/so

rtie

s • La gestion des entrées/sorties a été améliorée dans Java7. à vous

de découvrir les nouvelles classes, non?

KACIMI Lamine / 2014

Programmation réseau, les sockets

129

Pro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014130

IntroductionPro

gra

mm

atio

n r

ése

au

• Même si la plupart des applications développées en java

reposent sur des bibliothèques de haut-niveau, il est parfois utile

d'utiliser les sockets à bas niveau.

• Depuis la sortie de java, une API permettant de gérer le réseau est

disponible dans le JDK, elle permet de gérer les adresses, les

sockets clients, les sockets serveurs, les URL... Dans ce cours, nous

verrons comment utiliser cette API en faisant parfois un lien avec

la gestion du réseau bas-niveau. (le package java.net)

• Il est utile d'avoir des connaissances en réseau même si je tenterai

au maximum de réexpliquer les notions utiles.

KACIMI Lamine / 2014131

Le modèle ISO (norme ISO 7498-1) Pro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014132

Adressage Pro

gra

mm

atio

n r

ése

au

•Avant d'entamer la partie communication proprement dite, nous

allons apprendre à utiliser les adresses IP en java.

•Afin que deux applications communiquent (en utilisant le

protocole IP), il est nécessaire de connaître l'adresse IP de l'autre

machine. L'API standard permet de les manipuler en utilisant la

classe InetAddress. Cette classe permet de manipuler aussi bien

les adresses IPv4 que les adresses IPv6. Ceci correspond à deux

normes différentes, la plupart des IP rencontrées sont en IPv4 et

ont une notation sous la forme 127.0.0.1.

KACIMI Lamine / 2014133

La classe InetAddressPro

gra

mm

atio

n r

ése

au

static InetAddress

getByAddress(byte[] addr)

obtenir un InetAddress à partir d'un

champ de bytes (4 pour l'IPv4)

static InetAddress

getByName(String host)

permet d'obtenir l'adresse à partir

du nom d'hôte

static InetAddress getLocalHost() permet d'obtenir l'adresse de

l'hôte local

byte[] getAddress() retourne un champ de byte

correspond à l'adresse

String getHostAddress() retourne l'adresse sous forme

pointée

String getHostName() retourne le nom d'hôte

KACIMI Lamine / 2014134

Adressage, ExemplePro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014135

Le protocole TCPPro

gra

mm

atio

n r

ése

au

Afin de communiquer entre plusieurs machines de manière simple,

les informaticiens ont défini deux protocoles

réseaux couramment utilisés de nos jours : le protocole TCP et le

protocole UDP.

De manière assez sommaire, le protocole TCP a été créé pour

permettre d'envoyer des données de manière fiable par le réseau,

notamment en :

• s'assurant que les données arrivent au destinataire, en cas

d'échec de transmission, l'ordinateur émetteur doit être mis au

courant

• s'assurant que les données arrivent dans le bon ordre

• définissant une connexion entre les machines

KACIMI Lamine / 2014136

Le protocole UDPPro

gra

mm

atio

n r

ése

au

UDP est peu fiable, il n'est pas certain que les données arrivent et il

n'est pas certains que les données arrivent dans le bon ordre. TCP

effectue un nombre important d'allers et retours, ce qui a

l'inconvénient de faire diminuer la vitesse de connexion. De nos

jours, TCP est quasiment tout le temps utilisé, sauf pour les

échanges dont la perte de paquets n'est pas important

(typiquement vidéocast, VoIP...).

Java propose plusieurs classes pour manipuler ces protocoles de

manière absolument transparente.

•La classe Socket repose sur le protocole TCP et permet donc de

transmettre des données de manière fiable.

•La classe DatagramSocket quant à elle, repose sur UDP.

KACIMI Lamine / 2014137

Le mode connectéPro

gra

mm

atio

n r

ése

au

Serveur Client1.Création d'un objet ServerSocket pour l'ouverture du service

2.Attente d'une demande de connexion (méthode accept () qui retourne une socket de service)

3.Echange d'informations avec le client

4.Fermeture socket (méthode close()).

1. Création d'un objet Socket.

2. Connexion sur le serveur.

3. Echange d'informations avec

le serveur

4. Fermeture socket (méthode

close ()).

KACIMI Lamine / 2014138

Le mode connecté, le clientPro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014139

Le mode connecté, le serveurPro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014140

Le mode non connecté, DatagramSocketPro

gra

mm

atio

n r

ése

au

• Les constructeurs:

• public DatagramSocket () ;• public DatagramSocket (int port) ;

• public DatagramSocket (int port, InetAddr laddr) ;

• Quelques méthodes:

• public void receive (DatagramPacket p) ;

• public void send (DatagramPacket p) ;

La classe java.net.DatagramPacket contient les données reçues ou

à envoyer (tableau de bytes) et l'adresse (java.net.InetAddress) de

l'expéditeur ou du destinataire.

KACIMI Lamine / 2014141

Le mode non connecté, le clientPro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014142

Le mode non connecté, le serveurPro

gra

mm

atio

n r

ése

au

KACIMI Lamine / 2014143

Le multicast, la classe MulticastSocketPro

gra

mm

atio

n r

ése

au

Cette classe permet d’utiliser le multicasting IP pour envoyer des

datagrammes UDP à un ensemble de machines repéré grâce à

une adresse multicast (classe D dans IP version 4 : de 224.0.0.1 à

239.255.255.255)

Pour pouvoir recevoir des datagrammes UDP envoyés grâce au

multicasting IP il faut s’abonner à une adresse multicast

De même lorsqu’on ne souhaite plus recevoir des datagrammes

UDP envoyés à une adresse multicast on doit indiquer la

résiliation de l’abonnement.

public void joinGroup(InetAddress adresseMulticast) throws

IOException et void leaveGroup(InetAddress adresseMulticast);

KACIMI Lamine / 2014

Programmation concurrente, les threads

144

Pro

gra

mm

atio

n c

on

cu

rre

nte

KACIMI Lamine / 2014145

Threads, IntroductionPro

gra

mm

atio

n c

on

cu

rre

nte

Un thread est une unité d'exécution au sein d'un même

processus (ce n'est pas un autre processus).

Tous les threads d'un même processus partagent la même zone

mémoire.

La programmation multithreads donne l'illusion de la simultanéité.

La gestion des threads est dépendante de la JVM

(problème pour la portabilité). Les threads peuvent être

préemptifs ou coopératifs.

KACIMI Lamine / 2014146

Threads, IntroductionPro

gra

mm

atio

n c

on

cu

rre

nte

Un thread possède un nom et une priorité.

Un thread s'exécute jusqu'au moment où:

• Un thread de plus grande priorité devient exécutable.

• Une méthode wait (), yield () ou sleep () est lancée.

• Son quota de temps a expiré dans un système préemptif.

KACIMI Lamine / 2014147

Création de threadsPro

gra

mm

atio

n c

on

cu

rre

nte

Une classe est un thread si elle remplit une des deux

conditions:

•Elle étend la classe java.lang.Thread

•Elle implémente l'interface java.lang.Runnable

Le corps du thread est contenu dans une méthode: public

void run ()

Un thread est lancé par appel d'une méthode start ()

KACIMI Lamine / 2014148

Threads, premier exemplePro

gra

mm

atio

n c

on

cu

rre

nte

KACIMI Lamine / 2014149

Threads, deuxième exemplePro

gra

mm

atio

n c

on

cu

rre

nte

KACIMI Lamine / 2014150

La classe java.lang.threadPro

gra

mm

atio

n c

on

cu

rre

nte

start () Rend un thread exécutable en lançant la méthode

run ().

sleep (i) Endort le thread pour i millisecondes.

wait()* Suspend le thread.

notify ()* Place le thread dans un état exécutable.

notifyAll ()* Réveille tous les threads en attente.

yield () Place le thread de l'état « en cours d'exécution » à

l'état « exécutable ».

setPriority (i) Modifie la priorité d'un thread (i est compris entre

MIN_PRIORITY et MAX_PRIORITY).

join ()

join (long)

Pour qu'un deuxième thread attende la fin

d'exécution d'un premier thread, il suffit d'appeler la

méthode join sur le premier thread. Un paramètre

de temps (en millisecondes) peut être spécifié.

KACIMI Lamine / 2014151

Cycle de vie d’un threadPro

gra

mm

atio

n c

on

cu

rre

nte

KACIMI Lamine / 2014152

Les threads, la synchronisationPro

gra

mm

atio

n c

on

cu

rre

nte

Plusieurs threads accédant à une même donnée doivent être

synchronisés

La synchronisation peut se faire sur un objet (pas de

synchronisation possible pour une variable d'un type de base)

Mot clé: synchronized

Si un thread invoque une méthode synchronized d’un objet,

l’objet se verra verouillé pour toutes ses méthodes synchronized.

KACIMI Lamine / 2014153

Synchronisation, 1er exemplePro

gra

mm

atio

n c

on

cu

rre

nte

KACIMI Lamine / 2014154

Synchronisation, 2ème exemplePro

gra

mm

atio

n c

on

cu

rre

nte

KACIMI Lamine / 2014155

Atelier pratiquePro

gra

mm

atio

n c

on

cu

rre

nte

Implémentation d’un serveur multithread qui offre les services

suivants

*. Envoi la date courante

*. Envoi le double de la valeur émanant du client

*. Vos idées?

KACIMI Lamine / 2014

Les interfaces graphiques (SWING)

156

Les

inte

rfa

ce

s g

rap

hiq

ue

s

KACIMI Lamine / 2014157

IntroductionLe

s in

terf

ac

es

gra

ph

iqu

es

• Dans tous les exemples et exercices traités jusque la, nous

avons utilisé la console pour interagir avec le programme

Java

• Pour améliorer l’expérience utilisateur, Java nous offre la

possibilité de développer des interfaces graphiques (les

interactions seront donc assurées avec le clavier et la souris.

• Pour développer des interfaces graphiques, Java dispose de

2 API, à savoir AWT et SWING (Il y a d’autres API mais elles ne

sont pas intégrées à l’API Java – SWT de IBM)

KACIMI Lamine / 2014158

AWT vs SWINGLe

s in

terf

ac

es

gra

ph

iqu

es

• Les deux API font parti de JFC (Java Foundation Classes), en

plus de Java2D, Accessibility, DragAndDrop

• AWT joue le rôle d’un wrapper au composants du Système

d’Exploitation et le rendu est donc OS dépendant –On dit

alors que AWT est heavyweighted

• SWING est une bibliothèque purement JAVA et on peut

donc contrôler le rendu plus facilement.

• AWT existe encore à cause des applets. Mais les applets ne

sont plus d’actualité non plus, (HTML5)

• AWT= Abstract Windowing Toolkit

KACIMI Lamine / 2014159

AWT vs SWING Suite….Le

s in

terf

ac

es

gra

ph

iqu

es

• SWING étend AWT en terme de fonctionnalités – Il y a

toujours un composant SWING équivalent pour un

composant AWT

• SWING offre un set de composants beaucoup plus riche

• AWT était préféré parce que le code généré est plus rapide–

mais grâce à des améliorations au niveau de SWING et au

niveau des machines virtuelles, on peut achever les mêmes

performances avec SWING et c’est donc la bibliothèque la

plus utilisée de nos jours.

• Utiliser donc SWING et non pas AWT

• Faut surtout pas mélanger les deux!

KACIMI Lamine / 2014160

SWINGLe

s in

terf

ac

es

gra

ph

iqu

es

• SWING est une API permettant de créer des interfaces

graphiques en JAVA . (GUI toolkit) | GUI=Graphic User

Interface.

• SWING est développée par SUN microsystems .

• SWING fait partie de JFC

• SWING est:

• Plateforme indépendante

• Personnalisable

• Extensible

• Lightweight (100% en Java)

• SWING: c’est 18 packages….

• SWING offre plusieurs composants (lables, boutons, barres de

déroulement, mais également des tables, des

arborescences.

KACIMI Lamine / 2014161

SWING, un premier exempleLe

s in

terf

ac

es

gra

ph

iqu

es

KACIMI Lamine / 2014162

SWING, Ajouter un bouton à la fenêtre, un bouton avec un ActionListener

Les

inte

rfa

ce

s g

rap

hiq

ue

s

1. Créer un JPanel

2. Mettre le JPanel dans le Jframe

3. Créer un JButton e l’ajouter au Jpanel.

4. Noter l’actionListener, ici ajouté avec une classe anonyme

KACIMI Lamine / 2014163

SWING, Les menus et les barres d’outilsLe

s in

terf

ac

es

gra

ph

iqu

es

1. Pour implémenter les menus et les barres d’outils en Java, on

utilise les classes suivantes:

• JMenuBar

• JMenu

• JMenuItem

KACIMI Lamine / 2014164

SWING, Les menus et les barres d’outilsLe

s in

terf

ac

es

gra

ph

iqu

es

1. Il est possible de créer des sous menus. Un sous menu est

exactement identique au menu et est donc crée de façon

similaire

2. La seule différence est que le menu sera rattaché au JFrame

alors que le sous-menu lui, sera rattaché à un menu existant.

3. Ajouter donc un sous menu dans votre application.

4. Dans le but d’améliorer l’interface, vous pouvez appliquer une

icône à chaque sous menu en utilisant votre propre icône ou

en utilisant des icônes de SWING:

Icon icon =

UIManager.getIcon("OptionPane.informationIcon");

5. Vous pouvez également ajouter des séparateurs à votre menu

en utilisant addSeparator();

KACIMI Lamine / 2014165

SWING, Les icônes built-inLe

s in

terf

ac

es

gra

ph

iqu

es

KACIMI Lamine / 2014166

SWING, CheckBoxMenuItemLe

s in

terf

ac

es

gra

ph

iqu

es

1. Vous pouvez ajouter à vos menus des liens de menu (Menu

Item) checkbox

JCheckBoxMenuItem sbar = new JCheckBoxMenuItem("Show

StatuBar");

2. Afin de positionner un des menu à droite de la fenêtre, on

appelle

menubar.add(Box.createHorizontalGlue());

Afin de consommer tout l’espace restant.

KACIMI Lamine / 2014167

SWING, Les menus contextuels (JPopupMenu) et les barres d’outils

(JToolBar)Le

s in

terf

ac

es

gra

ph

iqu

es

1. Ces menus sont dits contextuels car ce qu’ils affichent dépend

de l’objet sélectionné.

2. Exemple: Word: le menu contextuel qui s’affiche lorsqu’on

travaille avec un tableau vs celui qui s’affiche lorsqu’on

travaille avec une image.

3. Un exemple sera traité durant le cours.

4. Une Barre d’outils permet de rendre les fonctions récurrentes

plus accessibles.

5. Une JToolBar contiendra des boutons qui lancent plusieurs

fonctions de l’application en réponse au clic.

KACIMI Lamine / 2014168

SWING, JLayoutManagerLe

s in

terf

ac

es

gra

ph

iqu

es

1. FlowLayout manager:

• Chaque composant fils utilise sa taille par défaut

• Les composants sont placés par ligne, passage à la ligne

suivante s’il n y a plus d’espace.

• Les composants sont centrés et il y a un espace de 5px

entre chaque deux composants.

• Ce mamanger dispose de constructeurs permettant de

modifier ce comportement (Alignement des composants

et l’espace laissé entre deux composants successifs)

• Ce manager est celui utilisé par défaut sauf pour JFrame

dont le manager par défaut est de type BorderLayout

KACIMI Lamine / 2014169

SWING, JGridLayout, JBorderLayoutLe

s in

terf

ac

es

gra

ph

iqu

es

1. GridLayout manager:

• Le conteneur sera divisé en plusieurs emplacements

rectangulaires (une grille)

• new GridLayout(lignes, colonnes, Espace H, Espace V)

2. BorderLayout manager :

• Divise l’espace en 05 régions

(NORTH,WEST,EAST,SOUTH,CENTER)

• Chaque région contiendra un seul composant

KACIMI Lamine / 2014

RMI (Remote Mothod Invocation)

170

Re

mo

teM

eth

od

eIn

vo

ca

tio

n

KACIMI Lamine / 2014171

IntroductionR

em

ote

Me

tho

de

Invo

ca

tio

n

• Les approches traditionnelles pour développer des applications

réseaux à base de sockets sont lourdes. (on vient de le voir)

• Les RMI vont permettre de distribuer une application sur

plusieurs machines.

• Une application fera appel à des méthodes sur des objets

localisés sur des machines distantes.

• RMI se charge de faire transiter les paramètres et la valeur de

retour. Les communications pourront être sécurisées grâce à un

objet RMISecurityManager.

KACIMI Lamine / 2014172

Architecture RMIR

em

ote

Me

tho

de

Invo

ca

tio

n

KACIMI Lamine / 2014173

Architecture RMI…suiteR

em

ote

Me

tho

de

Invo

ca

tio

n

KACIMI Lamine / 2014174

RMI, Stub et SkeletonR

em

ote

Me

tho

de

Invo

ca

tio

n

Stub Skeleton

1. Classe spéciale générée par la

commande rmic.

2. Transforme un appel de

méthode en une suite d'octets

à envoyer sur le réseau

(marshaling).

3. Reconstruit le résultat reçu

sous le même format

(unmarshaling)

Format d'un appel de méthode:

• Identificateur de l'objet distant

• Identificateur de la méthode

• Paramètres sérialisés

1. Classe spéciale générée par

la commande rmic (cette

classe n'est plus générée depuis

la version 1.2 du protocole).

2. Reçoit la demande

d'invocation distante.

Reconstruit les paramètres.

Trouve l'objet distant et appelle

la méthode. Retourne le

résultat.

KACIMI Lamine / 2014175

RMI en pratique, l’interface RemoteR

em

ote

Me

tho

de

Invo

ca

tio

n

KACIMI Lamine / 2014176

RMI en pratique, la classe distanteR

em

ote

Me

tho

de

Invo

ca

tio

n

KACIMI Lamine / 2014177

RMI en pratique, création d’une instance de la classe distante

Re

mo

teM

eth

od

eIn

vo

ca

tio

n

KACIMI Lamine / 2014178

RMI en pratique, le client R

em

ote

Me

tho

dIn

vo

ca

tio

n

KACIMI Lamine / 2014

ANT

179

AN

T

KACIMI Lamine / 2014180

IntroductionA

NT

• Projet du groupe Apache-Jakarta pour permettre la

construction d'applications (compilation, déploiement, ...).

• Site officiel: http://jakarta.apache.org/ant

• Exécution de ant:

ant [-buildfile fichier.xml] [cible]

• Variables d'environnement nécessaires à l'exécution de ant:

ANT_HOME JAVA_HOME PATH

KACIMI Lamine / 2014181

Ant, fichier de configurationA

NT

•Le fichier de configuration propose un ensemble de cibles.

•Une cible contient une ou plusieurs tâches à exécuter.

•Les cibles peuvent être dépendantes entre elles.

KACIMI Lamine / 2014182

Ant, fichier de configuration…suiteA

NT

1. Le fichier de configuration commence par le préfixe:

<?xml version="1.0">

2. La balise racine est le projet: <project>

3. A l'intérieur du projet on trouve:

• Les cibles <target>

• Les propriétés

• Les tâches

KACIMI Lamine / 2014183

Build.xml, la balise projectA

NT

La balise <project> contient des attributs:

• name: nom du projet

• default: détermine la cible par défaut

•basedir: indique le répertoire racine pour tous les répertoires

utilisés par leur nom relatif

• Exemple:

<project name="nomprojet" default="compile" basedir=". ">

KACIMI Lamine / 2014184

Build.xml, les commentairesA

NT

• Les commentaires sont inclus dans les balises <!-- et -->

• Exemple:

<!– ceci est un commentaire-->

KACIMI Lamine / 2014185

Build.xml, les propriétésA

NT

Les propriétés permettent de définir des variables qui pourront

être utilisées dans le projet

Les propriétés peuvent être définies sur la ligne de commande

(option -D) ou par la balise <property>

• Exemple: <property name="repertoire" value="travail"/>

KACIMI Lamine / 2014186

Build.xml, les propriétés prédéfiniesA

NT

basedirchemin absolu du répertoire de travail

(défini dans la balise <project>)

ant.filechemin absolu du fichier de

configuration

ant.java.versionnuméro de version de la JVM exécutant

ant

ant.project.name nom du projet en cours d'exécution

KACIMI Lamine / 2014187

Build.xml, les ciblesA

NT

La balise <target> permet de définir une cible constituée par

un certain nombre de tâches.

• La balise <target> possède plusieurs attributs:

• name : obligatoire. nom de la cible

• description : optionnel. description de la cible

• if : optionnel. conditionne l'exécution à l'existence d'une

propriété

KACIMI Lamine / 2014188

Build.xml, les tâchesA

NT

Une tâche est une unité de traitement à exécuter.

Une tâche est une classe Java implémentant l'interface

org. apache. ant. Task

De nombreuses tâches sont définies dans ant (pour en

connaître la liste il faut se référer à la documentation fournie

avec ant ou à l'adresse http://ant.apache. org/manual/index.

html

Les tâches prédéfinies permettent le développement java, la

manipulation du système de fichiers, des archives, etc.

KACIMI Lamine / 2014189

Build.xml, Exemple completA

NT

<?xml version="1.0"?>

<project name="project" default="runchatclient">

<description> test ant </description>

<property name="src" value="src" /> <property

name="dst" value="classes" />

<target name="chatclient" description="Client chat RMI">

<javac srcdir="${src}/rmichat" destdir="${dst}" /> <rmic

classname="rmichat.ClientRMI" base="${dst}" /> </target>

<target name="runchatclient">

<java classname="rmichat.ChatClient" classpath="${dst}" fork="true" >

<arg value="localhost" />

<sysproperty key="java.security.policy" value="java.policy" />

</java>

</target>

<target name="archive" >

<jar destfile="chat.jar" basedir="${dst}" />

</target>

</project>