2016/2017
Pr. Ahmed AZOUGH
Java EE - Ahmed Azough - FSDM
2015/2016
Pr. Ahmed AZOUGH
FSDM
Programme :
ensemble d'instructions permettant l'ordinateur de raliser une tche dfinie.
Logiciel :
programmes + documentation + licence + support (CD...). Cet ensemble peut
tre commercialis, distribu des utilisateurs.
Application:
logiciel, ou ensemble de logiciels qui cooprent par exemple, un site web,
application mobile (serveur HTTP+CGI(Common Gateway Interface)+base de
donnes...)
Progiciel :
logiciel propritaire destin un usage spcifique et adaptable chaque
utilisateur (typiquement: SAP, Saqqara, Commerce server...).
Langage C - FSDM 3
Gnration 1 : Programmation Spaghettis :
o Assembleur, Fortran I, Basic
o Logique de saut goto . Absence totale d'entits autonomes et
modifiables indpendamment du reste du programme. Code et
donnes troitement imbriqus
Gnration 2 : Programmation Structure :
o Pascal, C, Algol, Perl, Python
o Expression spare des donnes et des traitements.
o Modularit :
Donnes types.
Possibilit de cration de types complexes.
Structures de contrle remplaant les sauts.
Notion de sous-programmes et compilation spare (entits autonomes)
Java EE - Ahmed Azough - FSDM 4
Gnration 3 : Programmation par Objets :
o Simula, SmallTalk, Eiffel, C++, Pascal objet, Java, C#
o Modularit qui regroupe les donnes et les traitements dans une
mme entit appele objet.
o Les objets peuvent tre vus comme des tentatives de simuler une
situation relle (objets personne , voiture ). Les objets rels ne
sont ni des traitements purs, ni des donnes pures mais une
combinaison des deux
Java EE - Ahmed Azough - FSDM 5
programmation imprative
o Langage machine
o programmation Spaghettis, structure, oriente objets
programmation dclarative
o programmation logique
intelligence artificielle: Prolog, Datalog, Python pypy
o programmation fonctionnelle
Application :: ensemble de fonctions mathmatiques (LISP, Caml, Haskell, Oz)
programmation par scripting
o Ncessite un interprteur, saffranchi des fonctionnalits du bas niveau
o sh (Linux), Cmd (Windows), JavaScript, AppleScript (compilable), VBScript, Lisp,
Matlab, PHP
programmation oriente aspect
o Sparer les aspects transversaux (e.g. logging) des aspects mtiers
o AspectJ, extension oriente aspectde Java
programmation concurrente, dynamique, par contraintes, etc,
Java EE - Ahmed Azough - FSDM 6
Java EE - Ahmed Azough - FSDM 7
Classement gnral selon lIEEE
o IEEE : la plus grande association mondiale de professionnels techniques
(400 000 membres) en informatique, lectronique, et tlcommunication
2015 2014
Java EE - Ahmed Azough - FSDM 8
Top 10 des langages pour le dveloppement de sites et
applications web
Java EE - Ahmed Azough - FSDM 9
pour le dveloppement dapplications pour les appareils mobiles
Java EE - Ahmed Azough - FSDM 10
pour le dveloppement dapplications dentreprise
Java EE - Ahmed Azough - FSDM 11
pour le dveloppement dapplications embarques
Java EE - Ahmed Azough - FSDM 12
13
10/11/2016 JavaEE - Ahmed Azough - FSDM
2015/2016
Pr. Ahmed AZOUGH
1990 : une quipe de Sun Microsystems dirige par James Gosling crit un
nouveau langage adapt la ralisation de logiciels embarqus, appel OAK
o Petit, fiable et indpendant de l'architecture
o Destin la tlvision interactive ( et futurs ustensiles domestiques)
1995 : Sun rebaptisa OAK en Java (nom de la machine caf autour de
laquelle se runissait James Gosling et ses collaborateurs)
volution trs rapide et succs du langage:
o Java 1.1 en 1997 (JavaBeans, JDBC, RMI, )
o Java 2 en 1999 (Java 2, version 1.2)
o Java 5 en 2004
o Java 6 en 2006 celle que nous utiliserons dans ce cours
o Java 7 en 2011
o Java 8 en 2014
o Java 9 programme pour Mars 2017
La socit Oracle a acquis en 2009 l'entreprise Sun Microsystems.
10/11/2016 JavaEE - Ahmed
14Azough - FSDM
Les plus :
o Il a su bnficier de lessor dInternet
o Il sest inspir des languages objets existants : C++, SmallTalk, Ada
o Il a su simposer dans de nombreux domaines
o Un environnement gratuit et de nombreux outils disponibles
o Une large communaut trs active
Les moins :
o Trop mdiatis?
o Problmes de compatibilit
Avec les premires versions
Avec certains navigateurs (les navigateurs ne sont pas crits par Sun)
o Problmes de vitesse, mais existence de solutions pour y pallier
(compilateur natif, compilation du bytecode la vole)
10/11/2016 JavaEE - Ahmed
15Azough - FSDM
Simple & Famil
o Apprentissage facile
faible nombre de mots-cls
simplifications des fonctionnalits essentielles
o Dveloppeurs oprationnels rapidement
o Syntaxe proche de celle de C/C++
Orient objet
o Java ne permet d'utiliser que des objets (hors les types de base)
o Java est un langage objet de la famille des langages de classe comme C++ ou
SmallTalk
o Les grandes ides reprises sont : encapsulation, dualit classe /instance, attribut,
mthode / message, visibilit, dualit interface/implmentation, hritage simple,
redfinition de mthodes, polymorphisme
Sr
o Seul le bytecode est transmis, et vrifi par linterprteur
o Impossibilit daccder des fonctions globales ou des ressources arbitraires du
systme
10/11/2016 JavaEE - Ahmed Azough - FSDM 16
Fiable
o Gestion automatique de la mmoire (ramasse-miette ou "garbage collector")
o Gestion des exceptions
o Sources d'erreurs limites
typage fort (dtecter des erreurs de typage, pas de conversions implicites de types : C++)
pas d'hritage multiple,
pas de manipulations de pointeurs. Tout est pointeur sauf les types primitifs
o Vrifications faites par le compilateur facilitant une plus grande rigueur du code
Java est indpendant de l'architecture Ecrire une fois, excuter partout
o Le bytecode gnr par le compilateur est indpendant de toute architecture.
o Toute application peut tourner sur une plate-forme implmentant une JVM
Java est multi-tches
o Excution de plusieurs processus effectuant chacun une tche diffrente
o Mcanismes de synchronisation pour rsoudre la concurrence d'accs
o Sur les machines multiprocesseurs, les threads peuvent tre excuts sur plusieurs
processeurs rellement en mme temps
10/11/2016 JavaEE - Ahmed
17Azough - FSDM
Java est un langage interprt
o La compilation d'un programme Java cre du pseudo-code portable : le
"byte-code"
o Sur n'importe quelle plate-forme, une machine virtuelle Java peut
interprter le pseudo-code afin qu'il soit excut
Les machines virtuelles Java peuvent tre
o des interprteurs de byte-code indpendants (pour excuter les
programmes Java)
o contenues au sein d'un navigateur
(pour excuter des applets Java)
10/11/2016 JavaEE - Ahmed Azough - FSDM 18
Avantages :
o Portabilit
Des machines virtuelles Java existent pour de nombreuses plates-formes
dont : Linux, Windows, MacOS
o Dveloppement plus rapide
courte tape de compilation pour obtenir le byte-code,
pas d'dition de liens,
dboguagge plus ais,
o Le byte-code est plus compact que les excutables
pour voyager sur les rseaux.
Inconvnients :
o Ncessite linstallation dun interprteur pour pouvoir excuter un
programme Java
o L'interprtation du code ralentit l'excution
o Gestion gourmande de la mmoire
o Impossibilit doprations de bas niveau lies au matriel
10/11/2016 JavaEE - Ahmed
19Azough - FSDM
JDK : Java Development Kit
o Development tools
Compilateur : convertis les
programmes java en byte code.
Lanceur : ouvre JRE, charge les
classes, et appel la fonction
principale
Appletviewer
Debugger
o JRE (Java Runtime Environment):
librairies de base Java
JVM (Java Virtual Machine) : interprtes le byte code en langage machine selon
lOS, le HW. La JVM dOracle est crite en C
JIT (Just In Time) : compile quelques parties du byte code en langage machine pour
une performance leve
Java EE - Ahmed Azough - FSDM 20
Etapes qui ont lieu avant l'excution pour un langage compil comme C++
Fichier
de Librairies
code
Programme
Compilation Code objet Edition de liens
excutable
Autres code objet
Fichier
d'entte
10/11/2016 JavaEE - Ahmed Azough - FSDM 21
Etapes qui ont lieu avant l'excution pour Java (premires version)
Avant excution Excution
Autres byte code
Fichier
Byte code Machine virtuelle
de code Compilation
Java (JVM)
Java
javac MaClasse.class java
MaClasse.java
10/11/2016 JavaEE - Ahmed Azough - FSDM 22
Translation dynamique (versions actuelles)
Java EE - Ahmed Azough - FSDM 23
Java fournit de nombreuses librairies de classes remplissant des
fonctionnalits trs diverses : c'est l'API Java
o API (Application and Programming Interface /Interface pour la
programmation d'applications) : Ensemble de bibliothques
permettant une programmation plus aise car les fonctions
deviennent indpendantes du matriel.
Ces classes sont regroupes, par catgories, en paquetages (ou
"packages").
10/11/2016 JavaEE - Ahmed Azough - FSDM 24
Les principaux paquetages
o java.util : structures de donnes classiques
o java.io : entres / sorties
o java.lang : chanes de caractres, interaction avec l'OS, threads
o java.applet : les applets sur le web
o java.awt : interfaces graphiques, images et dessins
o javax.swing : package rcent proposant des composants lgers
pour la cration dinterfaces graphiques
o java.net : sockets, URL
o java.rmi : Remote Method Invocation
o java.sql : fournit le package JDBC
10/11/2016 JavaEE - Ahmed Azough - FSDM 25
/* commentaire sur une ou plusieurs lignes */
o Identiques ceux existant dans le langage C
// commentaire de fin de ligne
o Identiques ceux existant en C++
/** commentaire d'explication */
o Les commentaires d'explication se placent gnralement juste
avant une dclaration (d'attribut ou de mthode)
o Ils sont rcuprs par l'utilitaire javadoc et inclus dans la
documentation ainsi gnre.
10/11/2016 JavaEE - Ahmed Azough - FSDM 27
Les instructions Java se terminent par un ;
Les blocs sont dlimits par :
o { pour le dbut de bloc
o } pour la fin du bloc
o Un bloc permet de dfinir un regroupement dinstructions. La
dfinition dune classe ou dune mthode se fait dans un bloc.
Les espaces, tabulations, sauts de ligne sont autoriss. Cela
permet de prsenter un code plus lisible.
10/11/2016 JavaEE - Ahmed Azough - FSDM 28
Pour pouvoir faire un programme excutable il faut toujours une
classe qui contienne une mthode particulire, la mthode
main
o cest le point dentre dans le programme : le microprocesseur sait
quil va commencer excuter les instructions partir de cet
endroit
public static void main(String arg[ ])
{
/
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 29
La classe est lunit de
Fichier Bonjour.java base de nos programmes.
Le mot cl en Java pour
public class Bonjour dfinir une classe est
class
{ //Accolade dbutant la classe Bonjour
public static void main(String args[])
{ //Accolade dbutant la mthode main
/* Pour linstant juste une instruction */
System.out.println(bonjour);
} //Accolade fermant la mthode main
} //Accolade fermant la classe Bonjour
10/11/2016 JavaEE - Ahmed Azough - FSDM 30
Fichier Bonjour.java Accolades dlimitant le
dbut et la fin de la dfinition
de la class Bonjour
public class Bonjour
{
public static void main(String args[])
{
Accolades dlimitant le dbut
System.out.println(bonjour); et la fin de la mthode main
}
} Les instructions se terminent
par des ;
10/11/2016 JavaEE - Ahmed Azough - FSDM 31
Fichier Bonjour.java Une mthode peut recevoir
des paramtres. Ici la mthode
public class Bonjour main reoit le paramtre args
qui est un tableau de chane
{ de caractres.
public static void main(String args[])
{
System.out.println(bonjour);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 32
Le nom du fichier est ncessairement
Fichier Bonjour.java celui de la classe avec lextension
.java en plus. Java est sensible la
casse des lettres.
Compilation en bytecode java
dans une console DOS:
javac Bonjour.java public class Bonjour
Gnre un fichier
Bonjour.class {
Excution du programme
(toujours depuis la console public static void main(String[] args)
DOS) sur la JVM :
java Bonjour {
Affichage de bonjour dans
la console System.out.println(bonjour);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 33
Pour rsumer, dans une console DOS, si jai un fichier
Bonjour.java pour la classe Bonjour :
o javac Bonjour.java
Compilation en bytecode java
Indication des erreurs de syntaxe ventuelles
Gnration dun fichier Bonjour.class si pas derreurs
o java Bonjour
Java est la machine virtuelle
Excution du bytecode
Ncessit de la mthode main, qui est le point dentre dans le
programme
10/11/2016 JavaEE - Ahmed Azough - FSDM 34
On a besoin de nommer les classes, les variables, les constantes, etc. ; on
parle didentificateur.
Les identificateurs (noms les classes, les variables, les constantes)
commencent par
une lettre, _ ou $
o Attention : Java distingue les majuscules des minuscules
Conventions sur les identificateurs :
o Si plusieurs mots sont accols, mettre une majuscule chacun des mots sauf
le premier.
exemple : uneVariableEntiere
o La premire lettre est majuscule pour les classes et les interfaces
exemples : MaClasse, UneJolieFenetre
o La premire lettre est minuscule pour les mthodes, les attributs et les
variables
exemples : setLongueur, i, uneFenetre
o Les constantes sont entirement en majuscules
exemple : LONGUEUR_MAX
10/11/2016 JavaEE - Ahmed Azough - FSDM 35
abstract default goto null synchronized
boolean do if package this
break double implements private throw
byte else import protected throws
case extends instanceof public transient
catch false int return true
char final interface short try
class finally long static void
continue float native super volatile
const for new switch while
10/11/2016 JavaEE - Ahmed Azough - FSDM 36
En Java, tout est objet sauf les types de base.
Il y a huit types de base :
o un type boolen pour reprsenter les variables ne pouvant prendre que 2
valeurs (vrai et faux, 0 ou 1, etc.) : boolean avec les valeurs associes true
et false
o un type pour reprsenter les caractres : char
o quatre types pour reprsenter les entiers de divers taille : byte, short, int et
long
o deux types pour reprsenter les relles : float et double
La taille ncessaire au stockage de ces types est indpendante de la
machine.
o Avantage : portabilit
o Inconvnient : "conversions" coteuses
10/11/2016 JavaEE - Ahmed Azough - FSDM 37
Les entiers (avec signe)
o byte : cod sur 8 bits,
o short : cod sur 16 bits,
o int : cod sur 32 bits,
o long : cod sur 64 bits,
Les valeurs limites
o , avec n la taille de codage du type
l'arithmtique entire est modulaire : pas de dpassement de capacit
signal, les nombres s'adaptent
o byte b1 = 127, b2 = 1 ;
o byte sum = b1 + b2 // sum vaut -128 !!!
les classes d'entiers dfinissent des mthodes (fonctions) de
conversion de chanes de caractres en entiers trs utiles
o Byte.parseByte() et Integer.parseInt()
10/11/2016 JavaEE - Ahmed Azough - FSDM 38
Oprations sur les entiers (suite)
o oprateurs arithmtiques +, -, *, division /, reste de division %
o les oprateurs dincrmentation ++
et de dcrmentation et - -
ajoute ou retranche 1 une variable
int n = 12;
n ++; //Maintenant n vaut 13
n++; quivalent n = n+1;
n - -; quivalent n = n-1;
8++; est une instruction illgale
peut sutiliser de manire suffixe : ++n. La diffrence avec la version prfixe
se voit quand on les utilisent dans les expressions.
En version suffixe la (d/inc)rmentation seffectue en premier
int m=7; int n=7;
int a=2 * ++m; //a vaut 16, m vaut 8
int b=2 * n++; //b vaut 14, n vaut 8
10/11/2016 JavaEE - Ahmed Azough - FSDM 39
Les rels
o float : cod sur 32 bits
o double : cod sur 64 bits
Les valeurs limites
o Float.MIN_VALUE=2-149
o Float.MAX_VALUE=2-128-2-104
o Double.MIN_VALUE=2-1074
o Double.MAX_VALUE=2-1024-2-971
o Float.NEGATIVE_INFINITY
o Float.POSITIVE_INFINITY
o Double.NEGATIVE_INFINITY
o Double.POSITIVE_INFINITY
10/11/2016 JavaEE - Ahmed Azough - FSDM 40
Les oprateurs
o oprateurs classiques +, -, *, /
o attention pour la division :
15 / 4 donne 3 division entire
15 % 2 donne 1
11.0 / 4 donne 2.75
(si lun des termes de la division est un rel, la division retournera un rel).
o puissance : utilisation de la mthode pow de la classe Math.
double y = Math.pow(x, a) quivalent x^a, x et a tant de type double
10/11/2016 JavaEE - Ahmed Azough - FSDM 41
Les boolens
Boolean : 1bit
contient soit vrai (true) soit faux (false)
Les oprateurs logiques de comparaisons
Egalit : oprateur ==
Diffrence : oprateur !=
suprieur et infrieur strictement : oprateurs > et <
suprieur et infrieur ou gal :
oprateurs >= et <=
10/11/2016 JavaEE - Ahmed Azough - FSDM 42
Notation
boolean x;
x= true;
x= false;
x= (5==5); // l expression (5==5) est value et la valeur est
affecte x qui vaut alors vrai
x= (5!=4); // x vaut vrai, ici on obtient vrai si 5 est diffrent de 4
x= (5>5); // x vaut faux, 5 n'est pas suprieur strictement 5
x= (5<=5); // x vaut vrai, 5 est bien infrieur ou gal 5
10/11/2016 JavaEE - Ahmed Azough - FSDM 43
Les autres oprateurs logiques
o et logique : &&
o ou logique : ||
o non logique : !
o Exemples : si a et b sont 2 variables boolennes
boolean a,b, c;
a= true;
b= false;
c= (a && b); // c vaut false
c= (a || b); // c vaut true
c= !(a && b); // c vaut true
c=!a; // c vaut false
10/11/2016 JavaEE - Ahmed Azough - FSDM 44
Effectuent des oprations bit bit et retournent des rsultats entiers
(signs)
10/11/2016 JavaEE - Ahmed Azough - FSDM 45
Les caractres
o char : contient une seule lettre
o le type char dsigne des caractres en reprsentation Unicode
Codage sur 2 octets contrairement ASCII/ANSI cod sur 1 octet. Le
codage ASCII/ANSI est un sous-ensemble dUnicode
Notation hexadcimale des caractres Unicode de \u0000
\uFFFF .
Plus dinformation sur Unicode : www.unicode.org
10/11/2016 JavaEE - Ahmed Azough - FSDM 46
Notation
o char a,b,c; // a,b et c sont des variables du type char
o a='a'; // a contient la lettre 'a'
o b= '\u0022' //b contient le caractre guillemet : "
o c=97; // x contient le caractre de rang 97 : 'a'
10/11/2016 JavaEE - Ahmed Azough - FSDM 47
Les structures de contrle classiques existent en Java :
o if, else
o switch, case, default, break
o for
o while
o do, while
10/11/2016 JavaEE - Ahmed Azough - FSDM 48
Instructions conditionnelles
o Effectuer une ou plusieurs instructions seulement si une certaine
condition est vraie
if (condition) instruction;
et plus gnralement : if (condition)
{ bloc dinstructions}
condition doit tre un boolen ou renvoyer une valeur boolenne
o Effectuer une ou plusieurs instructions si une certaine condition est
vrifie sinon effectuer dautres instructions
if (condition) instruction1; else instruction2;
et plus gnralement
if (condition)
{ 1er bloc dinstructions}
else
{2me bloc dinstruction}
10/11/2016 JavaEE - Ahmed Azough - FSDM 49
Max.java
import java.io.*;
public class Max
{
public static void main(String args[])
{
Console console = System.console();
int nb1 = Integer.parseInt(console.readLine("Entrer un entier:"));
int nb2 = Integer.parseInt(console.readLine("Entrer un autre entier:"));
if (nb1 > nb2)
System.out.println("l'entier le plus grand est "+ nb1);
else
System.out.println("l'entier le plus grand est "+ nb2);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 50
L'oprateur conditionnel ?: est un oprateur ternaire (hrit de
C), il a pour forme :
condition ? E1 : E2
o o condition est une expression de type boolean, E1 et E2 sont de
n'importe quel type mais doivent tre du mme type
o fonctionnement : si la condition est value true l'nonc E1 est
valu, sinon l'nonc E2 est valu
Exemple:
int abs = (x >= 0) ? x : -x ;
10/11/2016 JavaEE - Ahmed Azough - FSDM 51
Boucles indtermines
o On veut rpter une ou plusieurs instructions un nombre
indtermins de fois : on rpte linstruction ou le bloc dinstruction
tant que une certaine condition reste vraie
o nous avons en Java une premire boucle while (tant que)
while (condition)
{bloc dinstructions}
les instructions dans le bloc sont rptes tant que la condition reste
vraie.
On ne rentre jamais dans la boucle si la condition est fausse ds le
dpart
10/11/2016 JavaEE - Ahmed Azough - FSDM 52
Boucles indtermines
o un autre type de boucle avec le while:
do {bloc dinstructions}
while (condition)
les instructions dans le bloc sont rptes tant que la condition reste
vraie.
On rentre toujours au moins une fois dans la boucle : la condition est
teste en fin de boucle.
10/11/2016 JavaEE - Ahmed Azough - FSDM 53
Facto1.java
import java.io.*;
public class Facto1
{
public static void main(String args[])
{
int n, result,i;
n = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:"));
result = 1; i = n;
while (i > 1)
{
result = result * i;
i--;
}
System.out.println("la factorielle de "+n+" vaut "+result);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 54
import java.io.*; Max.java
public class Max {
public static int getIntConsole(String str) throws IOException{
boolean invalidFormat=false;
int valueToReturn=0;
do{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print(str);
try{
valueToReturn = Integer.parseInt(br.readLine());
}catch(NumberFormatException nfe){
System.err.println("Invalid Format!");
invalidFormat=true;
}
}while(invalidFormat);
return valueToReturn;
}
public static void main(String args[]) throws IOException {
Console console = System.console();
int nb1=0;
nb1 = Max.getIntConsole("Entrer un entier:");
int nb2=0;
nb2 = Max.getIntConsole("Entrer un autre entier:");
if (nb1 > nb2)
System.out.println("l'entier le plus grand est "+ nb1);
else
System.out.println("l'entier le plus grand est "+ nb2);
10/11/2016
} JavaEE - Ahmed Azough - FSDM 55
Boucles dtermines
o On veut rpter une ou plusieurs instructions un nombre
dtermins de fois : on rpte linstruction ou le bloc dinstructions
pour un certain nombre de pas.
o La boucle for
for (int i = 1; i <= 10; i++)
System.out.println(i); //affichage des nombres de 1 10
o une boucle for est en fait quivalente une boucle while
for (instruction1; expression1; expression2)
{bloc}
est quivalent
instruction 1;
while (expression1)
{bloc; expression2;}}
10/11/2016 JavaEE - Ahmed Azough - FSDM 56
Facto2.java
import java.io.*;
public class Facto2
{
public static void main(String args[])
{
int n, result,i;
n = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:"));
result = 1;
for(i =n; i > 1; i--)
{
result = result * i;
}
System.out.println("la factorielle de "+n+" vaut "+result);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 57
Slection multiples
o lutilisation de if / else peut savrer lourde quand on doit traiter
plusieurs slections et de multiples alternatives
o pour cela existe en Java le switch / case assez identique celui de
C/C++
o La valeur sur laquelle on teste doit tre un char ou un entier (
lexclusion dun long).
o Lexcution des instructions correspondant une alternative
commence au niveau du case correspondant et se termine la
rencontre dune instruction break ou arrive la fin du switch
10/11/2016 JavaEE - Ahmed Azough - FSDM 58
Alternative.java
import java.io.*; Variable contenant la valeur
que lon veut tester.
public class Alternative
{ Premire alternative :
public static void main(String args[]) on affiche Un et on sort
{ du bloc du switch au break;
int nb = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:"));
switch(nb)
{ Deuxime alternative :
case 1: on affiche Deux et on sort
System.out.println("Un"); break; du bloc du switch au break;
case 2:
System.out.println("Deux"); break;
default:
System.out.println("Autre nombre"); break; Alternative par dfaut:
} on ralise une action
} par dfaut.
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 59
Les tableaux permettent de stocker plusieurs valeurs de mme
type dans une variable.
o Les valeurs contenues dans la variable sont repres par un indice
o En langage java, les tableaux sont des objets
Dclaration
o int tab [ ];
String chaines[ ];
Cration d'un tableau
tab = new int [20]; // tableau de 20 int
chaines = new String [100]; // tableau de 100 chaine
10/11/2016 JavaEE - Ahmed Azough - FSDM 60
Le nombre d'lments du tableau est mmoris. Java peut ainsi
dtecter l'excution le dpassement d'indice et gnrer une
exception. Mot cl length
o Il est rcuprable par nomTableau.length
int taille = tab.length; //taille vaut 20
Comme en C/C++, les indices dun tableau commencent 0 .
Donc un tableau de taille 100 aura ses indices qui iront de 0
99.
10/11/2016 JavaEE - Ahmed Azough - FSDM 61
Initialisation
o tab[0]=1;
o tab[1]=2; //etc.
o noms[0] = new String( "Boule");
o noms[1] = new String( "Bill");//etc
Cration et initialisation simultanes
o String noms [ ] = {"Boule","Bill"};
o Point pts[ ] = { new Point (0, 0), new Point (10, -1)};
10/11/2016 JavaEE - Ahmed Azough - FSDM 62
Tab1.java
public class Tab1
{
public static void main (String args[])
{
Pour dclarer une variable tableau
int tab[ ] ;
on indique le type des lments du
tab = new int[4];
tableau et le nom de la variable tableau
tab[0]=5;
suivi de [ ]
tab[1]=3;
tab[2]=7;
tab[3]=tab[0]+tab[1]; on utilise new <type> [taille]; pour
} initialiser le tableau
}
On peut ensuite affecter des
valeurs au diffrentes cases
Les indices vont toujours de du tableau :
0 (taille-1) <nom_tableau>[indice]
10/11/2016 JavaEE - Ahmed Azough - FSDM 63
Tab1.java Mmoire
public class Tab1
{
public static void main (String args[])
{
int tab[ ] ; 0x0000
0x258
tab = new int[4];
tab[0]=5; 0
tab[1]=3; 0
tab[2]=7; 0
tab[3]=tab[0]+tab[1]; 0
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 64
Tab1.java
Mmoire
public class Tab1
{
public static void main (String args[])
{ 0x258
int tab[ ] ;
tab = new int[4];
tab[0]=5; 5
0
tab[1]=3; 0
3
tab[2]=7; 0
7
tab[3]=tab[0]+tab[1]; 0
8
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 65
Tab2.java Mmoire
public class Tab2
{
0x0258
public static void main (String args[])
{
String tab[ ] ; 0x0106
tab = new String[4]; 0x0116
tab[0]=new String("Pierre"); 0x0126
tab[1]=new String("Paul"); 0x0136
tab[2]=new String("Jacques");
tab[3]=new String("Philippe");
}
"Pierre"
}
"Paul"
"Jacques"
"Philippe"
10/11/2016 JavaEE - Ahmed Azough - FSDM 66
Attention ce nest pas un type de base. Il s'agit d'une classe
dfini dans lAPI Java (Dans le package java.lang)
o String s="aaa"; // s contient la chane "aaa" mais
o String s=new String("aaa"); // identique la ligne prcdente
La concatnation
o loprateur + entre 2 String les concatne :
String str1 = "Bonjour ! ";
String str2 = null;
str2 = "Comment vas-tu ?";
String str3 = str1 + str2;
// Concatnation de chanes : str3 contient " Bonjour ! Comment vas-tu ?"
10/11/2016 JavaEE - Ahmed Azough - FSDM 67
Mmoire
3
int x=3,y=3;
x == y est vrai 3
0x768
0x852
String s1=new String("abc"),s2=new String("abc"); abc
s1 == s2 est faux... ....
Quand on compare 2 variables dun type de base
on compare leur valeur. Quand on compare 2 objet
abc
avec les oprateurs on compare leur rfrence (leur
....
adresse en mmoire). Introduction de la mthode
equals() pour les objets : s1.equals(s2) est vrai
10/11/2016 JavaEE - Ahmed Azough - FSDM 68
Longueur dun objet String :
o mthode int length() : renvoie la longueur de la chane
String str1 = "bonjour";
int n = str1.length(); // n vaut 7
Sous-chanes
o mthode String substring(int debut, int fin)
o extraction de la sous-chaine depuis la position debut jusqu la
position fin non-comprise.
String str2 = str1.substring(0,3); // str2 contient la valeur "bon"
o le premier caractre dune chane occupe la position 0
o le deuxime paramtre de substring indique la position du premier
caractre que lon ne souhaite pas copier
10/11/2016 JavaEE - Ahmed Azough - FSDM 69
Rcupration dun caractre dans une chane
o mthode char charAt(int pos) : renvoie le caractre situ la
position pos dans la chane de caractre laquelle on envoie se
message
String str1 = "bonjour";
char unJ = str1.charAt(3); // unJ contient le caractre 'j'
Modification des objets String
o Les String sont inaltrables en Java : on ne peut modifier
individuellement les caractres dune chane.
o Par contre il est possible de modifier le contenu de la variable
contenant la chane (la variable ne rfrence plus la mme chane).
str1 = str1.substring(0,3) + " soir"; /* str1 contient maintenant la
chane "bonsoir" */
10/11/2016 JavaEE - Ahmed Azough - FSDM 70
Les chanes de caractres sont des objets :
o pour tester si 2 chanes sont gales il faut utiliser la mthode
boolean equals(String str) et non ==
o pour tester si 2 chanes sont gales la casse prs il faut utiliser la
mthode boolean equalsIgnoreCase(String str)
String str1 = "BonJour";
String str2 = "bonjour"; String str3 = "bonjour";
boolean a, b, c, d;
a = str1.equals("BonJour"); //a contient la valeur true
b = (str2 = = str3); //b contient la valeur false
c = str1.equalsIgnoreCase(str2);//c contient la valeur true
d = "bonjour".equals(str2); //d contient la valeur true
10/11/2016 JavaEE - Ahmed Azough - FSDM 71
Quelques autres mthodes utiles
o boolean startsWith(String str) : pour tester si une chaine de
caractre commence par la chaine de caractre str
o boolean endsWith(String str) : pour tester si une chane de
caractre se termine par la chaine de caractre str
String str1 = "bonjour ";
boolean a = str1.startsWith("bon");//a vaut true
boolean b = str1.endsWith("jour");//b vaut true
10/11/2016 JavaEE - Ahmed Azough - FSDM 72
Plus dinformations
dans les
documentations
de lAPI dans le
package
java.lang
10/11/2016 JavaEE - Ahmed Azough - FSDM 73
Les fonctions mathmatiques les plus connues sont regroupes
dans la classe Math qui appartient au package java.lang
o les fonctions trigonomtriques
o les fonctions darrondi, de valeur absolue, ...
o la racine carre, la puissance, lexponentiel, le logarithme, etc.
Ce sont des mthodes de classe (static)
o double calcul = Math.sqrt (Math.pow(5,2) + Math.pow(7,2));
o double sqrt(double x) : racine carre de x
o double pow(double x, double y) : x puissance y
10/11/2016 JavaEE - Ahmed Azough - FSDM 74
Java propose 4 niveaux de visibilit,
mais seulement 3 mots-cls : private,
protected, public ; la visibilit
"package" est applique
lorsqu'aucun mot-cl n'est utilis.
10/11/2016 JavaEE - Ahmed Azough - FSDM 75
l'hritage multiple, une classe peut hriter en mme temps de
plusieurs super classes.
EtreHumain
Herbivore Carnivore
Lapin Homme Lion
Ce mcanisme n'existe pas en Java!!
Solution : les interfaces
10/11/2016 JavaEE - Ahmed Azough - FSDM 77
Une interface est un modle pour une classe qui dfinit des
contrats de services visibles depuis lextrieur (API)
Une interface est un ensemble de constantes et de dclarations
de mthodes abstraites.
Et dans une classe abstraite ?
o Quelques mthodes peuvent tre implmentes (pas abstraites)
o Ne permet pas lhritage multiple
10/11/2016 JavaEE - Ahmed Azough - FSDM 78
Toutes les classes qui implmentent cette interface possdent
les mthodes et les constantes dclares dans celle-ci.
Plusieurs interfaces peuvent tre implmentes dans une mme
classe.
interface
Frome
interface
Dessinable caclulSurface()
dessiner(Graphics g) effacer(g: Graphics)
effacer(Graphics g)
Triangle Cercle
Int x, y; Int d,r;
dessiner(Graphics g) dessiner(Graphics g)
effacer(Graphics g) effacer(g: Graphics g)
10/11/2016 JavaEE - Ahmed Azough - FSDM 79
Pour traduire la relation dimplmentation, on crit explicitement
le mot cl implements suivi du nom de l'interface implmente
une classe doit fournir une implmentation chacune des
mthodes abstraites dfinies dans l'interface qui doivent tre
dclares publiques (private nest pas autoris)
class RectangleDessinable extends Rectangle implements Dessinable {
public void dessiner(Graphics g){
g.drawRect((int) x, (int) y, (int) largeur, (int) hauteur);
}
public void effacer(Graphics g){
g.clearRect((int) x, (int) y, (int)largeur, (int) hauteur);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 80
De la mme manire qu'une classe peut avoir des sous-classes,
une interface peut avoir des "sous-interfaces"
Une sous interface
o hrite (extends) de toutes les mthodes abstraites et des
constantes de sa super-interface
o peut dfinir de nouvelles constantes et mthodes abstraites
10/11/2016 JavaEE - Ahmed Azough - FSDM 81
A la diffrence des classes, une interface peut lextension
multiple de plusieurs interfaces la fois
o public interface I3 extends I2 , I1{}
10/11/2016 JavaEE - Ahmed Azough - FSDM 82
Les interfaces permettent de saffranchir dventuelles
contraintes dhritage.
Lorsquon examine une classe implmentant une ou plusieurs
interfaces, on est sr que le code dimplmentation est dans le
corps de la classe.
10/11/2016 JavaEE - Ahmed Azough - FSDM 83
84
Java EE - Ahmed Azough - FSDM
Types natifs de java.
o byte 8 bits : entiers relatifs trs courts
o short 16 bits : entiers relatifs courts
o int 32 bits : entiers relatifs
o long 64 bits : entiers relatifs longs
o float 32 bits : rels
o double 64 bits : rels
o char 16 bits : caractres
o boolean 1 bit : boolen - vrai (true) ou faux (false)
o void
Java EE - Ahmed Azough - FSDM 85
Int : espace mmoire de 32 bits
int i = 1;
int j;
j = i;
aucun lien entre i et j.
i = 2;
Java EE - Ahmed Azough - FSDM 86
public class Pays {
public int nbrHabitants;
public double superficie;
public Pays() {
nbrHabitants = 0;
superficie = 0;
}
public Pays(int nbrHabitants, double superficie) {
this.nbrHabitants = nbrHabitants;
this.superficie = superficie;
}
}
Java EE - Ahmed Azough - FSDM 87
Pays p; // dclaration dune rfrence
o aucun objet (aucune instance) de la classe Pays nest
cre
o lespace mmoire ncessaire stocker un Pays nest
pas rserv.
o p est une rfrence; une adresse mmoire
new Pays(); // cration dun objet
o Lespace mmoire permettant de stocker un objet Pays
est allou.
Pays p = new Pays(); // affectation
o la rfrence prend la valeur de ladresse mmoire de lobjet
cr avec new
Java EE - Ahmed Azough - FSDM 88
Pays p1 = new Pays(300000, 14243);
o Cration dune instance de pays
Pays p2;
o Dclaration dune variable p2, on rserve
un espace mmoire pour la rfrence
p2=p1;
o La valeur de la rfrence de p1 est
recopie dans lespace mmoire
correspondant p2
o p2 et p1 rfrence le mme objet
copie de rfrences, et non pas une copie dobjets
Java EE - Ahmed Azough - FSDM 89
Exemple:
o Pays p1 = new Pays(300000, 14243);
o Pays p2;
o p2=p1;
o p2.surface = 400000; //(1)
o System.our.println(p1.surface); //(2)
Java EE - Ahmed Azough - FSDM 90
Exemples 1
o Pays p1 = new Pays(400000, 14243);
o Pays p2 = new Pays();
o p2=p1;
Exemple 2
o Pays p1 = new Pays(400000, 14243);
o Pays p2 = new Pays();
o Pays p3=p1;
o p1=p2;
o p2=p3;
Java EE - Ahmed Azough - FSDM 91
Types primitifs:
o static void augmente(int i) {
o i=i+1;
o }
o
o int j=1;
o augmente(j);
le rsultat affich:
o System.out.println(j);
1
Le passage de paramtres primitifs est toujours un passage par valeurs.
Une fonction ne peut changer la valeur dune variable de type primitif.
Java EE - Ahmed Azough - FSDM 92
Rfrences:
o static void augmenteSurface(Pays p){
o p.surface=p.surface+1;
o }
o
o Pays p1=new Pays();
o augmenteSurface(p1);
le rsultat affich:
o System.out.println(p1.surface);
1
Une fonction permet de modifier les attributs dun objet dont la
rfrence est passe en paramtre
Java EE - Ahmed Azough - FSDM 93
Rfrences:
o static void nouveau(Pays p) {
o p=new Pays();
o }
o
o Pays p1=new Pays(200000, 15000);
o nouveau(p1);
o System.out.println(p1.surface);
Si on passe une variable correspondant une
rfrence une fonction, la rfrence ne peut tre
modifie par la fonction
Java EE - Ahmed Azough - FSDM 94
Exemple :
o Pays pouet()
o {
o Pays p = new Pays();
o return p;
o }
o
o Pays p1=pouet();
un objet cr lintrieur dune fonction peut trs bien
perdurer aprs lappel de cette fonction.
Java EE - Ahmed Azough - FSDM 95
Types primitifs:
o int i = 1;
La condition est
o int j = 1;
vraie
o if (i == j) ...
Rfrences:
o Exemple 1: La condition est
Pays p1 = new Pays(); fausse
Pays p2 = new Pays();
if (p1 == p2) ...
o Exemple 2
Pays p1 = new Pays(); La condition est
Pays p2 = p1; vraie
if (p1 == p2) ...
Java EE - Ahmed Azough - FSDM 96
La recopie dobjets peut se faire en utilisant le mcanisme de
clonnage.
La classe doit implmenter linterface clonnable et surcharger le
fonction clone()
Deux types de clones
o Superficielle
o En profondeur
Java EE - Ahmed Azough - FSDM 97
shallow copy: Duplique lobjet sans dupliquer les objets auquel il rfre
original clone
int x = [42] int x = [42]
Scanner object
double y = [3.14] double y = [3.14]
Scanner in = [ ] Scanner in = [ ]
ArrayList object List data = [ ]
List data = [ ]
deep copy: Duplique lobjet ainsi que tout le graphe des objets
rfrencs par cet objet
original clone
int x = [42] Scanner object int x = [42] Scanner object
double y = [3.14] double y = [3.14]
Scanner in = [ ] Scanner in = [ ]
ArrayList object ArrayList object
List data = [ ] List data = [ ]
Clonage superficiel:
o Duplique lobjet sans dupliquer les objets auquel il rfre
o Rservation de mmoire
o Recopie des types primitives
class Point implements Cloneable{
public Point clone() {
try {
return (Point) super.clone();
} catch(CloneNotSupportedException e) {
System.out.println("Cloning not allowed.");
return this;
}
}
Usage :
Point point2=point1.clone();
Java EE - Ahmed Azough - FSDM 99
Duplique lobjet ainsi que tout le graphe des objets rfrencs par cet
objet
Les attributs objets doivent tre clons
class Rectangle implements Cloneable{
public Rectangle clone() {
try {
Rectangle r=super.clone();
r.point00 = point00.clone();
r.point11 = point11.clone();
return r;
} catch(CloneNotSupportedException e) {
System.out.println("Cloning not allowed.");
return this;
}
}
Java EE - Ahmed Azough - FSDM 100
Une structure collective est un objet qui contient d'autres
objets.
Ces objets proposent une solution au stockage de donnes et
permettent une manipulation de celles-ci
Les classes et les interfaces se trouvent dans le paquetage :
java.util.
10/11/2016 JavaEE - Ahmed Azough - FSDM 102
Les structures collectives permettent de :
o Amliorer la qualit et la performance des applications
o Grer un ensemble d'objets de types diffrents
Les structure collective sont utiliss pour
o stocker, rechercher et manipuler des donnes
o transmettre des donnes dune mthode une autre
Exemples :
o un dossier de courrier : collection de mails
o un rpertoire tlphonique : collection de couples
noms / numros de tlphone.
10/11/2016 JavaEE - Ahmed Azough - FSDM 103
2 hirarchies principales :
o Collection
o Map : collections indexes
par des cls
10/11/2016 JavaEE - Ahmed Azough - FSDM 104
10/11/2016 JavaEE - Ahmed Azough - FSDM 105
Quelle
Map structure Collection
Cl-valeurs Valeurs
Cls-valeurs ou
valeurs ?
Ordre
important Map Oui Doublons
ok ?
?
Oui
Non HashTable squentielle Nature Non
dinsertion
Accs Oui
concurrent Ordre
? ArrayList
important
Non ?
Non + indexe,
+ suppression
HashMap Oui
LinkedList HashSet
Type Type
dordre dordre
?
Tri de cls
Ordre
dinsertion List Ordre
?
Tri de
dInsertion valeurs
TreeMap LinkedHashMap Set LinkedHashSet TreeSet
Un objet qui est un groupe d'objets
Principales mthodes :
o boolean add(Object) : ajouter un lment
o boolean addAll(Collection) : ajouter plusieurs lments
o void clear() : tout supprimer
o boolean contains(Object) : test d'appartenance
o boolean containsAll(Collection) : appartenance collective
o boolean isEmpty() : test de l'absence d'lments
o Iterator iterator() : pour le parcours (cf Iterator)
o boolean remove(Object) : retrait d'un lment
o boolean removeAll(Collection) : retrait de plusieurs lments
o boolean retainAll(Collection) : garder que lintersection
o int size() : nombre d'lments
o Object[] toArray() : transformation en tableau
o Object[] toArray(Object[] a) : tableau de mme type que a
10/11/2016 JavaEE - Ahmed Azough - FSDM 107
Ordonnes ou non
interface Set
o Ordre sur les lments ? voir tri
Doublons autoriss ou non
o liste (List) : avec doubles interface SortedSet
o ensemble (Set) : sans doubles
Besoins daccs
o Index interface Collection
o squentiel
public Iterator iterator()
via Iterator
interface List
... get(int index)
... set(int index,Object o)
10/11/2016 JavaEE - Ahmed Azough - FSDM 108
Implmentant l'interface List
o ArrayList
Liste implante dans un tableau : tableau dynamique
accs immdiat chaque lment
ajout et suppression lourdes
o LinkedList
liste doublement chaine
accs aux lments lourd, ajout et suppression trs efficaces
permettent d'implanter les structures FIFO (file) et LIFO (pile)
mthodes supplmentaires : addFirst(), addLast(),
getFirst(), getLast(), removeFisrt(), removeLast()
10/11/2016 JavaEE - Ahmed Azough - FSDM 109
import java.util.*;
public class MaCollection {
static final int N = 25000;
List listEntier = new ArrayList();
public static void main(String args[]) {
MaCollection c = new MaCollection();
int i;
for (i = 0; i < N; i++) {
c.listEntier.add(new Integer(i));
}
System.out.println(c.listEntier);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 110
import java.util.*;
public class LinkedListDemo {
public static void main(String args[]) {
// create a linked list
LinkedList ll = new LinkedList();
// add elements to the linked list
ll.add("F");
ll.add("B");
ll.add("D");
ll.add("E");
ll.add("C");
ll.addLast("Z");
ll.addFirst("A");
ll.add(1, "A2");
System.out.println("Original contents of ll: " + ll);
}
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 111
// remove elements from the linked list
ll.remove("F");
ll.remove(2);
System.out.println("Contents of ll after deletion: " + ll);
// remove first and last elements
ll.removeFirst();
System.out.println("ll after deleting first: " + ll);
ll.removeLast();
System.out.println("ll after deleting last: " + ll);
// get and set a value
Object val = ll.get(2);
ll.set(2, (String) val + " Changed");
System.out.println("ll after change: " + ll);
}
}
Resultats:
Original contents of ll: [A, A2, F, B, D, E, C, Z]
Contents of ll after deletion: [A, A2, D, E, C, Z]
ll after deleting first and last: [A2, D, E, C]
ll after change: [A2, D, E Changed, C]
10/11/2016 JavaEE - Ahmed Azough - FSDM 112
public class CompareList {
ArrayList<Integer> aList=new ArrayList<Integer>();
LinkedList<Integer> lList=new LinkedList<Integer>();
public static void main(String args[]){
int N=10000;
CompareList cL=new CompareList();
for(int i=0;i<N;i++){
cL.aList.add(0,i);
}
for(int i=0;i<N;i++){
cL.lList.add(0,i);
}
}
} Java EE - Ahmed Azough - FSDM 113
Implantent l'interface Set
Elments non dupliqus
o HashSet
Pas dordre particulier
table de hachage
utiliser la mthode hashCode()et equals()
accs trs performant aux lments
o TreeSet extends SortedSet
arbre binaire de recherche
maintient l'ensemble tri en permanence
Insertion plus lente
mthodes supplmentaires
first() (mini), last() (maxi), subSet(deb,fin), headSet(fin), tailSet(deb)
10/11/2016 JavaEE - Ahmed Azough - FSDM 114
import java.util.*;
public class TestHashSet {
public static void main(String args[]) {
Set set = new HashSet();
set.add("CCCCC");
set.add("BBBBB");
set.add("DDDDD");
set.add("BBBBB");
set.add("AAAAA");
Iterator iterator = set.iterator();
while (iterator.hasNext())
{System.out.println(iterator.next());}
} Resultat : {BBBBB, AAAAA, DDDDD, CCCCC}
}
Attention : ordre non maintenu dans HashSet
10/11/2016 JavaEE - Ahmed Azough - FSDM 115
import java.util.*;
public class TestTreeSet {
public static void main(String args[]) {
Set ts = new TreeSet();
ts.add("one");
ts.add("two");
ts.add("three");
ts.add("four");
ts.add("three");
System.out.println("TreeSet = " + ts);
}
}
Resultat : TreeSet = [four, one, three, two]
10/11/2016 JavaEE - Ahmed Azough - FSDM 116
Pour assurer lordre dans une TreeSet il faut
o implmentent l'interface Comparable pour ses lments
o ou fournir un objet de type Comparator au constructeur de l'objet TreeSet pour
dfinir l'ordre de tri.
TreeSet(Comparator<? super E> comparator)
o Remarque :
<? super E> : nimporte quel anctre de E (classe mre)
<? extends E>: nimporte quel descendant de E (classe fille)
Pour assurer lgalit dans une Set il faut:
o Redfinir equals()
o et reffinir hashCode();
Contrainte sur hashCode()
o A.equals(B) A.hashCode()=B.hashCode().
o A.hashCode()=B.hashCode() ! A.equals(B).
o hashCode() est constante dans la mme excution.
10/11/2016 JavaEE - Ahmed Azough - FSDM 117
import java.util.*;
public class TestHashSet {
public static void main(String args[]) {
Element t1 = new Element (false, false, false, false);
Element t2 = new Element (true, true, true, true);
Element t3 = new Element (false, false, false, false);
if (t1.equals(t3))
System.out.println("they're equal");
HashSet<Element > hSet = new HashSet<Element >();
hSet.add(t1);
hSet.add(t2);
hSet.add(t3);
System.out.println("set size: " + hSet.size());
}
10/11/2016
} JavaEE - Ahmed Azough - FSDM 118
public class Element implements Comparable{
boolean table[];
public Element(boolean a, boolean b, boolean c,
boolean d) {
table=new boolean[4];
table[0]=a;
table[1]=b;
table[2]=c;
table[3]=d;
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 119
@Override
public boolean equals(Object arg0) {
for(int i=0;i<3;i++)
if(this.table[i]!=((Element)arg0).table[i])
return false;
return true;
}
public int intValue(){
int intV=0;
for(int i=0;i<4;i++){
intV=intV+(int) (Math.pow(10,i)*((this.table[i]==true)?1:0));
}
return intV;
}
@Override
public int hashCode() {
return intValue();
10/11/2016 JavaEE - Ahmed Azough - FSDM 120
}
Linterface Map<K,V> correspond un groupe de couples cls-valeurs
La cl est unique, contrairement la valeur qui peut tre associe
plusieurs cls (Dans la map il ne peut pas exister 2 cls gales)
Les deux classes qui Implemente linterface:
o HashMap<K,V>, table de hachage ; garantit un accs en temps
constant
o TreeMap<K,V>, arbre ordonn suivant les valeurs des cls avec accs
en log(n) ;
La comparaison utilise lordre naturel (interface Comparable<K>) ou
une instance de Comparator<? super K>
10/11/2016 JavaEE - Ahmed Azough - FSDM 121
HashTable
o table de hachage
o parcourt des lments grce aux cls en recourant la
classe Enumeration
o accs trs performant aux lments
o Pas de cls ni de valeurs Null
o Tread-safe: accessible par plusieurs thread simultanment sans risque
de conflit de donnes.
HashMap
o Presque quivalent de HashTable
o il accepte au plus une cl Null, et plusieurs valeurs Null;
o il n'est pas Thread Safe.
TreeMap
o HashMap dans laquelle les lments sont tris selon lordre des cls
10/11/2016 JavaEE - Ahmed Azough - FSDM 122
import java.util.*;
public class TestTreeMap {
public static void main(String args[]) {
TreeMap<String,Double> tm = new TreeMap<String,Double>();
// Put elements to the map
tm.put("Zahir", new Double(14.34));
tm.put("Majid", new Double(13.22));
tm.put("Ayoub", new Double(17.00));
tm.put("Driss", new Double(11.22));
tm.put("Rachid", new Double(15.08));
Iterator iterator = tm.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry me = (Map.Entry) iterator.next();
System.out.print(me.getKey() + ":
"+me.getValue()+; );
Resultat} :
Ayoub: 17.0; Driss: 11.22; Majid: 13.22; Rachid: 15.08; Zahir: 14.34;
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 123
}
La classe HashMap<K,V> utilise la structure informatique nomme
table de hachage pour ranger les cls
La mthode hashCode() (hrite de Object ou redfinie) est utilise
pour rpartir les cls dans la table de hachage
o A.equals(B) A.hashCode()=B.hashCode().
o A.hashCode()=B.hashCode() ! A.equals(B).
o hashCode() est constante dans la mme excution.
10/11/2016 JavaEE - Ahmed Azough - FSDM 124
Object put(K cl, V valeur) ajouter et enlever des couples cl valeur
void putAll(Map<? extends K, ? extends V>map) Rajouter tous les lment dune Map map
void remove(Object key) Supprimer llment dont la cl est key
boolean containsKey(Object key) savoir si une table contient une cl key
boolean containsValue(Object val) savoir si une table contient une valeur val
Set<Map.Entry<K,V>> entrySet() Rcuprer les lments sous forme de set
V get(Object key) Rcuprer la valeur dont la cl est key
boolean isEmpty() Savoir si la map est vide
Set<K> keySet() Rcuprer toutes les cls
int size() Rcuprer la taille de la map
Collection<V> values() rcuprer toutes les valeurs
10/11/2016 JavaEE - Ahmed Azough - FSDM 125
keySet() :
o Rcuprer les cls sous forme de Set<K> avec la mthode iterator() de linterface
Set<K> pour rcuprer une une les cls
for (Iterator i = m.keySet().iterator(); i.hasNext(); )
System.out.println(i.next());
values() :
o Rcupre les valeurs sous forme de Collection<V> avec la mthode iterator() de
linterface Collection<V> pour rcuprer un un les lments
for (Iterator i = m.values().iterator(); i.hasNext(); )
System.out.println(i.next());
entrySet():
o rcupre les entres (cl-valeur) sous forme de Set<Entry<K,V>> avec la mthode
iterator() de linterface Set<Entry<K,V>> pour rcuprer une une les entres
for (Iterator i = m.keySet().iterator(); i.hasNext(); ) {
Map.Entry e = (Map.Entry) i.next();
System.out.println (e.getKey() + " ; " + e.getValue());
}
10/11/2016 JavaEE - Ahmed Azough - FSDM 126
Mthode
o public boolean contains(Object o)
o interface Collection, redfinie selon les sous-classes
Utilise lgalit entre objets
o galit dfinie par boolean equals(Object o)
o par dfaut (classe Object) :
galit de rfrences
o Personnaliser :
redfinir equals() dans chaque classe dlments
10/11/2016 JavaEE - Ahmed Azough - FSDM 127
Collections (avec un s) fournit des mthodes static pour
o Trier une collection
o Faire des recherches rapides dans une collection trie
Arrays fournit des mthodes static pour
o Trier
o Faire des recherches rapides dans un tableau tri
o Transformer un tableau en liste
10/11/2016 JavaEE - Ahmed Azough - FSDM 128
Algorithmes gnriques
Collections.sort(List l)
Arrays.sort(Object[] a,)
Condition : collection dlments dont la classe dfinit des rgles
de comparaison
o en implmentant linterface java.lang.Comparable
implements Comparable
o en dfinissant la mthode de comparaison
public int compareTo(Object o)
a.compareTo(b) == 0 si a.equals(b)
a.compareTo(b) < 0 pour a strictement infrieur b
a.compareTo(b) > 0 pour a strictement suprieur b
10/11/2016 JavaEE - Ahmed Azough - FSDM 129
N'utiliser que les mthodes communes
Dclaration
o Collection col = new ArrayList();
Parcours des lments de la collection : Iterator
o parcourir une collection en faisant abstraction de l'implmentation
o accs index pas toujours disponible (mthode get())
o utiliser la mthode Iterator iterator()
o se dplacer avec les mthodes next() et hasNext()
o remove() permet de supprimer llment courant
Collection col = new TreeSet();
Iterator i = col.iterator();
while (i.hasNext())
traiter ((transtypage)i.next());
10/11/2016 JavaEE - Ahmed Azough - FSDM 130
10/11/2016 JavaEE - Ahmed Azough - FSDM 131
LinkedList ArrayList
get(int index) O(n/4) O(1)
add(E element) O(1) O(1)
O(n) : dpassement de capacit (*)
add(int index, E O(n/4) O(n/2)
element) O(1) : index = 0,
remove(int index) O(n/4) O(n/2)
Iterator.remove() O(1) O(n/2)
ListIterator.add(E O(1) O(n/2)
element)
(*) quand une arraylist est cre, une capacit initiale de 10 est attribue, puis ds la capacit est
dpasse:
o une nouvelle liste est cre avec une nouvelle capacit est affecte :
nouvelleCapacit=ancienneCapacit*1.5
o tous les lments de lancienne liste sont copis dans la nouvelle
Java EE - Ahmed Azough - FSDM 132
Java EE - Ahmed Azough - FSDM
2015/2016
Pr. Ahmed AZOUGH
FSDM
Nouveaux besoins :
o Besoin dapplications portables, distribues, transactionnelles
o Besoin damliorer la scurit, la rutilisabilit, la fiabilit et la
rapidit des applications.
o Besoin de raliser des applications de gestion de qualit
professionnelle
Plus de contraintes:
o Moins dinvestissements
o Moins de ressources
o Dvelopper plus rapidement.
Java EE - Ahmed Azough - FSDM 134
Introduit (sous le nom de J2EE) par Sun en 1997
o Norme supporte par de nombreux acteurs puissants
o Un standard de dveloppement d'applications JAVA rparties, multi-
niveaux (n-tiers), bases sur des composants
La plate forme Java EE comprend :
o un environnement Java standard
o les spcifications du serveur d'application (l'environnement
d'excution)
o des services sous formes d'API Java
Java EE - Ahmed Azough - FSDM 135
Autres plates-formes de dveloppement (C#, PHP5, .NET...).
Les principaux avantages dutiliser Java EE (et donc Java) sont la
o Portabilit : les projets sont portables sur nimporte quel serveur
dapplications aux spcifications Java EE
o Infrastructure importante: librairie fondamentales dj en place :
laccs aux bases de donnes, lenvoi de mails, les transactions, la
gestion de fichiers, la gestion dimages, le tlchargement, le
chargement ou upload, la supervision du systme ...
o Standardisation (Java Community Process)
cre par Sun en 1998, regroupe Sun, IBM, Oracle, Borland, Nokia, Sony, la
fondation Apache, ObjectWeb.
dfinir les spcifications des technologies, coordonner l'volution du
langage Java,
Chaque demande de modification est appele une JSR (Java Specification
Request
o lindpendance, la scurit,
Java EE - Ahmed Azough - FSDM 136
J2SE (Java 2 Standard Edition):
o destin au dveloppement
d'applications pour ordinateurs
personnels et aux postes clients
J2ME (Java 2 Micro Edition):
o prvu pour le dveloppement
d'applications embarques sur
terminaux mobiles (tlphone,
PDA, SmartPhones, etc.)
Java EE (Java 2 Enterprise Edition):
o destin un usage professionnel
avec la mise en oeuvre de
serveurs.
Java EE - Ahmed Azough - FSDM 137
Ensemble de logiciels communiquant via un rseau
o Client
Initie le dialogue via une requte
Attend et reoit des rponses
Interagit avec l'utilisateur (IHM)
o Serveur
Il coute (N'initie jamais de dialogue ou d'activit)
Attend et rpond aux requtes des clients
Gre quels sont les clients autoriss se connecter
Exemple : le navigateur Web (client)
qui demande une page
un serveur Web
Java EE - Ahmed Azough - FSDM 138
Avantage :
o c'est centralis
o meilleure scurit : points d'accs aux donnes peu importants
o administration simplifie : elle est faite au niveau du serveur
o volutif : on peut facilement rajouter des clients
Inconvnients
o Cot souvent lev du serveur : c'est une grosse machine
ce n'est plus forcment le cas
o Le serveur est critique : si il tombe en panne, rien ne fonctionne
on duplique les systmes
Java EE - Ahmed Azough - FSDM 139
Architecture 2 niveaux (2-tiers)
o client/serveur classique : 1 serveur, des clients
o un seul serveur pour tous les services
o Le serveur est polyvalent
c'est une architecture trs centralise
Architecture 3 niveaux (3-tiers)
o 1 serveur d'application (couche mtier - middleware)
o 1 serveur de donnes (couche donnes - SGBD)
o et toujours des clients (couche de prsentation)
permet une plus grand souplesse (indpendance SGBD/middleware)
meilleure performance : rpartition de la charge
Java EE - Ahmed Azough - FSDM 140
Architecture multi-niveaux
o On spcialise encore plus les serveurs
o toujours les serveurs middleware et SGBD
o serveur d'accs (LDAP)
o serveur mtier (EJB)
o serveur de prsentation (JSP)
o etc.
Java EE - Ahmed Azough - FSDM 141
C'est une sorte d'architecture 3 niveaux o la
o couche prsentation est divise en 2 :
o Le client lger :
un navigateur Web
Un serveur Web avec JSP, servlets.
Java EE - Ahmed Azough - FSDM 142
Les spcifications Java EE distinguent 3 types de composants :
o Composants qui tournent sur le client :
les applications clientes et les applets
o Composants Web qui tournent sur le serveur :
Servlets, JavaServer Pages (JSP), JavaServer Face (JSF), etc.
o Composants mtiers qui tournent sur le serveur :
Enterprise JavaBeans (EJB), Java Persitance API (JPA), etc.
Tous ces composants sont crits en JAVA
Les SGBD ne font pas partie des composants
Java EE - Ahmed Azough - FSDM 144
Clients Web (client lger)
o Les pages HTML gnres par les composants Web serveur
o Le navigateur qui affiche ces pages
Les applets (client semi-lourd)
o un petite application JAVA qui s'excute sur la machine virtuelle
installe sur le navigateur
o c'est un compromis entre client Web et application
o Aujourd'hui, le client Web lger est prfr
Le client application (client lourd)
o C'est une application JAVA, avec une interface graphique plus riche
crite en Swing ou AWT, ou JavaFX (outil officiel)
o C'est un client plus lourd que le client Web
Java EE - Ahmed Azough - FSDM 145
Comparaison des approches (Lourd vs. Lger):
o Il faut installer le client application, pas le client Web
o Le client application peut avoir une interface graphique plus
volue (avec Web 2.0 ce n'est plus trop le cas...)
o Le client application gre toute la couche prsentation, le client
Web besoin d'une sous-couche Web serveur
Java EE - Ahmed Azough - FSDM 146
Seulement utiles dans le cas de clients Web
Permettent de gnrer des pages Web (HTML, XML)
3 types de technologies :
o Servlets : classes permettant de rpondre une requte HTTP
(classes JAVA qui peuvent crire du HTML)
o JSP : sortes de pages Web excutables (pages HTML qui
contiennent du code JAVA)
o JavaServer Faces : technologie au dessus des Servlets et JSP pour
fournir des composants de l'interface graphique
Java EE - Ahmed Azough - FSDM 147
Les composants mtiers : classes qui implmentent
concrtement les objets du domaine applicatif (c'est le modle
de l'application).
o Exemple : les classes Client, Compte, Prt d'une banque
Ces composants de la couche mtier vont grer :
o les traitements propres la logique de l'application
o la persistance des objets dans une BD
o la rponse au programme client (le client application ou les
composants Web serveur)
Java EE - Ahmed Azough - FSDM 148
La communication entre les composants des diffrentes couches se
fait par le rseaux (Internet)
Les principaux protocoles internet utiliss:
o HTTP : transfert des pages JSP, Servlet
o RMI : pour invoquer mthodes d'objets distants
o SOAP/WSDL : pour les services Web
o SSL : pour les transferts scuriss
Java EE - Ahmed Azough - FSDM 149
Un conteneur est l'environnement d'excution des composants.
Il gre l'interface entre les composants Java EE et les
fonctionnalits bas-niveau
o multi-threading, le cache mmoire, la scurit, l'accs aux donnes
etc.
Les diffrents types de conteneurs :
o Conteneur d'EJB (composants mtier)
o Conteneur Web (pour l'excution des servlet, JSP, etc.)
o Conteneur d'application et d'applet (la machine virtuelle)
Java EE - Ahmed Azough - FSDM 151
Le conteneur d'EJB et Web font partie intgrante du serveur Java
EE (serveur d'application)
Java EE - Ahmed Azough - FSDM 152
Un serveur Web est constitu de
o un serveur HTTP pouvant communiquer via le protocole HTTP
GET, POST et HEAD, PUT, DELETE, TRACE, CONNECT
o un conteneur web permettent d'excuter les servlets, JSP.
Quelques serveurs Web Java EE
o Apache Tomcat
o Jetty : trs lger
Java EE - Ahmed Azough - FSDM 153
Inclus un serveur Web
Le serveur d'application fourni les services systmes gnriques :
o La scurit
o La reprise sur panne
o Les services transactionnel entre composants
o La gestion des utilisateurs
o L'accs aux sources de donnes
Java EE - Ahmed Azough - FSDM 154
Des serveurs commerciaux (payants) :
o BEA WebLogic
o IBM WebSphere
o Sun Java System App. Server
o Oracle Application Server 10g
o SAP Netweaver, ...
Des serveurs Open Source (gratuits) :
o JBoss
o Object Web (OW2) JOnAS
o Apache Geronimo 2.0, GlassFish, etc.
Java EE - Ahmed Azough - FSDM 155
Serveur dapplication
(services systmes gnriques JavaEE)
Serveur Web
(excuter servlets/JSP)
Serveur HTTP
(communiquer via Protocole HTTP)
Java EE - Ahmed Azough - FSDM 156
La plate-forme Java EE fournie un ensemble d'APIs fournissant des services de
base au dveloppeur
Infrastructure importante, Multitude de librairies proposes : Les lments
fondamentaux sont dj en place : laccs aux bases de donnes, lenvoi de
mails, les transactions, la gestion de fichiers, la gestion dimages, le
tlchargement, le chargement ou upload, la supervision du systme...
Java EE - Ahmed Azough - FSDM 158
Au niveau du conteneur Web :
o Les servlets
o Les JavaServer Pages - JSP
o Les JavaServer Pages Standard Tag Library - JSTL
o JavaServer Faces - JSF
Au niveau du conteneur d'EJB (conteneur mtier)
o Enterprise Java Beans EJB
o Java Persistance API - JPA
Java EE - Ahmed Azough - FSDM 159
Dcoupe l'application en 3 couches distinctes, :
o Modle: le traitement, le stockage et la mise jour des donnes de
l'application;
o Vue: l'interaction avec l'utilisateur et la prsentation des donnes
(mise en forme, affichage);
o Contrle: le contrle des actions de l'utilisateur et des donnes.
Dans une application Java EE sans frameworks :
o la couche Modle est constitue d'objets Java ;
o la couche Vue est constitue de pages JSP ;
o la couche Contrle est constitue de servlets.
Java EE - Ahmed Azough - FSDM 160
C'est la base de la programmation Java EE
o toute la conception d'application Web repose sur cela
Qu'est ce qu'une servlet ?
o Un programme JAVA qui tourne sur un serveur Java EE
o Elle est invoque lorsqu'un navigateur appelle l'URL qui lui est lie
Java EE - Ahmed Azough - FSDM 161
Java EE - Ahmed Azough - FSDM 162
Dvelopper des pages web dynamiques, contenu est cr sur
demande.
o Exemple: obtenir la liste des articles dune boutique pour un prix.
o Les pages HTML sont gnres dynamiquement en fonction de
critres spcifiques (prix, dates, recherches...).
La servlet est
o gre par le conteneur de Servlets Java EE
o implmente linterface javax.servlet.Servlet qui permet de grer les
requtes du client, diriges vers la Servlet en question.
Le serveur reoit une demande adresse une Servlet sous la
forme dune requte HTTP. Il transmet alors la requte la
Servlet concerne par le traitement puis renvoie la rponse
fournie par celle ci au client.
Java EE - Ahmed Azough - FSDM 163
Ce sont des pages Web incluant du code JAVA
plus facile crire que des servlets
Les JSP sont transformes en servlet
Java EE - Ahmed Azough - FSDM 164
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ma premire JSP</title>
</head>
<body>
<h1>Les nombres de 1 10 sont :</h1>
<% for (int i=1 ; i<=10 ; i++) {
out.println(i+"<br/>");
}
%>
</body>
</html>
premiereJSP.jsp
10/11/2016 JavaEE - Ahmed Azough - FSDM 165
Une API qui recouvre les fonctionnalits souvent utilises dans
les pages JSP (Tag Library)
Quelques fonctionnalits :
o Itrateur et conditionnel
o manipulation de documents XML
o internationalisation
o accs aux bases de donnes
o etc.
Java EE - Ahmed Azough - FSDM 166
Gestion de variables
o Dfinition/affectation d'une variable ou proprit de porte limite
<c:set />
<jsp:useBean id="unContact" class="beans.Client" scope="page"/>
<c:set var="leNom" value="${param['nom']}" scope="page" />
<c:set target="${unContact}" property="nom" value="${leNom}" />
<c:set target="${unContact}" property="prenom" value="${param['prenom']}" />
<c:set target="${unContact}" property="tel" value="${param['tel']}" />
o Suppression d'un objet <c:remove />
<c:remove var="leNom" scope="page"/>
JavaEE - Master SIRM/M2ID - Ahmed Azough - FSDM 167
Plate-forme de cration d'interfaces utilisateur Web
Abstraction de JSP (on pourrait utiliser autre chose)
Les composants principaux de JSF :
o Reprsentation d'interfaces utilisateur (par composants)
o Gestion des composants (tats, vnements, validation des
entres, conversion des sorties)
o Navigation inter-vues
Java EE - Ahmed Azough - FSDM 168
EJB = composant logiciel implmentant les mthodes et attributs
du mtier vise par l'application
Les EJB sont des briques logicielles qui peuvent tre utilises de
manire autonome ou avec d'autres EJB
Les EJB peuvent tre distribus sur diffrents serveurs
Le conteneur d'EJB va grer leur cycle de vie de manire
transparente :
o cration, passivation, ractivation, destruction
Java EE - Ahmed Azough - FSDM 169
2 types d'EJB sont utiliss :
o EJB dit session (session bean) qui propose un service
sans conservation d'tat entre 2 appels (stateless)
avec conservation d'tat entre 2 appels (stateful)
o EJB dit message (message-driven bean) qui ralise des tches de
manire asynchrone
le client dpose un message (JMS) dans une file d'attente, un EJB dit
message sera instanci pour traiter ce message.
Un ancien : EJB entit qui reprsente des donnes persistantes
o Remplac par Java Persistance API depuis la version 3.0.
Java EE - Ahmed Azough - FSDM 170
Java DataBase Connectivity permet
d'accder des bases de donnes
relationnelles partir de code JAVA
Principales fonctionnalits
o Abstraction du SGBD utilis
Il existe des drivers pour Oracle,
MySQL, Postgres, DB2, etc.
o L'accs aux bases de donnes
(connexion, session, etc.)
o L'envoie de requtes SQL (Statement,
etc.)
o L'exploitation des rsultats (Curseur,
etc.)
Java EE - Ahmed Azough - FSDM 171
Exemple
o Excuter la requte dinsertion si les paramtres ne sont pas vides
if ( paramEmail != null && paramMotDePasse != null &&
paramNom != null ) {
int statut = statement.executeUpdate( "INSERT INTO
Utilisateur (email, mot_de_passe, nom,
date_inscription) " + "VALUES ('"+paramEmail+"',
MD5('"+paramMotDePasse+"'), '"+paramNom+"',
NOW());",Statement.RETURN_GENERATED_KEYS );
Java EE - Ahmed Azough - FSDM 172
Persistance des donnes
o JDBC : pour accder aux bases de donnes relationnelles
o Java Persitence API : mapping relationnel-objet
Gestion distribue d'objets
o JNDI : pour donner des noms logiques aux ressources distribues
(exemple : associer une URL aux objets)
o RMI : pour manipuler des objets distants
Accessoires
pour XML et les services Web
Java EE - Ahmed Azough - FSDM 173
Java Persistence API est une couche au dessus de JDBC
(remplace les EJB de donnes)
Permet de grer la translation Objet/Relationnel
o enregistrer les objets dans des tables relationnelles
o lire des objets partir de tables relationnelles
Cette API a t introduite dans un but de standardisation (norme
EJB 3.0):
o Nombreux frameworks de persistance : Hibernate, Toplink, JDO
o Reprend principalement Hibernate
Java EE - Ahmed Azough - FSDM 174
JCA permet de crer des adaptateurs entre systmes
d'information propritaires dentreprise (EIS) et systmes Java
EE.
o Cela facilite l'intgration entre systmes propritaires et serveur
d'application Java EE
o C'est gnrique n'importe quel type de serveur Java EE
o Mais c'est spcifique au systme propritaire
Un adapteur peut tre expos comme service Web
o Les services du systme propritaire deviennent des services Web
accessibles par le serveur Java EE
Java EE - Ahmed Azough - FSDM 175
JNDI offre les fonctionnalits pour accder au services de
nommage et d'annuaires
o Un service de nommage permet d'associer une entit technologique
un nom unique (exemple : des donnes un nom de fichier, une
page web une URL, etc.)
Quelques services de nommage : DNS, NIS
o Un annuaire est une extension du service de nommage. Il permet
d'associer des infos supplmentaires.
par exemple une adresse, des numros de tl. une personne dans un
annuaire LDAP
JNDI est utilis par de nombreuses APIs Java EE
Java EE - Ahmed Azough - FSDM 176
RMI permet de manipuler de objets distants instancis sur des
machines virtuelles diffrentes, distribues sur le rseau
Le dveloppement cot serveur se compose de :
o La dfinition d'une interface qui contient les mthodes qui peuvent
tre appeles distance
o L'criture d'une classe qui implmente cette interface
o L'criture d'une classe qui instanciera l'objet et l'enregistrera en lui
affectant un nom dans le registre de noms RMI (RMI Registry)
Le dveloppement ct client se compose de :
o L'obtention d'une rfrence sur l'objet distant partir de son nom
o L'appel la mthode partir de cette rfrence
Client Serveur
Protocole RMI IIOP
Couche visible
(Internet Inter-Orb Protocol) Remote Reference Layer
Couche cache
Java EE - Ahmed Azough - FSDM 177
JMS permet aux applications ou composants Java EE de
s'envoyer des messages de manire asynchrone.
o C'est comme le mail mais pour des machines
Cette API permet de crer, d'envoyer, recevoir et de lire des
messages.
o Avantages :
Faible couplage (les applis ne se connaissent pas)
Fiable : garantie de livraison des messages
Java EE - Ahmed Azough - FSDM 178
JTA fourni une interface de gestion des transactions
indpendante du gestionnaire de transaction utilis
Rappel : une transaction est un ensemble atomique d'oprations
lmentaires (tout ou rien)
o Exemple du transfert entre 2 comptes : dbit + crdit
une transaction peut tre confirme (commit) ou annule
(rollback)
JDBC permet de grer les transactions sur une base de donnes
locale mais si les donnes sont rparties, il faudra alors utiliser
les transactions JTA. JTA permet en effet de grer les
transactions distribues qui font intervenir diffrentes SGBD, du
serveur d'applis,via une seule interface commune et partage
Java EE - Ahmed Azough - FSDM 179
Les services Web sont des technologies permettant aux applications
d'interagir sur Internet indpendamment du langage des applis et de leur
plateforme d'excution
Les services Web reposent principalement sur XML
o XML RPC : Invocation de mthodes distance
o SOAP (Simple Object Acess Protocol) : protocole d'change de donnes entre les
applications
o WSDL (Web Service Description Language) - W3C : description des services Web
(emplacements, mthodes, paramtres, valeur de retour, etc.)
UDDI (Universal Description Discovery and Integration) standard de
publication et de dcouverte de service Web bas notamment sur d'utilisation
d'annuaires de services Web
o publication : mettre la description (WSDL) du service dans un registre
o Dcouverte : recherche de service dans les annuaires
Java EE propose un ensemble d'APIs pour les SW
o Des APIs XML : pour traiter les documents XML
o Des APIs spcialises services Web qui s'appuient sur les premires.
Java EE - Ahmed Azough - FSDM 180
Java API for XML Processing (JAXP)
o API de base pour parser et transformer des documents XML
o Parser SAX, reprsentation DOM
o Transformations XSL (XSLT)
Java Architecture for XML Binding (JAXB)
o Permet de relier un schma XML une reprsentation Objet JAVA.
Java EE - Ahmed Azough - FSDM 181
Java API for XML Web Services (JAX-WS)
o S'appuie sur JAX et fournit des fonctionnalits pour utiliser des
services Web XML
o traitement des requtes et rponses SOAP, WSDL
Java API for XML Registries (JAXR)
o Permet d'accder des registres tels que les annuaires UDDI
SOAP with Attachments API for Java (SAAJ)
o API SOAP bas-niveau utilise par JAX-WS et JAXR
Java EE - Ahmed Azough - FSDM 182
Les architectures client/serveur
L'architecture Java EE
La notion de composant
o composants client, Web, mtiers
La notion de conteneur
o et de serveur d'application
Les API de Java EE
o API Web : servlet, JSP etc.
o API mtier : EJB et les autres : JDBC, JavaMail, XML...
Java EE - Ahmed Azough - FSDM 183