2016/2017 Pr. Ahmed AZOUGH
2015/2016 Pr. Ahmed AZOUGH FSDM
Java EE - Ahmed Azough - FSDM
Programme :
Logiciel :
programmes + documentation + licence + support (CD...). Cet ensemble peut être commercialisé, distribué à des utilisateurs.
Application:
ensemble d'instructions permettant à l'ordinateur de réaliser une tâche définie.
logiciel, ou ensemble de logiciels qui coopèrent par exemple, un site web, application mobile (serveur HTTP+CGI(Common Gateway Interface)+base de données...)
Progiciel :
logiciel propriétaire destiné à un usage spécifique et adaptable à chaque utilisateur (typiquement: SAP, Saqqara, Commerce server...).
Langage C - FSDM
3
Génération 1 : Programmation Spaghettis : o Assembleur, Fortran I, Basic • o Logique de saut « goto ». Absence totale d'entités autonomes et
modifiables indépendamment du reste du programme. Code et données étroitement imbriqués
Génération 2 : Programmation Structurée : o Pascal, C, Algol, Perl, Python o Expression séparée des données et des traitements. o Modularité :
• • • •
Données typées. Possibilité de création de types complexes. Structures de contrôle remplaçant les sauts. Notion de sous-programmes et compilation séparée (entités autonomes) Java EE - Ahmed Azough - FSDM
4
Génération 3 : Programmation par Objets : o Simula, SmallTalk, Eiffel, C++, Pascal objet, Java, C# o Modularité qui regroupe les données et les traitements dans une
même entité appelée objet. o Les objets peuvent être vus comme des tentatives de simuler une situation réelle (objets « personne », « voiture »). Les objets réels ne sont ni des traitements purs, ni des données pures mais une combinaison des deux
Java EE - Ahmed Azough - FSDM
5
programmation impérative o Langage machine
o programmation Spaghettis, structurée, orientée objets
programmation déclarative o programmation logique • intelligence artificielle: Prolog, Datalog, Python pypy o programmation fonctionnelle • Application :: ensemble de fonctions mathématiques (LISP, Caml, Haskell, Oz)
programmation par scripting o Nécessite un interpréteur, s’affranchi des fonctionnalités du bas niveau o sh (Linux), Cmd (Windows), JavaScript, AppleScript (compilable), VBScript, Lisp,
Matlab, PHP
programmation orientée aspect o Séparer les aspects transversaux (e.g. logging) des aspects métiers o AspectJ, extension orientée aspectde Java
programmation concurrente, dynamique, par contraintes, etc, Java EE - Ahmed Azough - FSDM
6
Java EE - Ahmed Azough - FSDM
7
Classement général selon l’IEEE o IEEE : la plus grande association mondiale de professionnels techniques
(400 000 membres) en informatique, électronique, et télécommunication
2015 Java EE - Ahmed Azough - FSDM
2014 8
Top 10 des langages pour le développement de sites et applications web
Java EE - Ahmed Azough - FSDM
9
…pour le développement d’applications pour les appareils mobiles
Java EE - Ahmed Azough - FSDM
10
…pour le développement d’applications d’entreprise
Java EE - Ahmed Azough - FSDM
11
…pour le développement d’applications embarquées
Java EE - Ahmed Azough - FSDM
12
13
10/11/2016
2015/2016 Pr. Ahmed AZOUGH
JavaEE - Ahmed Azough - FSDM
1990 : une équipe de Sun Microsystems dirigée par James Gosling écrit un nouveau langage adapté à la réalisation de logiciels embarqués, appelé OAK o Petit, fiable et indépendant de l'architecture o Destiné à la télévision interactive ( et futurs ustensiles domestiques)
1995 : Sun rebaptisa OAK en Java (nom de la machine à café autour de laquelle se réunissait James Gosling et ses collaborateurs) Évolution très rapide et succès du langage: o o o o o o o
Java 1.1 en 1997 (JavaBeans, JDBC, RMI, …) Java 2 en 1999 (Java 2, version 1.2) Java 5 en 2004 Java 6 en 2006 celle que nous utiliserons dans ce cours Java 7 en 2011 Java 8 en 2014 Java 9 programmée pour Mars 2017
La société Oracle a acquis en 2009 l'entreprise Sun Microsystems.
10/11/2016
JavaEE - Ahmed 14Azough - FSDM
Les plus : o Il a su bénéficier de l’essor d’Internet o Il s’est inspiré des languages objets existants : C++, SmallTalk, Ada… o Il a su s’imposer dans de nombreux domaines o Un environnement gratuit et de nombreux outils disponibles o Une large communauté très active
Les moins : o Trop ‘médiatisé’? o Problèmes de compatibilité
• Avec les premières versions • Avec certains navigateurs (les navigateurs ne sont pas écrits par Sun) o Problèmes de vitesse, mais existence de solutions pour y pallier
(compilateur natif, compilation du bytecode à la volée)
10/11/2016
JavaEE - Ahmed 15Azough - FSDM
Simple & Familé o
Apprentissage facile • faible nombre de mots-clés • simplifications des fonctionnalités essentielles
o o
Développeurs opérationnels rapidement Syntaxe proche de celle de C/C++
Orienté objet Java ne permet d'utiliser que des objets (hors les types de base) Java est un langage objet de la famille des langages de classe comme C++ ou SmallTalk o Les grandes idées reprises sont : encapsulation, dualité classe /instance, attribut, méthode / message, visibilité, dualité interface/implémentation, héritage simple, redéfinition de méthodes, polymorphisme o o
Sûr o o
Seul le bytecode est transmis, et «vérifié» par l’interpréteur Impossibilité d’accéder à des fonctions globales ou des ressources arbitraires du système
10/11/2016
JavaEE - Ahmed Azough - FSDM
16
Fiable o o o
Gestion automatique de la mémoire (ramasse-miette ou "garbage collector") Gestion des exceptions Sources d'erreurs limitées • typage fort (détecter des erreurs de typage, pas de conversions implicites de types : C++) • pas d'héritage multiple, • pas de manipulations de pointeurs. Tout est pointeur sauf les types primitifs
o
Vérifications faites par le compilateur facilitant une plus grande rigueur du code
Java est indépendant de l'architecture « Ecrire une fois, exécuter partout » o Le bytecode généré par le compilateur est indépendant de toute architecture. o Toute application peut tourner sur une plate-forme implémentant une JVM
Java est multi-tâches o o o
Exécution de plusieurs processus effectuant chacun une tâche différente Mécanismes de synchronisation pour résoudre la concurrence d'accès Sur les machines multiprocesseurs, les threads peuvent être exécutés sur plusieurs processeurs réellement en même temps
10/11/2016
JavaEE - Ahmed 17Azough - FSDM
Java est un langage interprété o La compilation d'un programme Java crée du pseudo-code portable : le
"byte-code" o Sur n'importe quelle plate-forme, une machine virtuelle Java peut interpréter le pseudo-code afin qu'il soit exécuté
Les machines virtuelles Java peuvent être o des interpréteurs de byte-code indépendants (pour exécuter les
programmes Java) o contenues au sein d'un navigateur (pour exécuter 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 Développement plus rapide
• courte étape de compilation pour obtenir le byte-code, • pas d'édition de liens, • déboguagge plus aisé, o Le byte-code est plus compact que les exécutables
• pour voyager sur les réseaux.
Inconvénients : o Nécessite l’installation d’un interpréteur pour pouvoir exécuter un
programme Java o L'interprétation du code ralentit l'exécution o Gestion gourmande de la mémoire o Impossibilité d’opérations de « bas niveau » liées au matériel 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) : interprètes le byte code en langage machine selon l’OS, le HW. La JVM d’Oracle est écrite en C • JIT (Just In Time) : compile quelques parties du byte code en langage machine pour une performance élevée
Java EE - Ahmed Azough - FSDM
20
Etapes qui ont lieu avant l'exécution pour un langage compilé comme C++
Fichier de code
Compilation
Librairies
Code objet
Edition de liens
Programme exécutable
Autres code objet Fichier d'entête
10/11/2016
JavaEE - Ahmed Azough - FSDM
21
Etapes qui ont lieu avant l'exécution pour Java (premières version)
Exécution
Avant exécution
Autres byte code
Fichier de code Java MaClasse.java
10/11/2016
Compilation javac
Byte code MaClasse.class
JavaEE - Ahmed Azough - FSDM
Machine virtuelle Java (JVM) java
22
Translation dynamique (versions actuelles)
Java EE - Ahmed Azough - FSDM
23
Java fournit de nombreuses librairies de classes remplissant des fonctionnalités très diverses : c'est l'API Java o API (Application and Programming Interface /Interface pour la
programmation d'applications) : Ensemble de bibliothèques permettant une programmation plus aisée car les fonctions deviennent indépendantes du matériel.
Ces classes sont regroupées, par catégories, en paquetages (ou "packages").
10/11/2016
JavaEE - Ahmed Azough - FSDM
24
Les principaux paquetages o java.util : structures de données classiques o java.io : entrées / sorties o java.lang : chaînes de caractères, 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 récent proposant des composants « légers »
pour la création d’interfaces 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 généralement juste
avant une déclaration (d'attribut ou de méthode) o Ils sont récupérés par l'utilitaire javadoc et inclus dans la documentation ainsi générée.
10/11/2016
JavaEE - Ahmed Azough - FSDM
27
Les instructions Java se terminent par un ; Les blocs sont délimités par : o { pour le début de bloc o } pour la fin du bloc o Un bloc permet de définir un regroupement d’instructions. La
définition d’une classe ou d’une méthode se fait dans un bloc.
Les espaces, tabulations, sauts de ligne sont autorisés. Cela permet de présenter un code plus lisible.
10/11/2016
JavaEE - Ahmed Azough - FSDM
28
Pour pouvoir faire un programme exécutable il faut toujours une classe qui contienne une méthode particulière, la méthode « main » o c’est le point d’entrée dans le programme : le microprocesseur sait
qu’il va commencer à exécuter les instructions à partir de cet endroit
public static void main(String arg[ ]) { …/… }
10/11/2016
JavaEE - Ahmed Azough - FSDM
29
Fichier Bonjour.java
public class Bonjour
{ //Accolade débutant la classe Bonjour
La classe est l’unité de base de nos programmes. Le mot clé en Java pour définir une classe est class
public static void main(String args[]) { //Accolade débutant la méthode main
/* Pour l’instant juste une instruction */ System.out.println(“bonjour”); } //Accolade fermant la méthode main
} //Accolade fermant la classe Bonjour 10/11/2016
JavaEE - Ahmed Azough - FSDM
30
Fichier Bonjour.java
public class Bonjour
Accolades délimitant le début et la fin de la définition de la class Bonjour
{ public static void main(String args[]) {
System.out.println(“bonjour”);
Accolades délimitant le début et la fin de la méthode main
} }
10/11/2016
Les instructions se terminent par des ;
JavaEE - Ahmed Azough - FSDM
31
Fichier Bonjour.java
public class Bonjour
{
Une méthode peut recevoir des paramètres. Ici la méthode main reçoit le paramètre args qui est un tableau de chaîne de caractères.
public static void main(String args[]) {
System.out.println(“bonjour”); } }
10/11/2016
JavaEE - Ahmed Azough - FSDM
32
Le nom du fichier est nécessairement celui de la classe avec l’extension .java en plus. Java est sensible à la casse des lettres.
Fichier Bonjour.java Compilation en bytecode java dans une console DOS: javac Bonjour.java Génère un fichier Bonjour.class Exécution du programme (toujours depuis la console DOS) sur la JVM : java Bonjour Affichage de « bonjour » dans la console
public class Bonjour {
public static void main(String[] args) { System.out.println(“bonjour”);
} } 10/11/2016
JavaEE - Ahmed Azough - FSDM
33
Pour résumer, dans une console DOS, si j’ai un fichier Bonjour.java pour la classe Bonjour : o javac Bonjour.java
• Compilation en bytecode java • Indication des erreurs de syntaxe éventuelles • Génération d’un fichier Bonjour.class si pas d’erreurs o java Bonjour
• Java est la machine virtuelle • Exécution du bytecode • Nécessité de la méthode main, qui est le point d’entrée 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 d’identificateur. 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 accolés, mettre une majuscule à chacun des mots sauf
le premier.
• exemple : uneVariableEntiere o La première lettre est majuscule pour les classes et les interfaces • exemples : MaClasse, UneJolieFenetre o La première lettre est minuscule pour les méthodes, les attributs et les
variables
• exemples : setLongueur, i, uneFenetre o Les constantes sont entièrement 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 booléen pour représenter les variables ne pouvant prendre que 2
valeurs (vrai et faux, 0 ou 1, etc.) : boolean avec les valeurs associées true et false o un type pour représenter les caractères : char o quatre types pour représenter les entiers de divers taille : byte, short, int et long o deux types pour représenter les réelles : float et double
La taille nécessaire au stockage de ces types est indépendante de la machine. o Avantage : portabilité o Inconvénient : "conversions" coûteuses
10/11/2016
JavaEE - Ahmed Azough - FSDM
37
Les entiers (avec signe) o o o o
byte : codé sur 8 bits, short : codé sur 16 bits, int : codé sur 32 bits, long : codé sur 64 bits,
Les valeurs limites o
−𝟐𝒏−𝟏 ≤ 𝒙 ≤ 𝟐𝒏−𝟏 − 𝟏 , avec n la taille de codage du type
l'arithmétique entière est modulaire : pas de dépassement 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 définissent des méthodes (fonctions) de conversion de chaînes de caractères en entiers très utiles o Byte.parseByte() et Integer.parseInt()
10/11/2016
JavaEE - Ahmed Azough - FSDM
38
Opérations sur les entiers (suite) o opérateurs arithmétiques +, -, *, division /, reste de division % o les opérateurs d’incrémentation ++
et de décrémentation 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 illégale peut s’utiliser de manière suffixée : ++n. La différence avec la version préfixée se voit quand on les utilisent dans les expressions. En version suffixée la (dé/inc)rémentation s’effectue 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 réels o float : codé sur 32 bits o double : codé sur 64 bits
Les valeurs limites o o o o o o
o o
Float.MIN_VALUE=2-149 Float.MAX_VALUE=2-128-2-104 Double.MIN_VALUE=2-1074 Double.MAX_VALUE=2-1024-2-971 Float.NEGATIVE_INFINITY Float.POSITIVE_INFINITY Double.NEGATIVE_INFINITY Double.POSITIVE_INFINITY
10/11/2016
JavaEE - Ahmed Azough - FSDM
40
Les opérateurs o opérateurs classiques +, -, *, / o attention pour la division : • 15 / 4 donne 3 division entière • 15 % 2 donne 1 • 11.0 / 4 donne 2.75 (si l’un des termes de la division est un réel, la division retournera un réel).
o puissance : utilisation de la méthode 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 booléens • Boolean : 1bit contient soit vrai (true) soit faux (false)
Les opérateurs logiques de comparaisons • • • •
10/11/2016
Egalité : opérateur == Différence : opérateur != supérieur et inférieur strictement à : opérateurs > et < supérieur et inférieur ou égal : opérateurs >= et <=
JavaEE - Ahmed Azough - FSDM
42
Notation boolean x; x= true; x= false; x= (5==5); // l ’expression (5==5) est évaluée et la valeur est affectée à x qui vaut alors vrai x= (5!=4); // x vaut vrai, ici on obtient vrai si 5 est différent de 4 x= (5>5); // x vaut faux, 5 n'est pas supérieur strictement à 5 x= (5<=5); // x vaut vrai, 5 est bien inférieur ou égal à 5
10/11/2016
JavaEE - Ahmed Azough - FSDM
43
Les autres opérateurs logiques o et logique : && o ou logique : || o non logique : ! o Exemples : si a et b sont 2 variables booléennes
• • • • • • •
10/11/2016
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
JavaEE - Ahmed Azough - FSDM
44
Effectuent des opérations bit à bit et retournent des résultats entiers (signés)
10/11/2016
JavaEE - Ahmed Azough - FSDM
45
Les caractères o char : contient une seule lettre o le type char désigne des caractères en représentation Unicode
• Codage sur 2 octets contrairement à ASCII/ANSI codé sur 1 octet. Le codage ASCII/ANSI est un sous-ensemble d’Unicode • Notation hexadécimale des caractères Unicode de ‘ \u0000 ’ à ‘ \uFFFF ’. • Plus d’information 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 caractère guillemet : " o c=97; // x contient le caractère de rang 97 : 'a'
10/11/2016
JavaEE - Ahmed Azough - FSDM
47
Les structures de contrôle 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 généralement : if (condition) { bloc d’instructions} • condition doit être un booléen ou renvoyer une valeur booléenne o Effectuer une ou plusieurs instructions si une certaine condition est
vérifiée sinon effectuer d’autres instructions • if (condition) instruction1; else instruction2; • et plus généralement • if (condition) • { 1er bloc d’instructions}
• else • {2ème bloc d’instruction}
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'opérateur conditionnel ?: est un opérateur ternaire (hérité 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 même type o fonctionnement : si la condition est évaluée à 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 indéterminées o On veut répéter une ou plusieurs instructions un nombre
indéterminés de fois : on répète l’instruction ou le bloc d’instruction tant que une certaine condition reste vraie o nous avons en Java une première boucle while (tant que) • while (condition) {bloc d’instructions} • les instructions dans le bloc sont répétées tant que la condition reste vraie. • On ne rentre jamais dans la boucle si la condition est fausse dès le départ
10/11/2016
JavaEE - Ahmed Azough - FSDM
52
Boucles indéterminées o un autre type de boucle avec le while:
• do {bloc d’instructions} while (condition) • les instructions dans le bloc sont répétées tant que la condition reste vraie. • On rentre toujours au moins une fois dans la boucle : la condition est testée 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 déterminées o On veut répéter une ou plusieurs instructions un nombre
déterminés de fois : on répète l’instruction ou le bloc d’instructions 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
Sélection multiples o l’utilisation de if / else peut s’avérer lourde quand on doit traiter
plusieurs sélections 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 (à l’exclusion d’un long). o L’exécution des instructions correspondant à une alternative commence au niveau du case correspondant et se termine à la rencontre d’une instruction break ou arrivée à la fin du switch
10/11/2016
JavaEE - Ahmed Azough - FSDM
58
Alternative.java import java.io.*;
Variable contenant la valeur que l’on veut tester.
public class Alternative Première alternative : { on affiche Un et on sort public static void main(String args[]) du bloc du switch au break; { int nb = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:")); switch(nb) { Deuxième 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: Alternative par défaut: System.out.println("Autre nombre"); break; on réalise une action } par défaut. } } 10/11/2016 JavaEE - Ahmed Azough - FSDM 59
Les tableaux permettent de stocker plusieurs valeurs de même type dans une variable. o Les valeurs contenues dans la variable sont repérées par un indice o En langage java, les tableaux sont des objets
Déclaration o int tab [ ];
String chaines[ ];
Création 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'éléments du tableau est mémorisé. Java peut ainsi détecter à l'exécution le dépassement d'indice et générer une exception. Mot clé length o Il est récupérable par nomTableau.length
• int taille = tab.length; //taille vaut 20
Comme en C/C++, les indices d’un 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
Création et initialisation simultanées 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[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } }
Les indices vont toujours de 0 à (taille-1) 10/11/2016
Pour déclarer une variable tableau on indique le type des éléments du tableau et le nom de la variable tableau suivi de [ ] on utilise new [taille]; pour initialiser le tableau On peut ensuite affecter des valeurs au différentes cases du tableau : [indice]
JavaEE - Ahmed Azough - FSDM
63
Tab1.java
Mémoire
public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } }
10/11/2016
JavaEE - Ahmed Azough - FSDM
0x0000 0x258 0 0 0 0
64
Tab1.java
Mémoire
public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } }
10/11/2016
JavaEE - Ahmed Azough - FSDM
0x258
5 0 0 3 0 7 0 8
65
Tab2.java
Mémoire
public class Tab2 { public static void main (String args[]) { String tab[ ] ; tab = new String[4]; tab[0]=new String("Pierre"); tab[1]=new String("Paul"); tab[2]=new String("Jacques"); tab[3]=new String("Philippe"); } }
0x0258 0x0106 0x0116 0x0126 0x0136
"Pierre" "Paul"
"Jacques" "Philippe"
10/11/2016
JavaEE - Ahmed Azough - FSDM
66
Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) o String s="aaa"; // s contient la chaîne "aaa" mais o String s=new String("aaa"); // identique à la ligne précédente
La concaténation o l’opérateur + entre 2 String les concatène :
String str1 = "Bonjour ! "; String str2 = null; str2 = "Comment vas-tu ?"; String str3 = str1 + str2; // Concaténation de chaînes : str3 contient " Bonjour ! Comment vas-tu ?"
10/11/2016
JavaEE - Ahmed Azough - FSDM
67
Mémoire 3
int x=3,y=3; x == y est vrai
3 0x768 0x852
String s1=new String("abc"),s2=new String("abc"); s1 == s2 est faux... Quand on compare 2 variables d’un type de base on compare leur valeur. Quand on compare 2 objet avec les opérateurs on compare leur référence (leur adresse en mémoire). Introduction de la méthode equals() pour les objets : s1.equals(s2) est vrai 10/11/2016
JavaEE - Ahmed Azough - FSDM
abc ....
abc ....
68
Longueur d’un objet String : o méthode int length() : renvoie la longueur de la chaîne
• String str1 = "bonjour"; • int n = str1.length(); // n vaut 7
Sous-chaînes o méthode 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 caractère d’une chaîne occupe la position 0 o le deuxième paramètre de substring indique la position du premier
caractère que l’on ne souhaite pas copier
10/11/2016
JavaEE - Ahmed Azough - FSDM
69
Récupération d’un caractère dans une chaîne o méthode char charAt(int pos) : renvoie le caractère situé à la
position pos dans la chaîne de caractère à laquelle on envoie se message • String str1 = "bonjour"; • char unJ = str1.charAt(3); // unJ contient le caractère 'j'
Modification des objets String o Les String sont inaltérables en Java : on ne peut modifier
individuellement les caractères d’une chaîne. o Par contre il est possible de modifier le contenu de la variable contenant la chaîne (la variable ne référence plus la même chaîne). • str1 = str1.substring(0,3) + " soir"; /* str1 contient maintenant la chaîne "bonsoir" */
10/11/2016
JavaEE - Ahmed Azough - FSDM
70
Les chaînes de caractères sont des objets : o pour tester si 2 chaînes sont égales il faut utiliser la méthode
boolean equals(String str) et non == o pour tester si 2 chaînes sont égales à la casse près il faut utiliser la méthode boolean equalsIgnoreCase(String str) • • • • • • •
10/11/2016
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
JavaEE - Ahmed Azough - FSDM
71
Quelques autres méthodes utiles o boolean startsWith(String str) : pour tester si une chaine de
caractère commence par la chaine de caractère str o boolean endsWith(String str) : pour tester si une chaîne de caractère se termine par la chaine de caractère 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 d’informations dans les documentations de l’API dans le package java.lang
10/11/2016
JavaEE - Ahmed Azough - FSDM
73
Les fonctions mathématiques les plus connues sont regroupées dans la classe Math qui appartient au package java.lang o les fonctions trigonométriques o les fonctions d’arrondi, de valeur absolue, ... o la racine carrée, la puissance, l’exponentiel, le logarithme, etc.
Ce sont des méthodes de classe (static) o double calcul = Math.sqrt (Math.pow(5,2) + Math.pow(7,2)); o o
10/11/2016
double sqrt(double x) : racine carrée de x double pow(double x, double y) : x puissance y
JavaEE - Ahmed Azough - FSDM
74
Java propose 4 niveaux de visibilité, mais seulement 3 mots-clés : private, protected, public ; la visibilité "package" est appliquée lorsqu'aucun mot-clé n'est utilisé.
10/11/2016
JavaEE - Ahmed Azough - FSDM
75
l'héritage multiple, une classe peut hériter en même temps de plusieurs super classes. EtreHumain
Carnivore
Herbivore
Lapin
Homme
Lion
Ce mécanisme n'existe pas en Java!!
Solution : les interfaces
10/11/2016
JavaEE - Ahmed Azough - FSDM
77
Une interface est un modèle pour une classe qui définit des contrats de services visibles depuis l’extérieur (API)
Une interface est un ensemble de constantes et de déclarations de méthodes abstraites.
Et dans une classe abstraite ? o Quelques méthodes peuvent être implémentées (pas abstraites) o Ne permet pas l’héritage multiple
10/11/2016
JavaEE - Ahmed Azough - FSDM
78
Toutes les classes qui implémentent cette interface possèdent les méthodes et les constantes déclarées dans celle-ci. Plusieurs interfaces peuvent être implémentées dans une même classe. «interface»
Frome
«interface»
Dessinable
caclulSurface() effacer(g: Graphics)
dessiner(Graphics g) effacer(Graphics g)
Cercle
Triangle Int x, y; dessiner(Graphics g) effacer(Graphics g)
10/11/2016
Int d,r; dessiner(Graphics g) effacer(g: Graphics g)
JavaEE - Ahmed Azough - FSDM
79
Pour traduire la relation d’implémentation, on écrit explicitement le mot clé implements suivi du nom de l'interface implémentée
une classe doit fournir une implémentation à chacune des méthodes abstraites définies dans l'interface qui doivent être déclarées publiques (private n’est 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 même manière qu'une classe peut avoir des sous-classes, une interface peut avoir des "sous-interfaces" Une sous interface o hérite (extends) de toutes les méthodes abstraites et des
constantes de sa « super-interface » o peut définir de nouvelles constantes et méthodes abstraites
10/11/2016
JavaEE - Ahmed Azough - FSDM
81
A la différence des classes, une interface peut l’extension 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 s’affranchir d’éventuelles contraintes d’héritage.
Lorsqu’on examine une classe implémentant une ou plusieurs interfaces, on est sûr que le code d’implémentation 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 très 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 : réels o double 64 bits : réels o char 16 bits : caractères o boolean 1 bit : booléen - vrai (true) ou faux (false) o void
Java EE - Ahmed Azough - FSDM
85
Int : espace mémoire 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; // déclaration d’une référence o aucun objet (aucune instance) de la classe Pays n’est créée o l’espace mémoire nécessaire à stocker un Pays n’est pas réservé. o p est une référence; une adresse mémoire
new Pays(); // création d’un objet o L’espace mémoire permettant de stocker un objet Pays est alloué.
Pays p = new Pays(); o
// affectation
la référence prend la valeur de l’adresse mémoire de l’objet créé avec new
Java EE - Ahmed Azough - FSDM
88
Pays p1 = new Pays(300000, 14243); o Création d’une instance de pays
Pays p2; o Déclaration d’une variable p2, on réserve
un espace mémoire pour la référence
p2=p1; o La valeur de la référence de p1 est
recopiée dans l’espace mémoire correspondant à p2 o p2 et p1 référence le même objet
copie de références, et non pas une copie d’objets Java EE - Ahmed Azough - FSDM
89
Exemple: o o o o o
Pays p1 = new Pays(300000, 14243); Pays p2; p2=p1; p2.surface = 400000; //(1) 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) {
i=i+1;
o o } o …
o int j=1; o augmente(j);
le résultat affiché:
o System.out.println(j);
1
Le passage de paramètres primitifs est toujours un passage par valeurs. Une fonction ne peut changer la valeur d’une variable de type primitif.
Java EE - Ahmed Azough - FSDM
92
Références: o static void augmenteSurface(Pays p){
p.surface=p.surface+1;
o o } o …
o Pays p1=new Pays(); o augmenteSurface(p1); o System.out.println(p1.surface);
le résultat affiché:
1
Une fonction permet de modifier les attributs d’un objet dont la référence est passée en paramètre
Java EE - Ahmed Azough - FSDM
93
Références: 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 référence une fonction, la référence ne peut être modifiée par la fonction
Java EE - Ahmed Azough - FSDM
94
Exemple : o Pays pouet() o { o o
Pays p = new Pays(); return p;
o } o … o Pays p1=pouet();
un objet créé à l’intérieur d’une fonction peut très bien perdurer après l’appel de cette fonction.
Java EE - Ahmed Azough - FSDM
95
Types primitifs: o int i = 1;
La condition est vraie
o int j = 1; o if (i == j) ...
Références: o Exemple 1:
• Pays p1 = new Pays(); • Pays p2 = new Pays(); • if (p1 == p2) ...
La condition est fausse
o Exemple 2
• Pays p1 = new Pays(); • Pays p2 = p1; • if (p1 == p2) ... Java EE - Ahmed Azough - FSDM
La condition est vraie
96
La recopie d’objets peut se faire en utilisant le mécanisme de clonnage. La classe doit implémenter l’interface clonnable et surcharger le fonction clone() Deux types de clones o Superficielle o En profondeur
Java EE - Ahmed Azough - FSDM
97
shallow copy: Duplique l’objet sans dupliquer les objets auquel il réfère original int x = [42] double y = [3.14] Scanner in = [ ] List data = [ ]
Scanner object ArrayList object
clone int x = [42] double y = [3.14] Scanner in = [ ] List data = [ ]
deep copy: Duplique l’objet ainsi que tout le graphe des objets référencés par cet objet
original int x = [42] double y = [3.14] Scanner in = [ ] List data = [ ]
Scanner object ArrayList object
clone int x = [42] double y = [3.14] Scanner in = [ ] List data = [ ]
Scanner object ArrayList object
Clonage superficiel: o Duplique l’objet sans dupliquer les objets auquel il réfère o Réservation de mémoire 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 l’objet ainsi que tout le graphe des objets référencés par cet objet Les attributs objets doivent être clonés
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 données 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 Améliorer la qualité et la performance des applications o Gérer un ensemble d'objets de types différents
Les structure collective sont utilisés pour o stocker, rechercher et manipuler des données o transmettre des données d’une méthode à une autre
Exemples : o un dossier de courrier : collection de mails o un répertoire téléphonique : collection de couples
noms / numéros de téléphone.
10/11/2016
JavaEE - Ahmed Azough - FSDM
103
2 hiérarchies principales : o Collection o Map : collections indexées
par des clés
10/11/2016
JavaEE - Ahmed Azough - FSDM
104
10/11/2016
JavaEE - Ahmed Azough - FSDM
105
Quelle structure
Map
Collection
Clé-valeurs
Valeurs Clés-valeurs ou valeurs ?
Oui
Map
Ordre important ?
Non
HashTable
Accès concurrent ?
Oui
Oui
séquentielle
+ indexée, + suppression
HashMap Type d’ordre ?
Tri de clés TreeMap
Nature d’insertion
Non
ArrayList Non
Ordre d’insertion
LinkedHashMap
LinkedList
Doublons ok ?
Non
Ordre important ?
Oui
HashSet Type d’ordre ?
List
Ordre d’Insertion
Set
LinkedHashSet
Tri de valeurs
TreeSet
Un objet qui est un groupe d'objets
Principales méthodes : o boolean add(Object) : ajouter un élément o boolean addAll(Collection) : ajouter plusieurs éléments 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'éléments o Iterator iterator() : pour le parcours (cf Iterator) o boolean remove(Object) : retrait d'un élément o boolean removeAll(Collection) : retrait de plusieurs éléments o boolean retainAll(Collection) : garder que l’intersection o int size() : nombre d'éléments o Object[] toArray() : transformation en tableau o Object[] toArray(Object[] a) : tableau de même type que a
10/11/2016
JavaEE - Ahmed Azough - FSDM
107
Ordonnées ou non
interface Set
o Ordre sur les éléments ? voir tri
Doublons autorisés ou non interface SortedSet
o liste (List) : avec doubles o ensemble (Set) : sans doubles
Besoins d’accès o Indexé o séquentiel
interface Collection
public Iterator iterator()
• via Iterator interface List
... get(int index) ... set(int index,Object o) 10/11/2016
JavaEE - Ahmed Azough - FSDM
108
Implémentant l'interface List o ArrayList
• Liste implantée dans un tableau : tableau dynamique • accès immédiat à chaque élément • ajout et suppression lourdes o LinkedList
• • • •
10/11/2016
liste doublement chainée accès aux éléments lourd, ajout et suppression très efficaces permettent d'implanter les structures FIFO (file) et LIFO (pile) méthodes supplémentaires : addFirst(), addLast(), getFirst(), getLast(), removeFisrt(), removeLast()
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 aList=new ArrayList(); LinkedList lList=new LinkedList(); public static void main(String args[]){ int N=10000; CompareList cL=new CompareList(); for(int i=0;i
Java EE - Ahmed Azough - FSDM
113
Implantent l'interface Set
Eléments non dupliqués o HashSet
• Pas d’ordre particulier • table de hachage • utiliser la méthode hashCode()et equals() • accès très performant aux éléments o TreeSet extends SortedSet • • • •
arbre binaire de recherche maintient l'ensemble trié en permanence Insertion plus lente méthodes supplémentaires • 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 l’ordre dans une TreeSet il faut o implémentent l'interface Comparable pour ses éléments o ou fournir un objet de type Comparator au constructeur de l'objet TreeSet pour
définir l'ordre de tri.
• TreeSet(Comparator super E> comparator) o Remarque : • super E> : n’importe quel ancêtre de E (classe mère) • extends E>: n’importe quel descendant de E (classe fille)
Pour assurer l’égalité dans une Set il faut: o Redéfinir equals() o et reféfinir 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 même exécution.
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 hSet = new HashSet(); 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;
10/11/2016
} @Override public int hashCode() { return intValue(); JavaEE - Ahmed Azough - FSDM }
120
L’interface Map correspond à un groupe de couples clés-valeurs
La clé est unique, contrairement à la valeur qui peut être associée à plusieurs clés (Dans la map il ne peut pas exister 2 clés égales)
Les deux classes qui Implemente l’interface: o HashMap,
constant
o TreeMap,
en log(n) ;
table de hachage ; garantit un accès en temps
arbre ordonné suivant les valeurs des clés avec accès
La comparaison utilise l’ordre naturel (interface Comparable) ou une instance de Comparator super K>
10/11/2016
JavaEE - Ahmed Azough - FSDM
121
HashTable o table de hachage o parcourt des éléments grâce aux clés en recourant à la
classe Enumeration o accès très performant aux éléments o Pas de clés ni de valeurs Null o Tread-safe: accessible par plusieurs thread simultanément sans risque de conflit de données.
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 éléments sont triés selon l’ordre des clés
10/11/2016
JavaEE - Ahmed Azough - FSDM
122
import java.util.*; public class TestTreeMap { public static void main(String args[]) { TreeMap tm = new TreeMap(); // 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 utilise la structure informatique nommée « table de hachage » pour ranger les clés
La méthode hashCode() (héritée de Object ou redéfinie) est utilisée pour répartir les clés 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 même exécution.
10/11/2016
JavaEE - Ahmed Azough - FSDM
124
• • • • • • • • • • •
Object put(K clé, V valeur) void putAll(Map extends K, ? extends V>map) void remove(Object key) boolean containsKey(Object key) boolean containsValue(Object val) Set> entrySet() V get(Object key) boolean isEmpty() Set keySet() int size() Collection values()
10/11/2016
JavaEE - Ahmed Azough - FSDM
ajouter et enlever des couples clé – valeur Rajouter tous les élément d’une Map map Supprimer l’élément dont la clé est key savoir si une table contient une clé key savoir si une table contient une valeur val Récupérer les éléments sous forme de set Récupérer la valeur dont la clé est key Savoir si la map est vide Récupérer toutes les clés Récupérer la taille de la map récupérer toutes les valeurs
125
keySet() : o
Récupérer les clés sous forme de Set avec la méthode iterator() de l’interface Set pour récupérer une à une les clés for (Iterator i = m.keySet().iterator(); i.hasNext(); ) System.out.println(i.next());
values() : o
Récupère les valeurs sous forme de Collection avec la méthode iterator() de l’interface Collection pour récupérer un à un les éléments for (Iterator i = m.values().iterator(); i.hasNext(); ) System.out.println(i.next());
entrySet(): o
récupère les entrées (clé-valeur) sous forme de Set> avec la méthode iterator() de l’interface Set> pour récupérer une à une les entrées 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
Méthode o public boolean contains(Object o) o interface Collection, redéfinie selon les sous-classes
Utilise l’égalité entre objets o égalité définie par boolean equals(Object o)
o par défaut (classe Object) :
• égalité de références o Personnaliser :
• redéfinir equals() dans chaque classe d’éléments
10/11/2016
JavaEE - Ahmed Azough - FSDM
127
Collections (avec un s) fournit des méthodes static pour o Trier une collection o Faire des recherches rapides dans une collection triée
Arrays fournit des méthodes 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 génériques
• Collections.sort(List l) • Arrays.sort(Object[] a,…)
Condition : collection d’éléments dont la classe définit des règles de comparaison o en implémentant l’interface java.lang.Comparable
• implements Comparable o en définissant la méthode de comparaison
• • •
10/11/2016
• public int compareTo(Object o) a.compareTo(b) == 0 si a.equals(b) a.compareTo(b) < 0 pour a strictement inférieur à b a.compareTo(b) > 0 pour a strictement supérieur à b JavaEE - Ahmed Azough - FSDM
129
N'utiliser que les méthodes communes Déclaration o Collection col = new ArrayList();
Parcours des éléments de la collection : Iterator o parcourir une collection en faisant abstraction de l'implémentation o accès indexé pas toujours disponible (méthode get()) o utiliser la méthode Iterator iterator() o se déplacer avec les méthodes next() et hasNext() o remove() permet de supprimer l’élément 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) add(E element)
O(n/4) O(1)
add(int index, E element)
O(n/4) O(1) : index = 0,
O(1) O(1) O(n) : dépassement de capacité (*) O(n/2)
remove(int index) Iterator.remove() ListIterator.add(E element)
O(n/4) O(1) O(1)
O(n/2) O(n/2) O(n/2)
(*) quand une arraylist est créée, une capacité initiale de 10 est attribuée, puis dès la capacité est dépassée: o o
une nouvelle liste est créée avec une nouvelle capacité est affectée : nouvelleCapacité=ancienneCapacité*1.5 tous les éléments de l’ancienne liste sont copiés dans la nouvelle
Java EE - Ahmed Azough - FSDM
132
2015/2016 Pr. Ahmed AZOUGH FSDM
Java EE - Ahmed Azough - FSDM
Nouveaux besoins : o Besoin d’applications portables, distribuées, transactionnelles o Besoin d’améliorer la sécurité, la réutilisabilité, la fiabilité et la
rapidité des applications. o Besoin de réaliser des applications de gestion de qualité professionnelle
Plus de contraintes: o Moins d’investissements o Moins de ressources
o Développer plus rapidement.
Java EE - Ahmed Azough - FSDM
134
Introduit (sous le nom de J2EE) par Sun en 1997 o Norme supportée par de nombreux acteurs puissants o Un standard de développement d'applications JAVA réparties, multi-
niveaux (n-tiers), basées sur des composants
La plate forme Java EE comprend : o un environnement Java standard o les spécifications du serveur d'application (l'environnement
d'exécution) o des services sous formes d'API Java
Java EE - Ahmed Azough - FSDM
135
Autres plates-formes de développement (C#, PHP5, .NET...). Les principaux avantages d’utiliser Java EE (et donc Java) sont la o Portabilité : les projets sont portables sur n’importe quel serveur
d’applications aux spécifications Java EE o Infrastructure importante: librairie fondamentales déjà en place : l’accès aux bases de données, l’envoi de mails, les transactions, la gestion de fichiers, la gestion d’images, le téléchargement, le chargement ou upload, la supervision du système ... o Standardisation (Java Community Process) • créée par Sun en 1998, regroupe Sun, IBM, Oracle, Borland, Nokia, Sony, la fondation Apache, ObjectWeb. • définir les spécifications des technologies, coordonner l'évolution du langage Java, • Chaque demande de modification est appelée une JSR (Java Specification Request o l’indépendance, la sécurité,…
Java EE - Ahmed Azough - FSDM
136
J2SE (Java 2 Standard Edition): o
J2ME (Java 2 Micro Edition): o
destiné au développement d'applications pour ordinateurs personnels et aux postes clients
prévu pour le développement d'applications embarquées sur terminaux mobiles (téléphone, 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 réseau o Client
• Initie le dialogue via une requête • Attend et reçoit des réponses • Interagit avec l'utilisateur (IHM) o Serveur
• Il écoute (N'initie jamais de dialogue ou d'activité) • Attend et répond aux requêtes des clients • Gère quels sont les clients autorisés à 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 sécurité : points d'accès aux données peu importants o administration simplifiée : elle est faite au niveau du serveur o évolutif : on peut facilement rajouter des clients
Inconvénients o Coût souvent élevé du serveur : c'est une grosse machine
ce n'est plus forcément le cas o Le serveur est critique : si il tombe en panne, rien ne fonctionne
on duplique les systèmes
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 très centralisée
Architecture 3 niveaux (3-tiers) o 1 serveur d'application (couche métier - middleware) o 1 serveur de données (couche données - SGBD) o et toujours des clients (couche de présentation)
permet une plus grand souplesse (indépendance SGBD/middleware) meilleure performance : répartition de la charge
Java EE - Ahmed Azough - FSDM
140
Architecture multi-niveaux o On spécialise encore plus les serveurs o toujours les serveurs middleware et SGBD o serveur d'accès (LDAP) o serveur métier (EJB)
o serveur de présentation (JSP) o etc.
Java EE - Ahmed Azough - FSDM
141
C'est une sorte d'architecture à 3 niveaux où la o couche présentation est divisée en 2 : o Le client léger :
• un navigateur Web • Un serveur Web avec JSP, servlets.
Java EE - Ahmed Azough - FSDM
142
Les spécifications 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 métiers 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 léger) o Les pages HTML générées par les composants Web serveur o Le navigateur qui affiche ces pages
Les applets (client semi-lourd) o un petite application JAVA qui s'exécute sur la machine virtuelle
installée sur le navigateur o c'est un compromis entre client Web et application o Aujourd'hui, le client Web léger est préféré
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. Léger): o Il faut installer le client application, pas le client Web o Le client application peut avoir une interface graphique plus
évoluée (avec Web 2.0 ce n'est plus trop le cas...) o Le client application gère toute la couche présentation, 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 générer des pages Web (HTML, XML) 3 types de technologies : o Servlets : classes permettant de répondre à une requête HTTP
(classes JAVA qui peuvent écrire du HTML) o JSP : sortes de pages Web exécutables (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 métiers : classes qui implémentent concrètement les objets du domaine applicatif (c'est le modèle de l'application). o Exemple : les classes Client, Compte, Prêt d'une banque
Ces composants de la couche métier vont gérer : o les traitements propres à la logique de l'application o la persistance des objets dans une BD o la réponse au programme client (le client application ou les
composants Web serveur)
Java EE - Ahmed Azough - FSDM
148
La communication entre les composants des différentes couches se fait par le réseaux (Internet) Les principaux protocoles internet utilisés: o HTTP : transfert des pages JSP, Servlet o RMI : pour invoquer méthodes d'objets distants o SOAP/WSDL : pour les services Web o SSL : pour les transferts sécurisés
Java EE - Ahmed Azough - FSDM
149
Un conteneur est l'environnement d'exécution des composants. Il gère l'interface entre les composants Java EE et les fonctionnalités bas-niveau o multi-threading, le cache mémoire, la sécurité, l'accès aux données
etc.
Les différents types de conteneurs : o Conteneur d'EJB (composants métier) o Conteneur Web (pour l'exécution 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 intégrante 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'exécuter les servlets, JSP.
Quelques serveurs Web Java EE o Apache Tomcat o Jetty : très léger
Java EE - Ahmed Azough - FSDM
153
Inclus un serveur Web Le serveur d'application fourni les services systèmes génériques : o La sécurité o La reprise sur panne o Les services transactionnel entre composants o La gestion des utilisateurs o L'accès aux sources de données
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 d’application (services systèmes génériques JavaEE)
Serveur Web (exécuter 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 développeur Infrastructure importante, Multitude de librairies proposées : Les éléments fondamentaux sont déjà en place : l’accès aux bases de données, l’envoi de mails, les transactions, la gestion de fichiers, la gestion d’images, le téléchargement, le chargement ou upload, la supervision du système...
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 métier) o Enterprise Java Beans – EJB o Java Persistance API - JPA
Java EE - Ahmed Azough - FSDM
159
Découpe l'application en 3 couches distinctes, : o Modèle: le traitement, le stockage et la mise à jour des données de
l'application; o Vue: l'interaction avec l'utilisateur et la présentation des données (mise en forme, affichage); o Contrôle: le contrôle des actions de l'utilisateur et des données.
Dans une application Java EE sans frameworks : o la couche Modèle est constituée d'objets Java ; o la couche Vue est constituée de pages JSP ;
o la couche Contrôle est constituée 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 invoquée lorsqu'un navigateur appelle l'URL qui lui est liée
Java EE - Ahmed Azough - FSDM
161
Java EE - Ahmed Azough - FSDM
162
Développer des pages web dynamiques, contenu est créé sur demande. o Exemple: obtenir la liste des articles d’une boutique pour un prix. o Les pages HTML sont générées dynamiquement en fonction de
critères spécifiques (prix, dates, recherches...).
La servlet est o gérée par le conteneur de Servlets Java EE o implémente l’interface javax.servlet.Servlet qui permet de gérer les
requêtes du client, dirigées vers la Servlet en question.
Le serveur reçoit une demande adressée à une Servlet sous la forme d’une requête HTTP. Il transmet alors la requête à la Servlet concernée par le traitement puis renvoie la réponse 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 transformées en servlet
Java EE - Ahmed Azough - FSDM
164
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> Ma première JSP Les nombres de 1 à 10 sont :
<% for (int i=1 ; i<=10 ; i++) { out.println(i+"
"); } %>
premiereJSP.jsp 10/11/2016
JavaEE - Ahmed Azough - FSDM
165
Une API qui recouvre les fonctionnalités souvent utilisées dans les pages JSP (Tag Library) Quelques fonctionnalités : o Itérateur et conditionnel o manipulation de documents XML
o internationalisation o accès aux bases de données o etc.
Java EE - Ahmed Azough - FSDM
166
Gestion de variables o Définition/affectation d'une variable ou propriété de portée limitée
o Suppression d'un objet
JavaEE - Master SIRM/M2ID - Ahmed Azough - FSDM
167
Plate-forme de création d'interfaces utilisateur Web Abstraction de JSP (on pourrait utiliser autre chose) Les composants principaux de JSF : o Représentation d'interfaces utilisateur (par composants) o Gestion des composants (états, événements, validation des
entrées, conversion des sorties) o Navigation inter-vues
Java EE - Ahmed Azough - FSDM
168
EJB = composant logiciel implémentant les méthodes et attributs du métier visée par l'application Les EJB sont des briques logicielles qui peuvent être utilisées de manière autonome ou avec d'autres EJB Les EJB peuvent être distribués sur différents serveurs Le conteneur d'EJB va gérer leur cycle de vie de manière transparente : o création, passivation, réactivation, destruction
Java EE - Ahmed Azough - FSDM
169
2 types d'EJB sont utilisés : 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 réalise des tâches de
manière asynchrone • le client dépose un message (JMS) dans une file d'attente, un EJB dit message sera instancié pour traiter ce message.
Un ancien : EJB entité qui représente des données persistantes o Remplacé par Java Persistance API depuis la version 3.0.
Java EE - Ahmed Azough - FSDM
170
Java DataBase Connectivity permet d'accéder à des bases de données relationnelles à partir de code JAVA Principales fonctionnalités o Abstraction du SGBD utilisé
• Il existe des drivers pour Oracle, MySQL, Postgres, DB2, etc. o L'accès aux bases de données
(connexion, session, etc.) o L'envoie de requêtes SQL (Statement, etc.) o L'exploitation des résultats (Curseur, etc.)
Java EE - Ahmed Azough - FSDM
171
Exemple o Exécuter la requête d’insertion si les paramètres 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 données o JDBC : pour accéder aux bases de données relationnelles o Java Persitence API : mapping relationnel-objet
Gestion distribuée d'objets o JNDI : pour donner des noms logiques aux ressources distribuées
(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 données) Permet de gérer 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 créer des adaptateurs entre systèmes d'information propriétaires d’entreprise (EIS) et systèmes Java EE. o Cela facilite l'intégration entre systèmes propriétaires et serveur
d'application Java EE o C'est générique à n'importe quel type de serveur Java EE o Mais c'est spécifique au système propriétaire
Un adapteur peut être exposé comme service Web o Les services du système propriétaire deviennent des services Web
accessibles par le serveur Java EE
Java EE - Ahmed Azough - FSDM
175
JNDI offre les fonctionnalités pour accéder au services de nommage et d'annuaires o Un service de nommage permet d'associer une entité technologique
à un nom unique (exemple : des données à 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 supplémentaires. • par exemple une adresse, des numéros de tél. à 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 instanciés sur des machines virtuelles différentes, distribuées sur le réseau Le développement coté serveur se compose de : o La définition d'une interface qui contient les méthodes qui peuvent
être appelées à distance o L'écriture d'une classe qui implémente 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 développement côté client se compose de : o L'obtention d'une référence sur l'objet distant à partir de son nom o L'appel à la méthode à partir de cette référence Client
Protocole RMI IIOP (Internet Inter-Orb Protocol)
Serveur
Couche visible Couche cachée
Java EE - Ahmed Azough - FSDM
Remote Reference Layer
177
JMS permet aux applications ou composants Java EE de s'envoyer des messages de manière asynchrone. o C'est comme le mail mais pour des machines
Cette API permet de créer, 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 indépendante du gestionnaire de transaction utilisé Rappel : une transaction est un ensemble atomique d'opérations élémentaires (tout ou rien) o Exemple du transfert entre 2 comptes : débit + crédit
une transaction peut être confirmée (commit) ou annulée (rollback) JDBC permet de gérer les transactions sur une base de données locale mais si les données sont réparties, il faudra alors utiliser les transactions JTA. JTA permet en effet de gérer les transactions distribuées qui font intervenir différentes SGBD, du serveur d'applis,via une seule interface commune et partagée
Java EE - Ahmed Azough - FSDM
179
Les services Web sont des technologies permettant aux applications d'interagir sur Internet indépendamment du langage des applis et de leur plateforme d'exécution Les services Web reposent principalement sur XML o XML RPC : Invocation de méthodes à distance o SOAP (Simple Object Acess Protocol) : protocole d'échange de données entre les
applications o WSDL (Web Service Description Language) - W3C : description des services Web (emplacements, méthodes, paramètres, valeur de retour, etc.)
UDDI (Universal Description Discovery and Integration) standard de
publication et de découverte de service Web basé notamment sur d'utilisation d'annuaires de services Web publication : mettre la description (WSDL) du service dans un registre o Découverte : recherche de service dans les annuaires o
Java EE propose un ensemble d'APIs pour les SW o Des APIs XML : pour traiter les documents XML o Des APIs spécialisées services Web qui s'appuient sur les premières.
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, représentation DOM o Transformations XSL (XSLT)
Java Architecture for XML Binding (JAXB) o Permet de relier un schéma XML à une représentation Objet JAVA.
Java EE - Ahmed Azough - FSDM
181
Java API for XML Web Services (JAX-WS) o S'appuie sur JAX et fournit des fonctionnalités pour utiliser des
services Web XML o traitement des requêtes et réponses SOAP, WSDL
Java API for XML Registries (JAXR) o Permet d'accéder à des registres tels que les annuaires UDDI
SOAP with Attachments API for Java (SAAJ) o API SOAP bas-niveau utilisée 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, métiers
La notion de conteneur o et de serveur d'application
Les API de Java EE o API Web : servlet, JSP etc.
o API métier : EJB et les autres : JDBC, JavaMail, XML...
Java EE - Ahmed Azough - FSDM
183