CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV Java Module Java Expert.
-
Upload
violette-lebeau -
Category
Documents
-
view
107 -
download
0
Transcript of CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV Java Module Java Expert.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT
UV Java
Module Java Expert
Module UV JavaPage 2 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Vue d’ensemble du langage Java Le langage Java : syntaxe et sémantique Programmation multi-tâche : les threads Accéder aux bases de données Composants réutilisables : le modèle MVC Développement Client/Serveur Présentation d’un IDE : WSAD / Forté / JBuilder Les serveurs d’applications J2EE Les Enterprise JavaBeans Ré-ingénierie d’applications Java
Module UV JavaPage 3 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Le Langage Java
Commentaires Variables et types primitifs Concepts de base Objet Classes et Objets Instructions et Expressions Constantes nommées Exceptions Tableaux
Module UV JavaPage 4 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Commentaires
/* commentaire multi- ligne */
// commentaire
/** javadoc commentaire multi-ligne */
Le compilateur javadoc:Le compilateur javadoc:
mkdir docsmkdir docscd docscd docsjavadoc ..\*.javajavadoc ..\*.javacd ..cd ..
Bonne pratique de mettre Bonne pratique de mettre les fichiers *.html dans un les fichiers *.html dans un
dossier séparédossier séparé(e.g. docs).(e.g. docs).
Module UV JavaPage 5 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Variables
Chaque variable doit avoir un typetype nomVariable
types de données primitifs– boolean soit true ou false
– char 16-bit charactère Unicode 1.1
– byte 8-bit entier( signé )
– short 16-bit entier( signé )
– int 32-bit entier( signé )
– long 64-bit entier( signé )
– float 32-bit réel ( IEEE 754-1985 )
– double 64-bit réel ( IEEE 754-1985 )
– void indique pas de type (méthodes uniquement)
Module UV JavaPage 6 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Exemples - Types Primitifs
Exemples de types de données primitifs :
int num = 4;
float f = 0.2f;
double d = 0.0;
char = ‘n’;
InitialisationInitialisationde la variablede la variable
InitialisationInitialisationde la variablede la variable
Déclaration Déclaration de la variablede la variable
Déclaration Déclaration de la variablede la variable
Module UV JavaPage 7 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Concepts de base
Classe et Objet– Classe
• un modèle, un concept, une famille d’entité du monde réel, des caractéristiques communes
• deux parties:– champs: données représentant l’état d’une (des) entité(s)– méthodes : modifie l’état de (des) entité(s)
– Objets • une entité possédant les caractéristiques du modèle
• instance de la classe
Module UV JavaPage 8 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les méthodes
Les Méthodes et les paramètres– méthodes - opérations d’une classe– paramètres - les arguments des méthodes
Cacher l’implémentation et l’état de l’objet– l’état ne peut être modifié que par les méthodes
• interface de l’objet
Encapsulation des données– cacher les données derrière les méthodes– l’état est inaccessible aux autres objets
Module UV JavaPage 9 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Définition d’une Classe
public class NomdelaClasse {type nomChamps1 ; // l’état // l’état type nomChamps2 ;…NomdelaClasse() // Le constructeur de la classe// Le constructeur de la classe{ initialiser les champs de la classe ;}… // les méthodes// les méthodes
typeRetour nomOpération ( ) // pas de paramètres// pas de paramètres{ liste des instructions ;} typeRetour nomOpération ( type paramètre , ...) { liste des instructions ;}...
}
public class NomdelaClasse {type nomChamps1 ; // l’état // l’état type nomChamps2 ;…NomdelaClasse() // Le constructeur de la classe// Le constructeur de la classe{ initialiser les champs de la classe ;}… // les méthodes// les méthodes
typeRetour nomOpération ( ) // pas de paramètres// pas de paramètres{ liste des instructions ;} typeRetour nomOpération ( type paramètre , ...) { liste des instructions ;}...
}
Module UV JavaPage 10 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Définition d’une Classe
class Point {double x, y;
public Point(){ x = 0; y = 0;}
public void setCoordonneeX(double p_x){ x = p_x;}public void setCoordonneeY(double p_y){ y = p_y;}
}
Module UV JavaPage 11 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
“Hello, World”(1)
objets String– l’unique paramètre de la méthode main– passage de données à l’application
System.out.println– affiche un message
main– méthode spéciale en Java : point d’entrée– main peut créer des objets, évaluer des expressions, invoquer
d’autres méthodes, etc.
class HelloWorld {// pas de champs// pas de champs
public static void main (String[] args) { System.out.println(“Hello, world”); }}
Module UV JavaPage 12 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
“Hello, World”(2)
Compilation > javac HelloWorld.java > dir HelloWorld.class HelloWorld.class– compilateur Java (javac) compile le code source dans un
bytecode Java
Exécution > java HelloWorld Hello, World
Module UV JavaPage 13 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les objets
Création d’objets (= instanciations)
– objets sont crées en utilisant le mot-clé new– ceci permet de leur allouer de la mémoire– les objets sont manipulés via leurs references
instanciation, instance, variable d’instance– la création d’un objet à partir d’une classe est appelée instanciation– les objets sont appelés les instances – les champs d’un objet sont des variables d’instance
Module UV JavaPage 14 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les objets :Invoquer les méthodes
Pour invoquer une méthode,– posséder une référence d’objet et le nom d’une méthode, séparés
par un point (.)
Pour retourner plus d’une valeur,– créer un objet qui contient les valeurs et retourner cet objet
récepteur objet (receiver)– L’objet sur lequel la méthode est invoquée
Module UV JavaPage 15 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les objets
class Dessin {
public static void main(String[] args) {
Point infGauche = new Point(); Point supDroit = new Point(); infGauche.setCoordonneeX(0.0) ;
infGauche.setCoordonneeY(0.0) ; supDroit.setCoordonneeX(10.0) ; supDroit.setCoordonneeY( 10.0) ; }}
Invocation Invocation de la méthodede la méthode
Invocation Invocation de la méthodede la méthode
Passage dePassage deparamètresparamètres
Passage dePassage deparamètresparamètres
InstanciationInstanciation=>appel =>appel
constructeurconstructeur
InstanciationInstanciation=>appel =>appel
constructeurconstructeur
Module UV JavaPage 16 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Objets : la référence this
référence implicite nommée “this” – une référence à l’objet courant (le récepteur)
class Point { public double x, y;
public void deplacer(double x, double y) {
this.x = x; this.y = y;
} }
class Dessin {public static void main(String[] args) {
Point infGauche = new Point(); Point supDroit = new Point(); infGauche.deplacer(1.0, 2.0) ;
}
Module UV JavaPage 17 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les objets
Les champs statiques (classe)– connus comme variables de classe– partagés par tous les objets de la classe– déclarés par le mot clé static
Les champs non-statiques (par objet)– chaque objet possède des champs distincts
Module UV JavaPage 18 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les objets
public class Point {
static int nombrePoints = 0;
public Point(){ nombrePoints++;}public static int getNombrePoints(){ return nombrePoints;}
}
• Modifications de la classe Point• Modifications de la classe Point
Module UV JavaPage 19 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les objets
nombrePoints = 1nombrePoints = 2
class Dessin {
public static void main(String[] args) { Point infGauche = new Point(); // creation des objets Point supDroit = new Point();
System.out.println( Point.getNombrePoints() ); }}
Module UV JavaPage 20 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Le Garbage Collector
Les objets Java non référencés sont automatiquement détruits par le garbage collector
Le garbage collector travaille en arrière plan et traque les références des objets
Possibilité de l’invoquer directement après la suppression d’une référence :
System.gc() ;System.gc() ;
Module UV JavaPage 21 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Constantes Nommées
Pourquoi le programmeur utilise des constantes nommées?– une forme de documentation– plus facile à maintenir les programmes
Constantes Nommées sont crées en – déclarant une variable static et final– indiquant sa valeur initiale
class Cercle {static final double PI = 3.1416;
}
Module UV JavaPage 22 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Types Référence (objets)
Les Types Référence :
– les classes ne sont pas de simples structures– passage par référence, pas par valeur– passage d’un objet à d’autres objets de l’application– les modifications sont répercutées dans l’objet
Module UV JavaPage 23 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
exemples - Types Référence
Button b;
b = new Button(“press me”);
String s = new String(“hello”);
String s[];
s = new String[20];Oui, un tableau est un type d’objet
String s[] = new String[20];
identique
Module UV JavaPage 24 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les instructions
Ecrites uniquement à l’intérieur du corps de la méthode { x = 4; }
Possèdent une visibilité 3 types: séquence, condition, itération
Module UV JavaPage 25 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les instructions - sequence
int x = 4;
int y = 5;
x += y;
String s = new String(“hello”);
//etc.
Module UV JavaPage 26 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les instructions - condition
if(testscore >= 90) { grade = ‘A’;} else if(testscore >= 80) { grade = ‘B’;} else if(testscore >= 70) { grade = ‘C’;} else if(testscore >= 60) { grade = ‘D’;} else { grade = ‘F’;}
if(age>0 && age<=20) x = 4;else if(age>20 && age<=40) x = 3;else x = 0;
Module UV JavaPage 27 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les instructions - condition
switch (month){ case 1: System.out.println(“January”); break; case 2: System.out.println(“February”) ; break; case 3: System.out.println(“March”); break; case 4: System.out.println(“April”); break; case 5: System.out.println(“May”); break; case 6: System.out.println(“June”); break; case 7: System.out.println(“July”); break; case 8: System.out.println(“August”); break; case 9: System.out.println(“September”); break; case 10: System.out.println(“October”); break; case 11: System.out.println(“November”); break; case 12: System.out.println(“December”); break; default: System.out.println(“Invalid Month”); break;}
Module UV JavaPage 28 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
while(true){ x += 2;}
Les instructions - itération
for(int ndx=0; ndx<100; ndx++){ y += 1;}
Equivalent à Equivalent à x=x+2; x=x+2;
do{ x += 2;} while(true)
Module UV JavaPage 29 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les instructions - itération
one: while(true){ two: while(false){ x += 1; // break or continue point } // after two
}// after one
Module UV JavaPage 30 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Expressions
Instructions qui produisent un résultat lorsqu’elles sont évaluées. – Exemple x += 2;
Les même opérateurs qu’en C, sauf…– pas de manipulations directes des pointeurs– pas de “*”, déréferencement, ou “sizeof”
Module UV JavaPage 31 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
ExpressionsExpressions
Opérateurs disponibles:
– Unaire … +, -, ++, --– Binaire … +, -, *, /, %, &, |, ^, ~, <<, >>, >>>– Relationnel … <, >, <=, >=, ==, !=, &&, ||
Module UV JavaPage 32 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les tableaux
Collection d’objets. – opérateur spécial [] pour accéder aux éléments du tableau– new et [] permettent de créer un tableau d’objets
collection ordonnée d'éléments (types de données ou objets)
Obligation d’instancier les objets à chaque position du tableau!
Book books[] = new Book[20];
Module UV JavaPage 33 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les tableaux
int[] arrayofInts; // data typesorint arrayofInts[];
arrayofInts = new int[15]; //indexes 0 to 14
String[] someStrings; // tableauouString someStrings[];
someStrings = new String[2];// très importantsomeStrings[0] = new String(“hello”);someStrings[1] = “goodbye”;
int[] someInts = new int[19];
Module UV JavaPage 34 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Objets String (1)
La classe String– propose une variété de méthodes – “non thread safe”– les objets String sont inchangeables
str = “redwood”; str = “oak”; /* nouvelle valeur à la référence d’objetréférence d’objet str, pas à
son contenucontenu */
La classe StringBuffer– propose des chaînes changeables– “thread safe”
Module UV JavaPage 35 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Objets String (2)
class BetterStringsDemo { public static void main(String[] args) { String myName = "Petronius"; String occupation = "Reorganization Specialist"; myName = myName + " Arbeiter"; myName += " "; myName += "(" + occupation + ")"; System.out.println("Name = " + myName); }}
Name = Petronius Arbeiter (Reorganization Specialist)
Module UV JavaPage 36 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Objets String (3)
public class sbedit { public static void main(String args[]) { StringBuffer sb = new StringBuffer("testing"); sb.replace(0, 4, "TEST"); System.out.println("after replace = " + sb); sb.delete(5, 7); System.out.println("after delete = " + sb); String s = sb.substring(0, 4); System.out.println("after substring = " + s); }}
public class sbedit { public static void main(String args[]) { StringBuffer sb = new StringBuffer("testing"); sb.replace(0, 4, "TEST"); System.out.println("after replace = " + sb); sb.delete(5, 7); System.out.println("after delete = " + sb); String s = sb.substring(0, 4); System.out.println("after substring = " + s); }}
after replace = TESTing after delete = TESTi
after substring = TEST
after replace = TESTing after delete = TESTi
after substring = TEST
Module UV JavaPage 37 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
if (oneStr.equals(twoStr))
foundDuplicate(oneStr, twoStr);
Les Objets String (4)
La méthode equalscompare deux objets String au niveau de leur contenu
Module UV JavaPage 38 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Charactères Unicode
Possibilité d’écrire le code Java en Unicode - un ensemble de caractères international et standard
Les caractères Unicode sont codés sur 16 bits et permettent une grande variété de symboles
Module UV JavaPage 39 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Extension des classes et d’interfaces
Module UV JavaPage 40 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Héritage d’une Classe
Héritage Simple uniquement !!!
public class SousClass extends SuperClass{
// champs & méthodesde la Sous classe
}
Super ClasseSuper Classe
Sous ClasseSous Classe
HéritageHéritageHéritageHéritage
Module UV JavaPage 41 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Etendre une classe
Class Point
x()
y()
clear()
double xdouble y
set()
Class Pixel
Pixel extends Point
x()
y()
clear()
double xdouble y
set()
Color color
Module UV JavaPage 42 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Extension d’une Classe(1)
Sous classe– héritage de tous les champs et méthodes de la super classe– Si une nouvelle implémentation d’une méthode héritée, alors
surcharge le comportement de la super classe
class Point { public double x, y; public void clear(){ x = 0.0; y = 0.0; }}
class Pixel extends Point {
Color color ;
public void clear() {
super.clear();
color = null; }
}
Module UV JavaPage 43 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
La Classe Object
Toutes les Classes qui n’héritent pas explicitement d’une autre classe, héritent de la classe Object
La classe Object est la classe générique pour tous les objets Java
La classe Object définit plusieurs méthodes
Object oref = new Pixel();oref = “Some String”
Module UV JavaPage 44 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Invoquer des Méthodes de la super classe
super vs this– super - référence quelque chose de la super classe– this - référence quelque chose de l’objet courant
Pour invoquer une méthode– utilise le type actuel de l’objet
Point point = new Pixel(); point.clear(); // utilise clear() de Pixel, pas de Point
class Pixel extends Point {
Color color ;
public void clear() {
super.clear();
color = null; }
}
Appel de la Appel de la méthode méthode clear de clear de
PointPoint
Module UV JavaPage 45 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
L’héritage Multiple
Contrairement à C++, Java ne peut pas effectuer d’héritage multiple, mais…
Java peut implémenter des interfaces Les interfaces sont:
– listes de méthodes qui définissent un ensemble de comportements
– Toutes classes qui implémentent une interface doiventdoivent implémenter toutestoutes les méthodes de cette interface!
Module UV JavaPage 46 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Interfaces(1)
Interfaces– similaire à une classe, mais avec uniquement les déclarations des
méthodes (pas de corps)
– les détails d’implémentation de ces méthodes ne sont pas nécessaires => contrat
– La classe qui implémente l’interface est responsable de l’implémentation spécifique
Les types de super classes sont :– super classe qui sont héritées (extends)
– interfaces qui doivent être implémentées (implements)
Module UV JavaPage 47 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
void processValues(String[] names, Lookup table) { for(int i=0; i<names.length; i++) { Object value = table.find(names[i]); if(value != null)
processValue(names[i], value);} }
Les Interfaces(2)
Code qui référence un objet Lookup et récupère les résultatsattendus => polymorphisme : table est un descendant de Lookup
interface Lookup {/** Retourne la valeur associée avec le nom, * ou null si il n’y a pas de valeurs*/ Object find(String nam);}
Module UV JavaPage 48 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
class SimpleLookup implements Lookup { private String[] Names; private Object[] Values;
public Object find(String name) { for( int i=0; i<names.length; i++ ) {
if( Names[i].equals(name) ) return Values[i];
} return null; // non trouvé } // ….}
Les Interfaces(3)
Module UV JavaPage 49 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Les exceptions
Module UV JavaPage 50 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Exceptions
Un problème survient dans l’application Le contrôle du programme est transféré directement à
une section désignée de traitement du problème throw et catch
– catch - gère le problème (traitement exception)– throw - Laisse quelqu’un d’autre gérer le problème
Module UV JavaPage 51 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Exceptions
Exemple d’utilisation de catch :
try{try{ openFile(“myfile.txt”);openFile(“myfile.txt”);}} catch(FileNotFoundException fnfecatch(FileNotFoundException fnfe) ) {{ // gère le problème de fichier// gère le problème de fichier
System.out.println(fnfe.toString());System.out.println(fnfe.toString());}} catch(IOException ioe)catch(IOException ioe) {{ // gère les erreurs d’entrées / sorties// gère les erreurs d’entrées / sorties
System.out.println(ioe.toString());System.out.println(ioe.toString());}} finallyfinally {{ // faire quelque chose de commun à toutes les // faire quelque chose de commun à toutes les
exceptionsexceptions}}
Module UV JavaPage 52 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Exceptions
Exemple d’utilisation de throw :
public class myClass throws IOException, public class myClass throws IOException, InterruptedException {InterruptedException {
// champs & méthodes dans myClass// champs & méthodes dans myClass
}}
Module UV JavaPage 53 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Exceptions
Java vérifie le type d’exceptions pour gérer l’erreur et choisir le traitement approprié (catch)
Les exceptions personnalisées– forcer le programmeur à considérer ce qu’il doit faire
lorsqu’une erreur se produit dans le code– exception est un objet, avec un type, des méthodes, et des
données
Module UV JavaPage 54 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Exceptions
L’objet exception– généralement dérivé de la classe Exception, qui propose un
champs String pour décrire l’erreur– toutes les exceptions étendent la classe Throwable, qui est
la super classe de Exception
Gestion de l’Exception– séquence try-catch-finally– finally - code exécuté du chemin normal d’exécution ou du
chemin d’exception => synchronisation, nettoyage avant fermeture, etc..
Module UV JavaPage 55 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Exceptions
class IllegalAverageException extends Exception { }
class MyUtilities { public double averageOf ( double[] vals, int i, int j ) throws IllegalAverageException {
try{ return ( vals[i] + val[j] ) / 2;} catch ( IndexOutOfBoundsException e ){
throw new illegalAverageException();}
}}
Module UV JavaPage 56 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Notion de paquetage
Module UV JavaPage 57 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Packages(1)
Solution pour le conflits de noms– utiliser “le prefixe package” devant chaque classe
• ce n’est pas une solution complète
Packages – possèdent un ensemble de types et de sous packages comme
membres– les noms de packages sont hiérarchiques et séparés par un point– utilisation d’un package
• utilise le nom qualifié du package
• import de tous les éléments du package
Module UV JavaPage 58 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Packages(2)
Utilisation d’une partie d’un package
class Date1 { public static void main(String[] args) { java.util.Datejava.util.Date now = new java.util.Date(); System.out.println(now);}
import java.util.Date;class Date2 { public static void main(String[] rgs){ Date now = new Date(); System.out.println(now);}
Utiliser le nom pleinement qualifié
importer tout ou partie
du package
Module UV JavaPage 59 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Packages(3)
Convention de nommage des packages – solution pour la gestion de la collision de noms– utilise le système de noms de domaines Internet (inversé)
pour préfixer le nom du package.• e.g., COM.acme.package, KR.ac.snu.oopsla.package
package com. ecommerce;
class Card { // ………… }
Module UV JavaPage 60 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Les applets
Module UV JavaPage 61 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Applets
Applet– programme Java qui s’exécute dans le navigateur du client– Faire une classe qui hérite de la classe Applet (Java 1) ou
JApplet (Java2)– Implémenter des méthodes init(), start(), stop(), destroy()– Il n’y a pas de méthode main– inclure l’Applet dans une page HTML
Module UV JavaPage 62 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.applet.*
Object
AppletStub
AppletContext
Component Container Panel Applet
java.awt
Module UV JavaPage 63 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.applet.Applet (1)
Une applet est une classe compilée héritant de java.applet.Applet Elle est diffusé par un serveur web dans une page HTML
<APPLET code='TiffViewer.class' width=50 height=50>
<PARAM name='imagesource' value='mon_image.tiff'>
</APPLET>
Elle est téléchargée puis exécutée par le browser. Elle est soumise au Security Manager du browser :
– pas d'accès en lecture ni en écriture sur le disque du browser.– connexion réseau uniquement sur le serveur d'origine.– pas de chargement de librairie native.– pas de lancement de processus, ...
Module UV JavaPage 64 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.applet.Applet (2)
Structure d'une applet
public class MyApplet extends java.applet.Applet
{
public void init() {...}
public void start() {...}
public void paint(java.awt.graphics g) {...}
public void stop() {...}
public void destroy() {...}
}
Module UV JavaPage 65 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.applet.Applet (3)
Diffusion de l'applet<HTML>
<BODY>
<OBJECT code="MyApplet"
codebase="http://www-lil.univ-littoral.fr/
~deruelle/applets/"
width=300 height=200>
<PARAM name="message" value="Hello World">
</OBJECT>
</BODY>
</HTML>
Module UV JavaPage 66 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.applet.Applet (4)
Quelques méthodes :
String msg = this.getParameter("message");
this.showStatus("Applet en cours");
Image img = this.getImage(new URL("http://www-lil.univ-littoral.fr/image.gif"));
AppletContext ctxt = this.getAppletContext();
ctxt.showDocument(new URL("http:// www-lil.univ-littoral.fr /page.html"), "frame");
Module UV JavaPage 67 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les Applets
Exemple d’Applet
public class Simple extends Applet { StringBuffer buffer; public void init() { buffer = new StringBuffer(); addItem("initializing... "); } public void start() { addItem("starting... "); } public void stop() { addItem("stopping... "); } public void destroy() { addItem("preparing for unloading..."); }
void addItem(String newWord) { System.out.println(newWord); buffer.append(newWord); repaint(); } public void paint(Graphics g) { g.drawRect(0, 0, size().width - 1, size().height - 1); g.drawString(buffer.toString(), 5, 15); }}
Module UV JavaPage 68 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Vue d’ensemble des paquetages Java
Module UV JavaPage 69 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.lang.*
Object
Boolean
Character
Class
Math
Number
Process
Runtime
String
StringBuffer
System
Thread
ThreadGroup
Throwable
Double
Float
Integer
Long
Runnable
Clonable
Module UV JavaPage 70 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.lang.String (1)
La classe String gère des chaînes de caractères (char). Une String n’est pas modifiable. Toute modification entraîne la création d'une nouvelle String. Les valeur littérales ("abc") sont transformées en String. L'opérateur + permet la concaténation de 2 String.
Module UV JavaPage 71 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Java.lang.String (2)
String s = "\u00catre ou ne pas \u00catre"; // s = "Être ou ne pas être"int lg = s.length(); // lg = 19 String s = "Java" + "Soft"; // s = "JavaSoft"
String s = (String) new URL("http://server/big.txt").getContent();
char[] data = {'J', 'a', 'v', 'a'};String name = new String(data);
String s = String.valueOf(2 * 3.14159); // s = "6.28318"String s = String.valueOf(new Date()); // s = "Sat Jan 18 12:10:36 GMT+0100 1997"int i = Integer.valueOf("123"); // i = 123
String s = "java";
if (s == "java") {...} // Erreurif (s.equals("java") {...} // Ok
Module UV JavaPage 72 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.lang.StringBuffer
La classe StringBuffer gère des chaînes de caractères (char) modifiable (setCharAt(), append(), insert())
La méthode toString() convertie une StringBuffer en String (pas de recopie, le même tableau est partagé, jusqu'à modification)
StringBuffer sb = "abc"; // Erreur: ne peut pas convertir String en StringBufferStringBuffer sb = new StringBuffer("abc"); sb.setCharAt(1, 'B'); // sb= "aBc"sb.insert(1, "1234); // sb = "a1234Bc"sb.append("defg"); // sb = "a1234Bcdefg"
String s = sb.toString(); // s = "a1234Bcdefg"sb.append("hij"); // sb = "a1234Bcdefghij" s = "a1234Bcdefg"
Module UV JavaPage 73 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.lang.Class
La classe Class représente une classe java. Elle n'est pas instanciable Elle permet de créer dynamiquement des nouvelles instances (mais seul le
constructeur par défaut est appelé)
Class classname = Class.forName("java.util.date"); Date d = (Date)classname.newInstance();
System.out.println("Date : " + d); // Sat Jan 18 12:10:36 GMT+0100 1997
Integer i = classname.getMethod("getMinutes", null).invoke(d, null);
Module UV JavaPage 74 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.util.*
Object
BitSet
Date
Observable
Random
StringTokenizer
Vector
Dictionary Hashtable Properties
Stack
Module UV JavaPage 75 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.util.Hashtable
Cette classe gère une collection d'objets au travers d'une table de hachage dont les clés sont des String et les valeurs associées des Object.
Hashtable ht = new Hashtable();
ht.put("noel", new Date("25 Dec 1997"));
ht.put("un vecteur", new Vector());
Vector v = (Vector)ht.get("un vecteur");
for(Enumeration e = ht.keys(); e.hasMoreElements();){String key = (String)e.nextElement;
...}
Module UV JavaPage 76 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.util.Properties
Cette classe gère une collection d'objets au travers d'une table de hachage dont les clés et les valeurs sont des String.
Properties p = new Properties();
p.put("é", "\'e");p.put("è", "\`e");p.put("ê", "\^e");
String s = p.getProperty("é");
for(Enumeration e = p.keys(); e.hasMoreElements();){String key = (String)e.nextElement;
...}
Module UV JavaPage 77 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.util.Vector
Cette classe gère une collection d'objet dans un tableau dynamique.
Vector v = new Vector();
v.addElement("une chaine");v.addElement(new date());v.addElement(new String[]);v.addElement(new Vector());
v.setElementAt("abcde", 2); System.out.println(v.elementAt(2)); // --> abcde
Module UV JavaPage 78 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.util.StringTokenizer
Cette classe permet de découper une String selon des séparateurs.
String str = "avion, bateau ; train ";
StringTokenizer st = new StringTokenizer(str, ";, ");
System.out.println(st.nextToken()); // --> avionSystem.out.println(st.nextToken()); // --> bateauSystem.out.println(st.nextToken()); // --> train
Module UV JavaPage 79 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.io.*
File
FileDescriptor
RandomAccessFile
OutputStream
StreamTokenizer
BufferedInputStream
DataInputStream
LineNumberInputStream
PushbackInputStream
BufferedOutputStream
DataOutputStream
PrintStream
ByteArrayInputStream
FileInputStream
FilterInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
ByteArrayOutputStream
FileOutputStream
FilterOutputStream
PipedOutputStream
InputStream
Object
Module UV JavaPage 80 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.io.File
Cette classe fournie une définition platform-independent des fichiers et des répertoires.
File f = new File("/etc/passwd");System.out.println(f.exists()); // --> trueSystem.out.println(f.canRead()); // --> trueSystem.out.println(f.canWrite()); // --> falseSystem.out.println(f.getLength()); // --> 11345
File d = new File("/etc/");System.out.println(d.isDirectory()); // --> true
String[] files = d.list();for(int i=0; i < files.length; i++)
System.out.println(files[i]);
Module UV JavaPage 81 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les flux java.io.File(Entrée|Sortie)
Ces classes permettent d'accéder en lecture et en écriture à un fichier.
FileInputStream fis = new FileInputStream("source.txt");byte[] data = new byte[fis.available()];fis.read(data);fis.close();
FileOutputStream fos = new FileOutputStream("cible.txt");fos.write(data);fos.close();
Module UV JavaPage 82 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les flux java.io.Data(Entrée|Sortie)
Ces classes permettent de lire et d'écrire des types primitifs et des lignes sur des flux.
FileInputStream fis = new FileInputStream("source.txt");DataInputStream dis = new DataInputStream(fis);
int i = dis.readInt();double d = dis.readDouble();String s = dis.readLine();
FileOutputStream fos = new FileOutputStream("cible.txt");DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(123);dos.writeDouble(123.456);dos.writeChars("Une chaine");
Module UV JavaPage 83 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.io.PrintStream
Cette classe permet de manipuler un OutputStream au travers des méthode print() et println().
PrintStream ps = new PrintStream(new FileOutputStream("cible.txt"));
ps.println("Une ligne");ps.println(123);ps.print("Une autre ");ps.print("ligne");ps.flush();ps.close();
Module UV JavaPage 84 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Ces classes permettent de lire et d'ecrire des objets, implémentant java.io.serializable, sur des flux.
// EcritureFileOutputStream fos = new FileOutputStream("tmp");ObjectOutput oos = new ObjectOutputStream(fos);oos.writeObject("Today");oos.writeObject(new Date());oos.flush();
// LectureFileInputStream fis = new FileInputStream("tmp");ObjectInputStream ois = new ObjectInputStream(fis);String today = (String)ois.readObject();Date date = (Date)ois.readObject();
Les flux java.io.Object(Entrée|Sortie) (2)
Module UV JavaPage 85 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Les flux java.io.Object(Entrée|Sortie) (2)
Par défaut, tous les champs sont sérialisés (y compris private) Cela peut poser des problèmes de sécurité 3 solutions :
– Ne pas implémenter Serializable– Réécrire les méthodes writeObjet() et readObject()– Le mot clé transcient permet d'indiquer qu'un champs ne doit pas être
serialisé.
Module UV JavaPage 86 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.*
Object
URLConnection
DatagramPacket
InetAddress
ServerSocket
Socket
URL
DatagramSocket
URLConnection
URLEncoder
Module UV JavaPage 87 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.Socket
Cette classe implémente une socket TCP coté client.
String serveur = " rondane.univ-littoral.fr";int port = 80;
Socket s = new Socket(serveur, port);
PrintStream ps = new PrintStream(s.getOutputStream());ps.println("GET /index.html");
DataInputStream dis = new DataInputStream(s.getInputStream());
String line;while((line = dis.readLine()) != null)
System.out.println(line);
Module UV JavaPage 88 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.ServerSocket
Cette classe implémente une socket TCP coté serveur.
int port_d_ecoute = 1234;ServerSocket serveur = new ServerSocket(port_d_ecoute);
while(true){
Socket socket_de_travail = serveur.accept();new ClasseQuiFaitLeTraitement(socket_travail);
}
Module UV JavaPage 89 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.DatagramSocket (1)
Cette classe implémente une socket UDP
// Client
Byte[] data = "un message".getBytes();
InetAddress addr = InetAddress.getByName(" rondane.univ-littoral.fr");
DatagramPacket packet = new DatagramPacket(data, data.length, addr, 1234);
DatagramSocket ds = new DatagramSocket();
ds.send(packet);ds.close();
Module UV JavaPage 90 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.DatagramSocket (2)
// Serveur
DatagramSocket ds = new DatagramSocket(1234);
while(true){
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);s.receive(packet);System.out.println("Message: " + packet.getData());
}
Module UV JavaPage 91 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.MulticastSocket (1)
Cette classe implémente une socket multicast (UDP)
// Client
Byte[] data = "un message".getBytes();
InetAddress addr = InetAddress.getByName(" rondane.univ-littoral.fr");
DatagramPacket packet = new DatagramPacket(data, data.length, addr, 1234);
MulticastSocket s = new MulticastSocket();
s.send(packet,(byte)1);s.close();
Module UV JavaPage 92 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.MulticastSocket (2)
// Serveur
MulticastSocket s = new MulticastSocket(1234);System.out.println("I listen on port " + s.getLocalPort());
s.joinGroup(InetAddress.getByName(" rondane.univ-littoral.fr"));
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
s.receive(packet);
System.out.println("from: " + packet.getAddress());System.out.println("Message: " + packet.getData());
s.leaveGroup(InetAddress.getByName("rondane.univ-littoral.fr"));s.close();
Module UV JavaPage 93 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
java.net.URL
URL url = new URL("http://www-lil.univ-littoral.fr/index.html");
DataInputStream dis = new DataInputStream(url.openStream());
String line;while ((line = dis.readLine()) != null)
System.out.println(line);
Module UV JavaPage 94 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Module Java
Quelques extensions
Module UV JavaPage 95 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Introduction à RMI
RMI(Remote Method Invocation : Côté Serveur)– conception d’une Interface distante
import java.rmi.*;import java.rmi.server.*;import java.io.Serializable;
public interface Task extends Remote { TaskObject getTaskObjcet() throws RemoteException;}
public interface TaskObject extends Serializable { type1 task1(); type2 task2(); ………..}
import java.rmi.*;
public class Server{ public static void main(String args[]){ if(System.getSecurityManager() == null){ System.setSecurityManager(new RMISecurityManager()); } try{ TaskImpl task = new TaskImpl(); Naming.rebind(“Task”, task); }catch(Exception e){ ………………..; }}
rmiregistryrmiregistry
Module UV JavaPage 96 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Introduction à RMI
RMI(Remote Method Invocation : Côté Client)– Utiliser les même interface que le serveur– le code suivant invoque l’objet distant
……………..if(System.getSecurityManager() == null) System.setSecurityManager()(new RMI…());String url = “rmi://server_address”;try{ Task t = (Task)Naming.lookup(“Task”); TaskObject to = t.getTaskObject();}catch(Exception e){ ………..}
rmiregistryrmiregistry
Module UV JavaPage 97 / 97
Deruelle LaurentCopyright © 2002 Laurent Deruelle
Java et XML
Java & XML– De nombreux analyseurs XML sont implémentés en Java– DOM : Utilise l’Object Model
• faire un modèle (comme un structure arborescente)
• propose des méthodes de parcours de l’arbre
– SAX : Analyseur XML orienté Evénements• Faire une classe de gestion des événements
• Faire des méthodes à invoquer lorsqu’un événement se produit
• Le parser SAX invoque une méthode appropriée lorsqu’un événement se produit