Sie sind auf Seite 1von 183

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

Das könnte Ihnen auch gefallen