Upload
babacardiago
View
45
Download
2
Embed Size (px)
DESCRIPTION
poo
Citation preview
Programmation Oriente Objet en Java
M. L. BALDE 1re Anne IPSL
GENERALITES
Cest quoi Java ? Langage orient objet dvelopp par Sun en 1990. Java est portable.
Le compilateur Java gnre un pseudo-code (appel bytecode) excut par un interpreteur.
==> Langage ddi Internet grce lattrait des applets.
Les applets sont des programmes Java encapsuls dans des pages Web et qui permettent par exemple lanimation des pages oulinteractivit entre le serveur et le client Web.
Grande richesse des APIs proposes : interfaces graphiques, bases de donnes, rseau, ...
Syntaxe proche de C++
C++ / Java C++ : langage compil
la compilation du source permet dobtenir des instructions natives excutables. le code excutable obtenu est trs performant
Java : langage interprt qui utilise une machine virtuelle Machine virtuelle : simulation dun ordinateur rel La compilation dun source Java permet dobtenir un code excutable, le bytecode, par la machine virtuelle Java. La machine virtuelle Java est capable de comprendre les instructions contenues dans le bytecode et de les excutereffectivement dans lenvironnement rel courant.
Code Java.java
Compilateur Java pour PC
Compilateur Java pour PowerPC
Compilateur Java pour
Sun Solaris
Pseudo-code Java
indpendantde la plate-
forme.class
Interprteur Java pour PC
Interprteur Java pour PowerPC
Interprteur Java pour
Sun Solaris
Java est portable
JVM
Application Java
+
Fichiers
.class
Application
Kit de dveloppement Java (1)
3 choix sont possibles :
Choix 1 : Le JDK(http://www.oracle.com/technetwork/java/javase/downloads/index.html )
rfrence pour dvelopper en Java. comporte tous les outils indispensables la ralisation etl'excution d'un programme Java totalement gratuit ne comporte pas de vritable environnement de dveloppement.
Kit de dveloppement Java (2)
Choix 2 : Freeware ou shareware offrent une interface graphique au JDK des outils supplmentaires (gnrateurs d'interface...) exemples : Eclipse, NetBeans
Choix 3 : Environnement de dveloppement professionnel trs puissants trs chers exemples:Jbuilder de Inprise (anciennement Borland) Visual J++ de Microsoft
SYNTAXE DE BASE
Syntaxe de base : les commentaires
Les commentaires qui tiennent sur une ligne :// tout le reste de la ligne est un commentaire
Les commentaires qui sont multilignes :/* ceci est un commentaire
tenant sur deux lignes*/
Les commentaires destins au systme javadoc pour la gnration dune documentation API partir du code :
/** ceci est un commentaire spcial destin au systme JavaDoc */
Syntaxe de base : les identificateurs Mmes rgles de formation des identificateurs quen C. Recommandations dcriture : Java Code Conventions
(http://www.oracle.com/technetwork/java/index.html ) Le nom dune classe ou dune interface est fait dun mot ou
de la concatnation de plusieurs mots.Chacun commence par une majuscule : Etudiant,EtudiantBoursier, etc.
Les noms des mthodes et des variables commencent parune minuscule.Lorsquils sont forms dune concatnation de mots, chacun,sauf le premier, commence par une majuscule : afficher,toString(), nom, numeroInscription, etc.
Les constantes de classe (variables static final) sont critesentirement en majuscules : Integer.MAX_VALUE
Syntaxe de base : les types de donnes primitifs
byte (8 bits) short (16 bits) int (32 bits) long (64 bits) float (32 bits) double (64 bits) char (16 bits)
Possibilit de faire du casting comme en Cdouble d; int i;i = (int) d; // troncation de d en un entier
Syntaxe de base : Linstruction IF
Syntaxe:if (condition)
{ instruction1} else{ instruction2}
Exemple:
If ( x > 0){System.out.println(positif );
x-- ;}elseSystem.out.print(ngatif );
Syntaxe de base : Linstruction FORSyntaxe:
for (initialisation; condition; expression) {
instructions }
Exemple:
for (int i=0 ; i
Syntaxe de base : Linstruction While
Syntaxe:while (condition)
{ instructions }
do{ instructions }
while (condition);
Exemple:
int i = 10 ;while ( i>0){
System.out.println(i);i-- ;
}
Syntaxe de base : Linstruction Switch
Syntaxe:
switch (expression) { case valeur1: instructions; break; case valeur2: instructions; break; ... default: instructions }
Exemple:switch (i) {
case 10 : System.out.println(x gale 10 ) ; break ;
case 100 : System.out.println(x gale 100 ) ; break ;
default : System.out.println(x est diffrent de 10 et de 100 ) ;
}
CLASSES ET OBJETS EN JAVA
Dfinition dune classepublic class NomDeLaClasse {
dclarations des champs (attributs, proprits)dclarations des mthodes
}
public class Fraction {// champspublic int num ;public int den ;// mthodespublic void afficher () {
if (this.num % this.den == 0)System.out.println(this.num/this.den ) ;
else System.out.println(this.num+/+this.den) ;
}}
Le dsignateur (ou auto-rfrence) this
this est une pseudo-variable qui permet : de faire rfrence lobjet courant (celui quon est entrain de dfinir). ou de dsigner ses attributs ou ses mthodes.
this est gnralement utilis pour lever lambiguit sur unidentificateur lorsque le paramtre dune mthode porte lenom de lattribut de lobjet quil est charg de modifier.
Exemple :void fixerNumerateur (int num) {
this.num = num ; }
Utilisation dune classe
public class FractionUtil {public static void main (String[] args) {
Fraction f = new Fraction();f.num = 8; f.den = 5;f.afficher();
}}
Instanciation avec loprateur new
Java soccupe de la destruction des objets non utiliss(mcanisme de garbage collector). pas besoin de destructeurs.
Exemple dapplication Java avec le JDK
Le fichier source prend le nom de la classe quil dfinitavec lextension .java==> FractionUtil.java.
La compilation gnre un fichier binaire Java avec lextension .class.
javac FractionUtil.java==> FractionUtil.class
Ce fichier peut tre excut grce un interprteur java.java FractionUtil
Constructeurs spcifiques
public class Fraction {public int num, den ;
public Fraction (int n, int d) { this.num=n; this.den=d;} public Fraction (int n) { this.num=n; this.den=1;}
public Fraction inverser() {if (this.num == 0) return null;return new Fraction(this.den,this.num);
}}
Les divers constructeurs doivent avoir des signatures diffrentes (nombredarguments ou types des arguments diffrents).
La mthode main(1)
Premier sous-programme excut au lancement duneapplication Java.
Signature:public static void main (String[] args) {
}
Le paramtre est un tableau de chanes utilis pour lesarguments transmis partir de la ligne de commande.
La mthode main(2)
Exemple avec arguments:public class Somme{
public static void main(String[] args){int x = Integer.parseInt(args[0]);int y = Integer.parseInt(args[1]);System.out.println(la somme de +x+ et +y+ est:
+(x+y));}
}
Utilisation:java Somme 12 14==> la somme de 12 et 14 est: 26
Entres/Sorties simplifies
La mthode printf
La classe java.io.PrintStream contient une mthode printf qui fonctionne presque de la mme faon quen C.
Exemple : int degre = 28;System.out.printf("Il fait %d degres\n", degre); // %d indicateur de format pour des entiersSystem.out.printf("Le %2$s %1$s", "Java", "langage"); // le 2$ du %2$s indique quil sagit decrire le 2nd paramtre de // susbstitution en premier sur cet exemple,// le s indique quil sagit dune chane de caractres.
Comme en C on utilise des indicateurs de format commenantpar le symbole %. (Consulter la doc de la classe java.util.Formatter)
La classe java.util.Scanner
La classe Scanner permet de lire un flux de donnes formates.
Exemplepublic static void main(String arg[]){
Scanner entree = new Scanner(System.in);System.out.println("Donner votre prenom et votre nom:");String prenom = entree.next(); String nom = entree.next();System.out.println("Donner votre age:");int age = entree.nextInt();entree.nextLine();System.out.println("Donner une phrase:");String phrase = entree.nextLine();System.out.printf("%s %s, %d ans, dit%s\n", prenom, nom, age, phrase);
}
La classe java.util.Scanner
Offre des mthodes pour lire un flux de donnes formates :
int nextInt() : lecture de la prochaine valeur de type int.
long nextLong() : lecture de la prochaine valeur de type long.
float nextFloat() : lecture de la prochaine valeur de type float.
double nextDouble() : lecture de la prochaine valeur de type double.
String nextLine() : lecture de tous les caractres se prsentantdans le flux dentre jusqu une marque de fin de ligne et renvoide la chane ainsi construite. La marque de fin de ligne estconsomme, mais nest pas incorpore la chane produite.
La classe Scanner
Offre aussi toute une srie de mthodes boolennes pour tester le type de la prochaine donne disponible, sans lire cettedernire :
boolean hasNext() : Y a-t-il une donne disponible pour la lecture
boolean hasNextLine() : Y a-t-il une ligne disponible pour la lecture
boolean hasNextInt() : La prochaine donne lire est-elle de type int
boolean hasNextLong() : La prochaine donne lire est-elle de type long
boolean hasNextFloat() : La prochaine donne ` lire est-elle de type float
boolean hasNextDouble() : La prochaine donnee `a lire est-elle de type double
Visibilit des champs et mthodes
Le principe dencapsulation permet dintroduire celuide protection des attributs et mthodes.
Les Modificateurs de visibilit en Java : public : accessible par toutes les classes. Hrit par les sousclasses. private : accessible que par les seules mthodes de sa classe. Non hrit. protected : accessible par les classes du mme package. Hrit par les sous classes. par dfaut : accessible par les classes du mme package.Hrit par les sous classes seulement si elles se trouvent dansle mme package.
Visiblit : exemplepublic class Etudiant {
public String nom;private String numIns;
public Etudiant(String nom) {this.nom = nom;
}
// methodes accesseurspublic String getNumIns() { return this. numIns; }public void setNumIns(String numIns) {
if (numIns==null || numIns.length()!=11) return; this.numIns = numIns;
}
public void afficher(){System.out.println(etudiant :+ nom);
}}
Les variables (1)
variables dinstance : elles dterminent les attributs ou ltatdun objet donn (attributs dinstance)
variables de classe : elles dterminent les attributs ou ltatdune classe donne (attributs de classe) variables locales : dclares et utilises dans les dfinitions demthodes.
Syntaxe:
Type_de_la_variable identificateur_de_la_variable;
Exemples:
int annee;
String nom, prenom, adresse;
Les variables (2)
class Une_Classe {dclarations des variables de classe et dinstancepublic void une_Methode (dclarations des paramtres) {
dclarations des variables locales
}}
Rfrences et objets
Un objet doit tre considr comme accessible par rfrence.L'identificateur d'un objet dsigne une rfrence l'objet etnon l'objet lui-mme. Ce sont ces rfrences qui sont affectes ou passes commearguments lors des appels de mthodes. Exemple:
Fraction f1, f2;f1 = new Fraction();f2 = f1;
f1 et f2 sont des variables qui se rfrent au mme objet.Cet objet existe en un seul exemplaire mais avec deuxrfrences.
Les membres de classe
Les attributs ou mthodes sont accessibles: soit via une instance de la classe: membres dinstance soit via la classe elle-mme: membres de classe oumembres statiques.
Les membres de classe :sont introduits par le mot staticexistent en un seul exemplairesont partags par toutes les instances de la classe.
Ils ne peuvent tre invoqus que sur la classe.
Attributs de classe
Ils sont initialiss au moment du chargement de la classe.
Ils sont modifiables par tous les objets de la classe.
Toute modification est rpercute au niveau des autresobjets.
Ils permettent dviter la duplication de certains types dattributs (comme les constantes) dans chaque instance.
ExempleLattribut out est un attribut de la classe java.lang.System
System.out.println( Salut! );
Les mthodes de classe
Elles ne peuvent pas modifier des attributs dinstance. Lorsquune mthode ne manipule que des attributs (oumthodes) de classe, elle doit tre dclare statique.
Exemples exit() est une mthode statique de la classejava.lang.System
System.exit(); sqrt() est une mthode statique de la classe java.lang.Math
System.out.println(Math.sqrt(100));
Les tableaux (1)
Les tableaux se comportent un peu comme des objets.
Deux syntaxes pour la dclaration:TypeDesElements[ ] NomDuTableau;
TypeDesElements NomDuTableau[ ];
Exemple :int[ ] tab_entiers; ou int tab_entiers[ ];String[ ] tab_chaines;
Le type des lments du tableau peut tre une classeexistante.
Les tableaux (2)
InstanciationTypeDesElements[ ] NomDuTableau = new TypeDesElements[TailleDuTableau];Exemple
int[ ] tab_entiers = new int[15]; String[ ] chaines = new String[3];
MatricesTypeDesElements[ ][ ] NomDuTableau; TypeDesElements NomDuTableau[ ][ ];
Exempleint [ ][ ] matriceou int matrice [ ][ ];
Les tableaux (3)
Exemple de saisie dun tableau:
public static void main(String[] args) {
int[] t = new int[5];
Scanner entree = new Scanner(System.in);
for (int i=0; i
Dclaration dun type numr (1/2)
qualifieurs enum identif { identif, identif, ... identif }
Exemples :
public enum PointCardinal { NORD, SUD, EST, OUEST }
public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE }
Ces dclarations crent 2 nouveaux types publics PointCardinalet JourSemaine.
Elles doivent tre crites dans 2 fichiers spars, respectivement nomms PointCardinal.java et JourSemaine.java.
Dclaration dun type numr (2/2)
La dclaration :public enum PointCardinal { NORD, SUD, EST, OUEST }
est presque identique :
public class PointCardinal {public static final PointCardinal NORD = new PointCard();public static final PointCardinal SUD = new PointCard();public static final PointCardinal EST = new PointCard();public static final PointCardinal OUEST = new PointCard();
}
Un type numr est donc une classe dont les seulesinstances sont les valeurs du type numr.
La classe java.lang.Enum
En fait, tout type numr est sous-classe de la classejava.lang.Enum.
java.lang.Enum introduit quelques mthodes : String name(), String toString()
Exemple :public enum PointCardinal {
NORD, SUD, EST, OUEST;public String toString() {
return "";}
}
Type numr et switch
Une expression de type enum peut piloter un switch :
PointCardinal direction;...switch(direction) {
case NORD: System.out.print(PointCardinal.NORD.name());
break;case SUD:
System.out.print(PointCardinal.SUD.name()); break;
default:
...}
Type numr : Exemplepublic enum PointCardinal {
NORD, SUD, EST, OUEST ;
public String toString() {return "";
}
public static void main(String arg[]){PointCardinal direction = PointCardinal.NORD;
javax.swing.JOptionPane.showMessageDialog(null,direction.name() + " "+ direction);
}
}
Emballage et Deballage pour les classes enveloppes
Les donnes de types primitifs (byte, short, int, long, float, double, char et boolean), ne sont pas des objets en Java.
A chaque type primitif, correspond une classe dite classe enveloppe : Byte, Short, Integer, Long, Float, Double, Character et Boolean.
Chaque instance dune de ces classes se compose dune unique donne membre qui est une valeur du type primitif que linstance enveloppe.
Emballage et Deballage pour les classes enveloppes
Emballage : opration consistant construire un objet enveloppant une valeur v dun type primitif
int v;... // emballage de vInteger unInteger = new Integer(v);
Dballage : opration inverse....// dballage de vv = unInteger.intValue();
Emballage et Deballage pour les classes enveloppes
Java (depuis la version 5) permet de confondre dans lcriture une variable et lobjet du type enveloppe associ :
l o un objet est attendu on peut mettre un type primitif
l o un type primitif est attendu on peut mettre un objet
Le compilateur dduit le type de la variable (par exemple int ou Integer) selon le contexte.
Emballage et Deballage pour les classes enveloppes
Exemple:
Integer n = 1;
n = n + 5;
String s = n.toString();
System.out.println(s);
if (n == 10)
Integer n = new Integer(1);
n est considr comme un int
n est considr comme un objet de type Integer
if (n.intValue() == 10)
La boucle for each
La boucle for each
Nouvelle (Java 5) syntaxe de la boucle for pour parcourir leslments dun tableau ou dune collection.
Exemple 1:
// somme des elements dun tableaudouble[ ] t = {3.2, 5.3, 6.2}; double som = 0;for (double d : t)
som += d;// d va prendre successivement les valeurs contenues dans le tableau
La boucle for each
Exemple 2: affichage dune matrice.
double[][] matrice = new double[NL][NC];...for (double[] ligne : matrice) {
for (double x : ligne)System.out.print(x + " ");
System.out.println();}
PACKAGES
Les packages : dfinition et utilitDfinition Un package est un ensemble de classes et d'autres packagesregroups sous un nom. C'est l'adaptation du concept de librairie ou de bibliothque.
Utilit Servent structurer lensemble des classes et interfaces. Augmentent la lisibilit des applications en structurantlensemble des classes selon une arborescence.Faciltent la recherche de lemplacement physique des classes Empchent la confusion entre des classes de mme nom etc.
Les packages : gnralits
Lors de la dfinition d'un fichier source Java, on peut prciserson appartenance un package en utilisant le mot-cl package:
package mon_package;
Toutes les classes dfinies dans ce fichier font ainsi partie dupackage mon_package.exemple: package formesGeo;
Si la classe Carre se trouve dans un package formesGeo, son nom complet est formesGeo.Carre; le fichier Carre.class doit tre plac dans unrpertoire nomm formesGeo.
Les packages : importation
Pour pouvoir utiliser une classe d'un package dans un autrefichier, il faut l'importer :
import nom_du_package.nom_classe;import formesGeo.Carre;
On peut importer toutes les classes d'un package en mmetemps:
import nom_du_package.*;import java.io.*;
Le package java.lang qui gre les types de donnes et leslments de base du langage est automatiquement import.
Les packages : compilation
Pour compiler une classe contenant linstruction suivante, ilfaut indiquer le chemin au compilateur.
import monPackage.ClasseImportee;
soit : Option classpath de javacjavac classpath chemin_du_fichier MaClasse.java
soit : Variable denvironnement CLASSPATHdoit contenir le chemin daccs au rpertoire racine du
package.
Les packages : excution
Pour excuter la commande java monPackage.MaClasse :
soit : Se placer dans le rpertoire contenant le rpertoiremonPackage
soit : Utiliser loption classpath de la commande java
soit : Variable denvironnement CLASSPATHdoit contenir le chemin daccs au dossier monPackage.
Les packages prdfinis (1/2)
Les API Java sont organises en deux parties :
Java Core API : API de base implante dans tout interprteurJava. Ces classes appartiennent au package java.
Java Standard Extension API : extensions normalises parSun/Ora au travers dinterfaces et implantes par les diteurs.Ces classes appartiennent aux packages javax et org.
Documentation sur toutes les classes Java disponible sur le siteofficiel de Java :http://www.oracle.com/technetwork/java/index.html
Les packages prdfinis (2/2)
Les classes sont regroupes par thmes dans des packages. Exemples :
java.lang : types de donnes et lments de base du langage (classesObject, String, Boolean, Integer, Float, Math, System (fonctionssystme), Runtime (mmoire, processus), etc.) java.util: structures de donnes et utilitaires (Dates, Collections, etc.) java.io: bibliothque des entres / sorties, fichiers. java.net: bibliothque rseau java.awt: librairie graphique java.applet: librairie des applets. java.security: scurit (contrle daccs, etc.) java.rmi: applications distribues. java.sql: acces aux BD (JDBC)
EXCEPTIONS
Les exceptions (1/7)
Une exception est un signal qui indique qu'un vnement exceptionnelcomme une erreur est survenue au cours de lexcution dun programme :
FileNotFoundException survient lorsquon tente douvrir un fichierinexistant IOException survient lorsquon fait une lecture incorrecte, lorsquunfichier ne peut tre ferm, etc.
Java permet de grer les erreurs par exception, i.e. de prvoir dans sonapplication des blocs de code o sera traite systmatiquement, telle outelle condition d'erreur.
Une exception est un objet de la classe java.lang.Exception.
Pour les grer, on utilise l'instruction try.
Les exceptions (2/7)
try {// bloc d'instructions protger
}
catch ( Exception e) {// traitement de l'exception
}
finally {// excuter quelque soit la faon dont on sort du try
}
Les exceptions (3/7)
Un bloc d'instructions try permet de regrouper une ou plusieursinstructions de programme (appel de mthode, instructions de contrle,etc.) o des exceptions peuvent se produire et tre traites.
Un bloc try est suivi d'instructions catch et finally.
catch spcifie le traitement associ aux exceptions, i.e ce que l'on fait siune exception se produit (afficher un message d'erreur par exemple).
finally est excut inconditionnellement, quelle que soit la faon dont onsort du bloc try (pour fermer par exemple un fichier ouvert dans le bloc try).
Les exceptions (4/7)
import java.io.FileReader;public class lectureFichier {
public static void main(String[] args) {try{
FileReader f=new FileReader(fic.txt);System.out.println(Le fichier existe !);f.close();System.out.println(Le fichier a ete ferme !);
}catch(FileNotFoundException fe) {
System.out.println(Fichier inexistant !);}catch(IOException ie) {
System.out.println(Erreur de fermeture !);}
}}
Les exceptions (5/7)Chaque mthode susceptible de gnrer une exception qui lui est propredoit la dclarer dans son en-tte. On utilise l'instruction throws pour cela :
public class Pile {final int taille_max = 100 ;private int sommet ;private int[ ] elements ;
public void empiler (int x) throws ErreurPilePleine {if (sommet == taille_max)
throw new ErreurPilePleine()else elements[++sommet] = x ;
}}
class ErreurPilePleine extends java.lang.Exception {
ErreurPilePleine(){ System.out.println(Pile Pleine);}
}
Les exceptions (6/7)Controle de saisie avant de calculer la factorielle dun nombre :
public static void main(String arg[]){String s = null;do
try {s = JOptionPane.showInputDialog("Entrez un nbre: ");if (s != null) {
long n = Long.parseLong(s);long factN = factorielle(n);JOptionPane.showMessageDialog(null, n + "! = "+
factN);}
}catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null, s + " n'est pas un entier");
}
Les exceptions (7/7)
Controle de saisie avant de calculer la factorielle dun nombre :
finally {reponse = JOptionPane.showConfirmDialog(null, "Voulez-
vous quitter ?");}
while (reponse == JOptionPane.NO_OPTION);}
// methode factoriellepublic static long factorielle(long n){if (n
La classe Scanner et InputMismatchException
Scanner gnre une exception de type InputMismatchExceptionen cas derreur de saisie. Cela permet de contrler la saisie:
java.util.Scanner entree = new java.util.Scanner(System.in);int x = 0;for ( ; ;) {
System.out.print("Donnez un entier x: ");try{
x = entree.nextInt(); break; }catch (java.util.InputMismatchException ime) {
entree.nextLine();System.out.print("Erreur - Recommencez"); }
}System.out.print("x = " + x);...
HERITAGE
Lhritage
Lhritage permet de dfinir une nouvelle classe partird'une (ou plusieurs) classe(s) existante(s).
Les classes sont souvent organises en hirarchies;toutes les classes Java hritent de la classejava.lang.Object.
Java nautorise que lhritage simple.
Lhritage multiple est remplac par la notion dinterface.
Lhritage simple : exempleEtudiant
+nom : StringnumIns : String
setNumIns()getNumIns()
afficher()
EtudiantBoursier
+bourse : double
Lhritage simple : exemple
public class EtudiantBoursier extends Etudiant {
public double bourse;
public EtudiantBoursier(String nom, double bourse) {super(nom); //appel au constructeur Etudiant(String)this.bourse = bourse;
}public EtudiantBoursier(String nom) {
this(nom, null); //appel au constructeur prcdant}
public void afficher() { // redefinitionSystem.out.println(etudiant :+ this.nom);System.out.println(bourse :+ this.bourse);
}}
La pseudo-variable super
En faisant hriter une classe dune autre, on peutdfinir une mthode dont lidentificateur est le mmeque celui de sa classe mre.
masquage de la mthode de la classe mre.
La pseudo-variable super permet daccder lamthode masque de la classe mre.
La pseudo-variable super : exemple
Maison
-surface : int-adresse : String
+saSurface()+sonAdresse()
Pice
-surface : int-locataire : String
+saSurface()+sonLocataire()
La classe Object
Toutes les classes hritent de la classe Object qui contient certainesproprits et mthodes intressantes permettant, par exemple :
Connatre la classe dun objet : getClass() Comparer des objets : equals() Afficher des objets : toString()
Exemple :public class Fraction {
public int num, den ;public Fraction (int n, int d) { this.num=n; this.den=d;} public String toString() {return this.num + / + this.den;
}}
Exemple dhritage : compte et compte depargne(1/3)
class Compte {
private String id;private float solde;
public Compte (String id, float depot){this.id = id;this.solde = depot;
}public String getId (){
return this.id;}public float getSolde (){
return this.solde;}
}
Exemple dhritage : compte et compte depargne (2/3)
class CompteEpargne extends Compte {private float taux;private int annees;public CompteEpargne (String id, float depot, float taux){
super (id, depot);this.taux = taux;
}public void setAnnees (int annees){
if (annees >= 0) this.annees = annees;}public int getAnnees(){ return this.annees; }public float getTaux(){ return this.taux; }public float getSolde (){
float solde = super.getSolde();for (int i=0; i
Exemple dhritage : compte et compte depargne (3/3)
class CalculInterets{public static void main(String arg[]){
Compte compte1 = new Compte("A01", 100000f);CompteEpargne compte2 = new CompteEpargne("E99", 100000f,
0.1f);compte2.setAnnees(5);
Compte c;String s = "L'argent qui dort ne rapporte rien:";c = compte1;s += "\n solde du compte n " + c.getId() + ":" + c.getSolde();
c = compte2;s += "\n solde du compte n " + c.getId() + ":" + c.getSolde();javax.swing.JOptionPane.showMessageDialog(null,s);}
}
Les classes abstraites (1/2)
Elles permettent de dfinir linterface des mthodes.
Elles contiennent au moins une mthode abstraite.
Exemple :
abstract class FormeGeometrique {abstract double perimetre();abstract double surface();
}
Les classes abstraites (2/2)
Une mthode abstraite est prcde du mot-cl abstract et nepossde pas de corps.
Elles ne peuvent pas tre instancies.
Elles doivent tre drives en sous-classes fournissant uneimplmentation toutes les mthodes abstraites.
Elles sont dfinies par lintroduction du mot-cl abstract.
Les interfaces : gnralits (1/2)
Classes abstraites dont linstanciation serait sans intrt. Ellesne peuvent donc pas tre instancies.
Une interface Java contient une liste de mthodes abstraitesque doit implmenter une classe pour rendre un service.
Exemple :
public interface FormeGeometrique {public double perimetre();public double surface();
}
Les interfaces : gnralits (2/2)
Lorsquune classe implmente une interface, elle doitimplementer toutes les mthodes dfinies dans linterface.
Une classe peut implmenter une ou plusieurs interfaces.
Exemple :
public class Rectangle implements FormeGeometrique {public double larg, long;...public double perimetre() {return 2*(larg+long);}public double surface() {return larg*long;}
}
Une inetrface peut hriter dautres interfaces (hritage simple).
Les interfaces : dclaration
Une interface Java se dclare comme une classe en faisantprcder son identificateur du mot-cl interface.
public interface UneInterface {// dclaration des champs et des mthodes
}
Tous les champs sont des constantes dont les modificateurssont implicitement public static final
Toutes les mthodes sont publiques et non implmentes; ellesutilisent implicitement des modificateurs public abstract et sontsuivies dun ;.
Les interfaces : implmentation
Une interface doit tre implmente par une ou plusieursclasses.
Une classe peut implmenter une ou plusieurs interfaces.
Lorsquune classe implmente une interface, elle doitimplementer toutes les mthodes dfinies dans linterface.
class UneClasse implements UneInterface {
// champs et mthodes de la classe UneClasse
// et implmentation des mthodes de linterface UneInterface
}
Les interfaces : exemple
public interface FormeGeometrique {public double perimetre();public double surface();
}
public class Rectangle implements FormeGeometrique {public double larg, long;public Rectangle(double long, double larg) {
this.long=long; this.larg=larg; }public double perimetre() {return 2*(larg+long);}public double surface() {return larg*long;}
}
Les interfaces : exemple
public class Carre implements FormeGeometrique {public double cote;public Carre(double cote) {this.cote = cote;}public double perimetre() {return 4*cote;}public double surface() {return cote*cote;}
}public class Cercle implements FormeGeometrique {
public final static double PI = 3.1416; public double rayon;public Cercle (double rayon) {this.rayon = rayon;}public double perimetre() {return 2*PI*rayon;}public double surface() {return PI*rayon*rayon;}public void afficher() {
System.out.println(cercle de rayon+rayon); }}
Les interfaces : exemple
public class Figures {public static void main (String[] args) {
FormeGeometrique[] formes;formes = new FormeGeometrique[3];formes[0] = new Cercle(10);formes[1] = new Carre(4);formes[2] = new Rectangle(5,8);for (int i=0;i
COLLECTIONS
Limites des tableaux (1 /2)
Simples programmer et peu gourmands en mmoire, les tableaux sont utiliss pour grer des ensembles dont la taille est
connue lavance.
Les tableaux sont inadquats pour grer une quantitimportante dinformations du mme type lorsque leur nombre
nest pas connu lavance.
Limites des tableaux (2/2)
Les tableaux ne sont pas redimensionnables.
Linsertion dun lment au milieu dun tableau nest pas aise.
La recherche dun lment dans un grand tableau est longue silnest pas tri.
Les indices pour accder aux lments dun tableau doivent treentiers.
Collections Java La package java.util fournit un ensemble dinterfaces et de classes facilitant la manipulation de collections dobjets.
Une collection est un objet qui sert stocker dautres objets. Interfaces sur les collections organises en deux catgories : Collection et Map.
Collection
Set List
SortedSet
Map
SortedMap
Collections Java : interfaces Collection : groupe dobjets o la duplication peut tre autorise.
Linterface Collection spcifie des mthodes comme add, remove, addAll, removeAll, contains, containsAll, size, etc.
Set : objets collections non ordonnes et sans doublons. SortedSet est un Set tri.
List : collections ordonnes autorisant des doublons. Chaque objet possde une position dans la squence et linterface offre des mthodes permettant laccs direct un objet donn.
Map : tableaux associatifs (dictionnaires) permettant de retrouver une information grce un index. SortedMap est un Map tri.
Collections Java : implmentations
Classes dimplmentation
Table de Hachage
Tableau (Vecteur)
Arbre Liste chane
Interfaces
Set HashSet TreeSet
List ArrayList LinkedList
Map HashMap TreeMap
Les classes du package java. util ArrayList : pour ajouter la suite les uns des autres des lments dans un ensemble ordonn.
LinkedList : pour insrer de nombreux lments au milieu dun ensemble ordonn.
HashSet : pour grer un ensemble dont chaque lment doittre unique. Les performances de recherche sont amliores.
TreeSet : pour grer un ensemble tri dobjets uniques. HashMap : pour accder aux lments dun ensemble grce une cl.
TreeMap : pour grer un ensemble dlments tri dans lordrede leur cl daccs.
Collections Java : Itrateurs Les collections peuvent tre parcourues laideditrateurs : interface Iterator.
Exemple :import java.util.*;public class test_iterateur {
public static void main (String[] args) {Set ufrs = new TreeSet();ufrs.add(sat); ufrs.add(seg); ufrs.add(sjp);// itererIterator iter = ufrs.iterator();while (iter.hasNext()) {
String ufr = (String) iter.next();System.out.println(ufr);
}}
}
La boucle for each et les collections
La boucle for each permet le parcours dune instance duneclasse implmentant linterface java.util.Iterable.
// affichage des elements dun ensembleSet ufrs = new TreeSet();ufrs.add("sat"); ufrs.add("seg"); ufrs.add("sjp"); ufrs.add("lsh");
for (Object s : ufrs) System.out.print(s + " ");
// s va prendre successivement les valeurs contenues dans ufrs
Collections Java : MapLinterface Map offre des mthodes permettantditrer sur les cls, les valeurs et sur les paires:
Map m = new HashMap();// sur les clsfor (Iterator i = m.keySet().iterator(); i.hasNext();)
System.out.println(i.next());// sur les valeursfor (Iterator i = m.values().iterator(); i.hasNext();)
System.out.println(i.next());// sur les paires cl/valeurfor (Iterator i = m.EntrySet().iterator(); i.hasNext();) {
Map.Entry e = (Map.Entry)i.next();System.out.println(e.getKey() + / + e.getValue());
}
Exemple : grer un glossaire avec HashMapimport java.util.HashMap;import javax.swing.JOptionPane;
public class Glossaire {public static void main (String arg[]){String definitionInstance = "Objet cree a partir d'une classe";String definitionCollection = "Instance d'une classe gerant un ensemble
d'elements";String definitionSousClasse = "Classe heritant d'une autre classe";
HashMap glossaire = new HashMap();glossaire.put("instance",definitionInstance);glossaire.put("collection",definitionCollection);glossaire.put("sous classe",definitionSousClasse);glossaire.put("classe derivee",definitionSousClasse);
Exemple : grer un glossaire avec HashMapwhile (true){
String motCherche = JOptionPane.showInputDialog("Que cherchez vous ?");if (motCherche == null) System.exit(0);String definition = (String)glossaire.get(motCherche);
if (definition != null) {JOptionPane.showMessageDialog(null, motCherche + " : " + definition, "Resultat de la recherche",JOptionPane.INFORMATION_MESSAGE);
} else {JOptionPane.showMessageDialog(null, motCherche + " : " + "non defini", "Resultat de la recherche",JOptionPane.WARNING_MESSAGE); }
}}
}
Gnricit
Classes gnriques
On peut dfinir et utiliser des classes et des mthodesgnriques.
Exemple : grer un couple dobjets
public class Couple{A elt1, elt2;
Couple(A elt1, A elt2) {this.elt1 = elt1;this.elt2 = elt2;
}
Classes gnriques
public static void main(String args[]){Couple c = new Couple("Adja","20");String nom = c.elt1;Integer age1 = Integer.parseInt(c.elt2);Integer age2 = (Integer)c.elt2; // ne passe pas la compilation
}}Principal intrt :permettre au compilateur deffectuer des contrles de type plus nombreux et plus fins.
Cela augmente la qualit et la fiabilit des programmes.
Gnricit et collections
Prsente encore plus dintrt avec lutilisation des collections.
Toutes les interfaces et les classes collections de la bibliothque Java ont t remplaces par une nouvelle forme paramtre (depuis la version Java 5):
Collection, Vector, Iterator, etc.
Gnricit et collectionsExemple 1:
public class Ufrs{public static void main(String arg[]){
ArrayList ufrs = new ArrayList();ufrs.add("sat");ufrs.add("seg");ufrs.add("sjp");ufrs.add("lsh");for (String ufr : ufrs)
System.out.print(ufr + " ");System.out.println();
}}
Gnricit et collectionsExemple 2 : public class Frequence {
public static void main(String[] args) {
Map tab = new TreeMap();
for (String mot : args) {
Integer freq = tab.get(mot);
tab.put(mot, freq == null ? 1 : freq + 1);
}
System.out.println(tab);
}
}
Mthodes gnriques
Les mthodes peuvent elles aussi dpendre dune liste de types paramtres.qualifieurs type-du-rsultat nom-mthode (args)
Exemple 1:import java.util.*;
public class MethodesGeneriques{static void ecrire(A a){
System.out.println(a);}
}
Mthodes gnriques
public static void main(String args[]){Scanner entree = new Scanner(System.in);System.out.println("Donner votre nom:");String nom = entree.nextLine();ecrire(nom);System.out.println("Donner votre age:");int age = entree.nextInt();ecrire(age);
}}
Mthodes gnriques
Exemple 2:static void echangerGenerique(CoupleGen c){
T tmp;tmp = c.elt1;c.elt1 = c.elt2;c.elt2 = tmp;
}
public static void main(String args[]){CoupleGen mots =
new CoupleGen("club","info");echangerGenerique(mots);ecrire(mots);
}
Mthodes gnriques
class CoupleGen{
A elt1, elt2;
CoupleGen(A elt1, A elt2){this.elt1 = elt1;this.elt2 = elt2;
}
public String toString(){return "(" + elt1 + "," + elt2 + ")";
}}
Mthodes avec nombre darguments variable
Mthodes avec nombre darguments variable
Permet dappeler une mme mthode avec une listedarguments variable.
Exemple 1 :public class MultiArgs {
static void ecrireLesMots (String ... mots){for (String mot : mots)
System.out.print(mot + " ");System.out.println();
}public static void main(String arg[]){
ecrireLesMots("UGB UFR SAT");ecrireLesMots("M2ITIC INFO );
}}
Mthode avec nombre darguments variable
Exemple 2 :public class MultiArgs {
static double moyenne(String nom, Number... notes) {int nombre = notes.length;if (nombre > 0) {
double somme = 0;for (Number x : notes)
somme += x.doubleValue();return somme / nombre;
}return -1;}public static void main(String arg[]){
double moy = moyenne("Amy",10, 12.4, 18);System.out.println(moy);
}}
Importation de membres statiques
Importation de membres statiques
Classiquement, on nimporte que des noms de classes. On peut aussi importer des membres statiques (Java 5).
Exemple :
import static java.lang.System.out;import static java.lang.Math.random;
public class TestImportStatic {public static void main(String arg[]){
out.println("voici un nb aleatoire :"+random());}
}
INTERFACES GRAPHIQUES
Interfaces graphiques : AWT & Swing AWT (Abstract Window Toolkit)permet de crer des fentres (Frame), dutiliser : des boutons de commandes (Button),
des zones de texte (TextField),
des zones de liste,
de dessiner, etc.
lapparence de certains composants dpend de la plate-forme dexcution (utilise des objets de lenv. dexcution).
Interfaces graphiques : AWT & Swing Swing propose des composants indpendants de la plate-forme (crits en Java)analogues ceux de AWT JFrame,
JButton,
JTextField, etc.
avancs : JTabbedPane (onglets),
JTree (arbres), etc.
Ma premire application avec IHM (GUI)import java.awt.Frame;
public class SimpleGUI
{
public static void main(String args[]){
Frame cadre = new Frame(Ma premiere fenetre);
cadre.setSize(300,200);
cadre.setVisible(true);
}
}
Hirarchie des composants AWT
Component
ContainerButton
Window Panel
AppletFrameDialog
FileDialog
TextField
JComponent
Comp. Swing
Interfaces graphiques : Composants
classe java.awt.Component
Comportement dun objet Component :
se dessiner (paint) dfinir / obtenir taille et position du composant (setSize, setMinimumSize, etc.) dfinir / obtenir proprits graphiques (setBackground, setForeground, setFont, etc.) tre source dvnements
Interfaces graphiques : Conteneurs (1 /2)
classe java.awt.Container
Espaces graphiques destins recevoir plusieurs composants (boutons, zones de texte, autres conteneurs ) :
Frame,Panel, Dialog, Applet
Interfaces graphiques : Conteneurs (2/2)
La mise en page dun conteneur est confie un gestionnaire qui se charge du placement des
composants ajouts par la mthode add().
Les panneaux (Panel) doivent tre placs dans un espace existant (autre conteneur, browser Web).
Interfaces graphiques : Fentres (1 /2)
java.awt.Window : sous-classe de Container
Possibilit dtre visible sans ncessiter dtre incluse dans un autre composant.
Sous-classes de Window :
java.awt.Dialog (botes de dialogue)
java.awt.Frame (cadres)
Interfaces graphiques : Fentres (2/2)
Cadre : fentre avec bord, titre et, ventuellement, menu.
Une application contient, en gnral, un seul cadre
utilis pour modifier la taille et la forme de lIHM.
Bote de dialogue : fentre utilise pour afficher un message, poser une question, etc.
Interfaces graphiques : Exemple 1import java.awt.*;public class Fenetre extends Frame {
public Panel p; public TextField texte; public Button bouton1, bouton2;public Fenetre() {
super(exemple de fenetre);p = new Panel(); this.add(p);p.add( new Label(nbre a multplier par 2) );p.add( texte = new TextField(20) );p.add( bouton1 = new Button(doubler) );p.add( bouton2 = new Button(fin) );this.pack();
}public static void main(String[] args){
Fenetre f = new Fenetre(); f.show();}
}
Interfaces graphiques : vnements Modle des vnements de Java (1.2)
source
couteurLutilisateur agit sur un composant
La source notifie lvnement
Lcouteur senregistre auprs de la source
Objet Evt
Interfaces graphiques : vnementsUn vnement fait interagir trois objets :
Lobjet source de lvnement (bouton cliqu)
Un objet (classe ActionEvent) mmorisant lvnement (date, source, )
Un couteur dvnement (listener) capable de traiter lvnement (senregistre en implmentant
linterface correspondante)
Interfaces graphiques : types dvnements (1 /2)
ActionListener : actions (clic sur un bouton, choix dansune liste, etc.) sur un composant.
Linterface contient une seule mthode appele
lorsquune action est effectue.
void actionPerformed(ActionEvent e)
MouseListener : vnements souris (clics)
MouseMotionListener : mouvements de la souris
Interfaces graphiques : types dvnements (2/2)
KeyListener : vnements clavier (touchepresse/relche).
FocusListener : acquisition ou perte focus par un composant.
WindowListener : actions sur une fentre.
Interfaces graphiques : Exemple 1 (suite)import java.awt.*; import java.awt.event.*;public class Fenetre extends Frame implements ActionListener{
public Panel p; public TextField texte; public Button ...public Fenetre() {
bouton1.addActionListener(this); // la fenetre devient ecouteurbouton2.addActionListener(this);
}public void actionPerformed(ActionEvent e){
if (e.getSource()==bouton1){double x = Double.parseDouble(texte.getText());
x = 2*x; texte.setText(+x);}else if (e.getSource()==bouton2){
this.dispose(); System.exit(0); // destruction fenetre et arret progr.}
}public static void main(String[] args){ }
}
Interfaces graphiques : Exemple 2 : Dtecter la souris
Les vnements souris sont notifis par les mthodes suivantes de linterface MouseListener :
o void mousePressed (MouseEvent e)o void mouseReleased (MouseEvent e)o void mouseClicked (MouseEvent e)o void mouseEntered (MouseEvent e)o void mouseExited (MouseEvent e)
Un couteur dvnements souris senregistre par :o void addMouseListener (MouseListener l)
Interfaces graphiques : Exemple 2 (suite)import java.awt.*; import java.awt.event.*;
public class CadreSensible extends Frame implements MouseListener {CadreSensible(){
addMouseListener(this);setBounds(100, 100, 300, 200);setVisible(true);
}
public void mouseClicked(MouseEvent e){System.out.println("Clic en ("+ e.getX() + "," + e.getY() + ")");
}
public void mousePressed (MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}
public static void main(String args[]){new CadreSensible();
}}
Interfaces graphiques : Gestonnaires de positionnement (1 /4)
La disposition des composants dans un conteneur est assure par un gestionnaire de positionnement qui se charge de les placer correctement.
Cela permet de rester indpendant de la plate-forme et dviter des calculs fastidieux.
Le gestionnaire par dfaut est FlowLayout qui se contente de placer les composants les uns derrire les autres.
Interfaces graphiques : Gestonnaires de positionnement (2/4)
Avec FlowLayout on peut utiliser un paramtre indiquant le type d'alignement utiliser :
FlowLayout.RIGHT pour droite, FlowLayout.LEFT pour gauche, FlowLayout.CENTER pour centr qui est l'alignement par dfaut.
Interfaces graphiques : Gestonnaires de positionnement (3/4)
BorderLayout permet de placer les composants en faisant rfrence une position de type gographique.
Pour ajouter un composant, on utilisera la mthode add en prcisant la position gographique :
North, South, East, West ou Center.
Interfaces graphiques : Gestonnaires de positionnement (4/4)
GridLayout permet de placer les composants dans une grille forme de cases de mme taille.
Chaque composant prend la taille d'une case. Le constructeur de GridLayout attend 2 paramtres : nb de lignes et nb de colonnes de la grille.
Lors de leur ajout avec la mthode add, les composants remplissent alors la grille ligne par ligne.
Interfaces graphiques : Gestonnaires de positionnement
(exemple FlowLayout)import java.awt.*;public class TestFlowLayout1 extends Frame{
public TestFlowLayout1(){setLayout(new FlowLayout());for (int i=1; i
Interfaces graphiques : Gestonnaires de positionnement (exemple BorderLayout)
public class Fenetre extends Frame {public Panel p, p_sud; public TextField texte; public Button ...
public Fenetre() {super(exemple de fenetre);p = new Panel(new BorderLayout()); this.add(p);p.add( new Label(nbre a multplier par 2),BorderLayout.NORTH);p.add( texte = new TextField(20) ,BorderLayout.CENTER);
p_sud=new Panel(new FlowLayout());p.add(p_sud, BorderLayout.SOUTH);
p_sud.add( bouton1 = new Button(doubler) );p_sud.add( bouton2 = new Button(fin) );this.pack();
}
}
Interfaces graphiques : Gestonnaires de positionnement (exemple GridLayout)
import java.awt.*;public class TestGridLayout extends Frame{
public TestGridLayout(){setLayout(new GridLayout(3,2));for (int i=1; i
Interfaces graphiques : Gestonnaires de positionnement (autre exemple GridLayout)
import java.awt.*;public class TestGridLayout1 extends Frame{public TestGridLayout1(){
setLayout(new GridLayout(3,2));Panel p;for (int i=1; i
Interfaces graphiques : Composants Swing de saisie et de choix
JTextField : champ de saisie simple (zone de texte)JPasswordField : champ de saisie pour les passwordsJTextArea : champ de saisie multiligneJButton : boutonJCheckBox : boite cocherJRadioButton : bouton radioJList : liste de valeursJComboBox : liste droulanteetc.
Interfaces graphiques : Composants Swing arbre et tableau
JTree : arbre hirarchiqueJTable : tableau capable dafficher diffrents types de donnes
Interfaces graphiques : Composants Swing conteneurs
JFrame : fentre avec bord et barre de titreJWindow : fentre sans dcorationJDialog : bote de dialogueJPanel : panneau videJTabbedPane : panneau ongletsJSplitPane : panneau partag (horizontalemt ou verticalemt)JScrollPane : panneau ascenseurEtc.
Interfaces graphiques : Composants Swing botes de dialogue
JFileChooser : choix de fichierJOptionPane : dialogues standards : message, confirmationEtc.
Interfaces graphiques : Composants Swing menus
JMenuBar : barre de menuJMenu : menuJMenuItem : lment de menuJPopupMenu : menu contextuelEtc.
Interfaces graphiques : Exemple Swing (1 /3)
Interfaces graphiques : Exemple Swing (2/3) import java.awt.*; import javax.swing.*;class Authentification {public static void main (String[] args){
JFrame fen = new JFrame("Identification");Container p = fen.getContentPane();p.setLayout(new BorderLayout());
JPanel p_nord = new JPanel();p.add(p_nord,BorderLayout.NORTH);p_nord.add(new JLabel("Login :"));p_nord.add(new JTextField(10));
JPanel p_centre = new JPanel();p.add(p_centre,BorderLayout.CENTER);p_centre.add(new JLabel("Mot de passe :"));p_centre.add(new JPasswordField(10));
Interfaces graphiques : Exemple Swing (3/3)
JPanel p_sud = new JPanel();p.add(p_sud,BorderLayout.SOUTH);p_sud.add(new JButton("Valider"));p_sud.add(new JButton("Annuler"));
fen.pack();
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setVisible(true);} }
APPLETS
Les applets (1)
Une applet est un programme Java interactif, prsent sur leserveur Web, qui peut tre tlcharg sur le client Web ets'excute dans une page Web.
Elle permet d'amliorer la prsentation de cette dernire oude remplir une fonction spcifique.
Les applets sont considres comme des objets des pagesHTML qui les contiennent.
Les applets n'ont pas accs, comme les applications Java, toutes les ressources du systme sur lequel elles s'excutent.
Les applets (2)
Pour des raisons de scurit, une applet ne peut pas:
- lire ou crire le systme de fichiers de la machine oelle s'excute,
- excuter des programmes,
- communiquer avec d'autres machines, part leserveur partir duquel elle a t tlcharge.
Les applets (3)
Pour pouvoir crer et excuter une applet, il faut crire deux fichiers diffrents:
un fichier source .java et un fichier .html.
Exemple: une applet qui affiche "Bonjour Bonjour.java Bonjour.html
Les applets (4)Bonjour.java:
import java.awt.*;import javax.swing.*;
public class Bonjour extends JApplet{
public void init {Container p = getContentPane();p.setLayout(new FlowLayout());Jlabel label = new Jlabel(Bonjour!);p.add(label);
}}
Les applets (5)
Bonjour.html
Une applet simple
Voici le rsultat :
La classe JApplet
Se trouve dans le package javax.swing
Hrite de la classe java.awt.Applet.
La classe Applet tend la classe Panel qui tend laclasse Container.
Les objets JApplet sont des conteneurs.
La classe Applet (1)
La classe Applet est une classe drive de la classe java.awt.Component qui dcrit les objets graphiques.
Elle surcharge des mthodes de cette classe:
- paint(), update() (pour dessiner et afficher dans la fentrede l'applet)
- et handleEvent() (gestion d'vnements relatifs la souriset au clavier).
La classe Applet (2)
Elle contient aussi quatre mthodes pour traiter les vnementscorrespondant la vie de l'applet:
init(): appele au moment du chargement de l'applet
start(): pour dmarrer l'excution de l'applet
stop(): pour arrter l'excution de l'applet
destroy(): pour librer les ressources ou interrompre certaines activits (animation par exemple)
La balise HTML Applet (1)
Elle permet d'introduire une applet dans un document HTML. Lorsque le browser rencontre la balise Applet, il fait charger le bytecode (fichier .class) depuis le serveur Web.
On peut passer des arguments une applet en utilisant la baliseHTML PARAM et la mthode getParameter() de Applet.
Applet avec paramtres (1)
import java.awt.*;import java.applet.*;
public class Bonjour extends Applet{
String s1, s2;public void init() {
s1 = getParameter("param1");s2 = getParameter("param2");
}public void paint (Graphics g){
g.drawString(s1 + " " + s2, 50, 20);}
}
Applet avec paramtres (2)
...
LA PERSISTANCE EN JAVA
La persistance des donnes
Fait dexister dans le temps pour un objet.
Capacit dun objet rester en ltat lorsquil est sauvegard, puis recharg plus tard.
Traite des aspects de stockage et de rcupration des donnes applicatives.
La persistance en Java
JDBC: API Java permettant laccs aux SGBDR. Difficile utiliser.
Srialisation.
Mapping objet-relationnel (ORM).
Srialisation (1 /2)
Sauvegarde de ltat dun objet en mmoire sur un flux de donnes (vers un fichier, par exemple).
Ce concept permettra aussi de reconstruire, ultrieurement, l'objet en mmoire l'identique de ce qu'il pouvait tre initialement partir de la sauvegarde: dsrialisation.
Srialisation (2/2)
Mthode simple et transparente.
Pour quun objet Java soit srialisable, il faut quil implmente linterface java.io.Serializable et possder des attributs srialisables.
Mcanisme rarement utilis car pas de langage de requtes, ni dinfrastructure professionnelle.
Mapping objet- relationnel
Laccs aux donnes est dlgu un outil externe : Frameworks : Hibernate, Toplink. APIs: JDO, JPA.
Avantage : propose une vue OO dune structure de donnes relationnelles.
Les outils de mapping O-R mettent en correspondance les objets et les donnes de la base.
JDBC
JDBC
Java Database Connectivity
API Java permettant laccs aux SGBDR (MS Access, SQL Server, MySQL, PostgreSQL, Oracle)
Fonctionne en client/serveur (appl. Java / SGBD)
Les classes de lAPI JDBC se trouvent dans le package java.sql
JDBC : architecture
Application Java
JDBC Driver Manager
JDBC-ODBC
bridge driver
JDBC Driver
Pour MySQL
JDBC Driver
pour Oracle
ODBC driver
MS Access
SQLServer
MySQL Oracle
JDBC : architecture
Application Java
JDBC Driver Manager
JDBC Driver
Pour MySQL
MySQL
JDBC : architecture
JDBC Driver Manager : Gestionnaire de drivers permettant chaque application de charger le(s) driver(s) dont il a besoin.
Driver JDBC : gre les dtails de communication avec un type de SGBD.
Un driver par SGBD (Oracle, MySQL, ...) JDBC-ODBC : driver gnrique pour toutes les sources accessibles via ODBC (Open DataBase Connectivity. interface Microsoft permettant la communication entre des clients bases de donnes fonctionnant sous Windows et les SGBD du march).
JDBC : le driver JDBC
Chaque diteur de SGBDR fournit un driver JDBC sous la forme dune archive jar.
Cest un ensemble de classes qui implmentent les interfaces du package java.sql.
Il faut ajouter larchive au CLASSPATH afin de pouvoir y accder dans vos programmes.
JDBC : fonctionnement
JDBC fonctionne comme suit :
Cration dune connexion la BD Envoi de requtes SQL (pour rcuprer ou maj des donnes)
Exploitation des rsultats provenant de la base Fermeture de la connexion
JDBC : connexion une BD (1 /2)
1. Charger la classe du driver JDBC
Cette classe implmente linterface java.sql.Driver et
peut tre charge en appelant la mthode forNamede java. lang. Class
Exemple avec le driver de MySQLClass.forName(org.gjt.mm.mysql.Driver);
JDBC : connexion une BD (2/2)
2. Appeler la mthode getConnection de java.sql.DriverManager
java.sql.Connection co; co =
DriverManager.getConnection(jdbc:mysql://localhost/MABD);
co = DriverManager.getConnection(jdbc:mysql://localhost/MABD, admin, passer);
JDBC : exemple de connexionimport java.sql.*; import javax.swing.JOptionPane;
public static Connection initConnection() {Connection co = null;String url = jdbc:mysql://localhost/MABD;try{
Class.forName(org.gjt.mm.mysql.Driver);co = DriverManager.getConnection(url,root,null);JOptionPane.showMessageDialog(null,Connection OK);// co.close();return co;
}catch (ClassNotFoundException fe) {
System.out.println(driver introuvable : +fe.getMessage());}
catch (SQLException se) {System.out.println(connexion impossible : +se.getMessage());}
}
JDBC : requtes SQL
JDBC permet divers types de requtes SQL : interrogation, maj, cration de tables.
Les objets suivants sont disponibles :ResultSet : contient des informations sur une table (noms des colonnes) ou le rsultat dune requte SQL.
Statement st = co.createStatement();ResultSet rs = (ResultSet)st.executeQuery(Select );
ResultSetMetaData : contient des informations sur le nom et le type des colonnes dune table
ResultSetMetaData rsmd = rs.getMetaData(); int nbre_Colonnes = rsmd.getColumnCount();
DataBaseMetaData : contient les informations sur la BD (noms des tables, index, etc.)
JDBC : linterface java. sql. Connection (1 /2)
createStatement : retourne une instance de java.sql.Statement utilise pour xecuter une instruction SQL sur la base de donnes
prepareStatement :prcompile des instructions SQL paramtres et retourne une instance de java.sql.PreparedStatement
prepareCall : prpare lappel une procdure stocke et renvoie un instance de java.sql.CallableStatement
JDBC : linterface java. sql. Connection (2/2)
setAutoCommit, commit, rollback : grent les transactions
getMetaData : renvoie une instance de java.sql.DatabaseMetaData pour obtenir des informations sur la base de donnes
close, isClosed : grent la fermeture de la connection
JDBC : java. sql. Statement
La mthode createStatement dune connection retourne une instance de java.sql.Statement dont les mthodes les plus utilises sont :
executeUpdate : permet de mettre jour les donnes dune base en excutant des instructions SQL de maj
executeQuery : permet dexcuter des requtes slection; renvoie une instance de java.sql.ResultSet
JDBC : java. sql. ResultSet (1 /2)
Permet de rcuprer et dexploiter les rsultats dune requte Slection
Des mthodes next, first, last permettent de parcourir la liste des enregistrement retourns par la slection SQL
java.sql.ResultSet rs = st.executeQuery(Select );while (rs.next()) {
// interrogation des infos de lenregistrement courant
}
JDBC : java. sql. ResultSet (2/2)
Des mthodes getXXX() renvoient la valeur dun des champs de lenregistrement :getString()getInt()getDate()getObject()etc.
Exemple : System.out.println(rs.getString(1), rs.getString(prenom), rs.getDouble(3));
JDBC : exemple de requte SQLpublic test_jdbc {public static void main (String[] args) {
Connection maCo = initConnection();if (maCo == null) return;String req = Select nom, prenom, age from Personne;try{
Statement st = maCo.createStatement();ResultSet rs = st.executeQuery(req);while (rs.next()) {
System.out.print(nom :+rs.getString(nom));System.out.print(prenom:+rs.getString(2));System.out.println(age :+rs.getDouble(3));
}rs.close(); st.close(); maCo.close();
}catch (SQLException se) {
System.out.println(connexion impossible);}
}}
JPA
Mapping objet- relationnel (rappel)
Laccs aux donnes est dlgu un outil externe : Frameworks : Hibernate, Toplink. APIs: JDO, JPA.
Avantage : propose une vue OO dune structure de donnes relationnelles.
Les outils de mapping O-R mettent en correspondance les objets et les donnes de la base.
JPA (Java Persistence API)
Spcification de Sun sortie en mai 2006. Abstraction au-dessus de JDBC. Permet de saffranchir de SQL. Package javax.persistence Gre la persistance des objets de lapplication sur des
BD relationnelles par lintermdiaire dun ORM.
Permet de mapper les objets Java (POJO) avec les tables de la base de donnes.
Services de JPA
Mcanisme permettant de dfinir le mapping O/R de faon dclarative avec : des annotations des descripteurs XML
API permettant deffectuer les oprations de base pour la persistance des donnes (CRUD) en manipulant simplement des objets Java.
Langage de requtes standard pour la rcupration des objets : JPQL.
Architecture de JPA
Couche dAccs aux donnes
Interface JPA
Implmentation JPA (Toplink/Hibernate)
JDBC
BD
Fournisseur de persistence
JPA ncessite un fournisseur de persistance qui implmente lAPI.
JPA est implmente par deux produits de rfrences : TopLink de Oracle, produit commercial devenu
libre.
Hibernate, projet open-source.
Entits
Une classe dont les instances peuvent tre persistantes est appele Entit (Entity).
Une entit rprsente gnralement une table dans une BD relationnelle.
Chaque instance dune entit reprsente une ligne dans la table asocie lentit.
Classe Entit (1 /4)
On indique quune classe est une entit en lui associant lannotation @Entity
Exemple :
import javax.Persistence.Entity;
@Entitypublic class Personne {
}
Classe Entit (2/4)
Une classe entit doit respecter certaines rgles :
Les proprits et les mthodes ne doivent pas tre
finales.
Les variables dinstance de persistance doivent tre
dclares private ou protected.
Classe Entit (3/4)
Si une instance de lentit peut tre envoye un client
distant, la classe doit implmenter java.io.Serializable (RMI
utilise la srialisation pour passer les arguments entre le
client et le serveur).
Doit possder un constructeur sans argument mais peut
possder aussi dautres constructeurs spcifiques.
Classe entit (4/4)
Tout champ non statique est automatiquement considr comme persistant par le conteneur.
Les annotations peuvent se placer :
soit sur les proprits
soit sur les accesseurs
Exemples dentit (1 /3)
@Entitypublic class Personne {
@Id @GeneratedValueprivate int id;
private String nom;private String prenom;private int getId(){ return id; }
}
Exemples dentit (2/3)
@Entitypublic class Personne implements Serializable {
private int id;private String nom;private String prenom;@Id @GeneratedValueprivate int getId(){ return id;}
}
Exemples dentit (3/3)
@Entitypublic class Personne implements Serializable {
public Personne() {}
public Personne(String prenom, String nom) {
this.prenom = prenom;
this.nom = nom;
}}
Entit - Table
Gnralement, une table correspond une classe : le nom de la table est le nom de la classe.
les noms des colonnes correspondent aux noms des attributs persistants.
Par exemple, les donnes de la classe Personne sont enregistres dans la table Personne dont les colonnes
seront id, nom, prenom.
Entit - Table
@Entitypublic class Personne {
@Id private int id;private String nom;private String prenom;
// methodes get et set}
CREATE TABLE PERSONNE (
ID INT NOT NULL,NOM VARCHAR(255),PRENOM VARCHAR(255),
PRIMARY KEY(ID))
Annotations lmentaires du mapping OR (1 /2) @Table : pour spcifier le nom de la table par dfaut cest le nom de la classe
@Entity
@Table(name=t_Personne, schema=MaBD)
public class Personne { }
Annotations lmentaires du mapping OR (2/2)
@Column : pour dfinir les proprits dun champ
@Entity
public class Personne {
@Column(name=t_nom, nullable=false, length=32)
private String nom;
}
Associations
Les 4 relations possibles entre entits sont signales par des annotations : Un Un :
Annotation : @OneToOne Un plusieurs :
Annotation : @OneToMany Plusieurs Un
Annotation : @ManyToOne Plusieurs Plusieurs
Annotation : @ManyToMany
Exemple dassociation
@OneToMany(mappedBy=section")public Collection getEnseignants() {
return enseignants;}
public void setEnseignants(Collectionens) {
this.enseignants = ens;}
Entity Manager (1 /2)
Service qui centralise toutes les actions de persistance. Pour rendre les entits persistentes, on le prcise via
linterface javax.persistence.EntityManager.
Correspond ltat dune connexion avec la BD. Offre des mthodes dajout, modification,
suppression, recherche et un accs au langage de requtes.
Entity Manager (2/2)
Lorsquune entit est prise en compte par lEM, on dit quil est attach ou manag (managed bean).
Ds quun objet est manag, on peut alors effectuer des oprations de persistance via lEM.
Lensemble des entits manages par lEM est appel contexte de persistance.
Le contexte de persistance permet de prciser : le type de base de donnes utiliser les paramtres de connexion.
Cration dune Entity Manager
Une EM est obtenue partir de linterface
EntityManagerFactory
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(unite_de_persistance);
EntityManager em = emf.createEntityManager();
Client JPA Entity Manager
Contexte de persistance
BD
Cycle de vie dune entit
Oprations principales sur les entits
Persistance dune entit
Recherche dentits
Suppression dune entit
Mise jour dune entit
Gestion des transactions
Persistance dune entit
Insrer lentit dans la BD.
Mthode void persist(Object o)
Exemple : Personne p = new Personne();p.setNom(Balde);p.setPrenom(Lamine);em.persist(p);
Recherche dune entit
Retrouver une entit stocke dans la BD partir du nom de la classe et de la cl primaire.
Mthode T find(Class entityClass, Object primaryKey)
Exemple :
public Personne trouverPersonne(int id){return em.find(Personne.class, id);
}
Suppression dune entit
Supprimer une entit stocke dans la BD partir du nom de la classe et de la cl primaire.
Mthode void remove(Object entity)
Exemple :public void supprimerPersonne(int id) {
Personne p = em.find(Personne.class, id);if (p != null)
em.remove(p);}
Mise jour dune entit
Mettre jour une entit stocke dans la BD.
Exemple :
public Personne modifierPassword (int id, String newPwd){Personne p = em.find(Personne.class, id);if (p != null)
p.setPassword(newPwd);return p;
}
Exemple de contexte de persistence
Le langage de requtes JPQL
Java Persistence Query Language. Dclaratif et inspir de la syntaxe de SQL. Manipule des objets dans sa syntaxe de requtes et
retourne des objets en rsultat.
Exemple :String req = "SELECT p FROM Personne p WHERE
p.Nom = 'Lo'";Query query = em.createQuery(req); List resultat = (List)query.getResultList();
Exemples de Requtes JPQL (1 /2)
String requete = SELECT e FROM Personne e";
Query query = em.createQuery(requete);
Collection pers = query.getResultList();
for (Personne p : pers)
System.out.println(" Personne trouvee : " + p);
Exemples de Requtes JPQL (2/2)
String requete = SELECT e FROM Personne e + WHERE e.salaire >= :salaire;
Query query = em.createQuery(requete);Query.setParameter(salaire, 4000000);List pers = query.getResultList();
for (Personne p : pers)System.out.println(" Personne : " + p.getNom());
Transactions
LEntity Manager offre des mthodes pour la gestion des transactions.
Exemple :// creation et persistance dune entit personneem.getTransaction().begin();Personne p = new Personne();p.setNom(Balde); p.setPrenom(Lamine); em.persist(p);em.getTransaction().commit();
Programmation Oriente Objet en JavaDiapositive numro 2Diapositive numro 3Diapositive numro 4Diapositive numro 5Diapositive numro 6Diapositive numro 7Diapositive numro 8Diapositive numro 9Diapositive numro 10Diapositive numro 11Diapositive numro 12Diapositive numro 13Diapositive numro 14Diapositive numro 15Diapositive numro 16Diapositive numro 17Diapositive numro 18Diapositive numro 19Diapositive numro 20Diapositive numro 21Diapositive numro 22Diapositive numro 23Diapositive numro 24Diapositive numro 25Diapositive numro 26Diapositive numro 27Diapositive numro 28Diapositive numro 29Diapositive numro 30Diapositive numro 31Diapositive numro 32Diapositive numro 33Diapositive numro 34Diapositive numro 35Diapositive numro 36Diapositive numro 37Diapositive numro 38Diapositive numro 39Diapositive numro 40Diapositive numro 41Diapositive numro 42Diapositive numro 43Diapositive numro 44Diapositive numro 45Diapositive numro 46Diapositive numro 47Diapositive numro 48Diapositive numro 49Diapositive numro 50Diapositive numro 51Diapositive numro 52Diapositive numro 53Diapositive numro 54Diapositive numro 55Diapositive numro 56Diapositive numro 57Diapositive numro 58Diapositive numro 59Diapositive numro 60Diapositive numro 61Diapositive numro 62Diapositive numro 63Diapositive numro 64Diapositive numro 65Diapositive numro 66Diapositive numro 67Diapositive numro 68Diapositive numro 69Diapositive numro 70Diapositive numro 71Diapositive numro 72Diapositive numro 73Diapositive numro 74Diapositive numro 75Diapositive numro 76Diapositive numro 77Diapositive numro 78Diapositive numro 79Diapositive numro 80Diapositive numro 81Diapositive numro 82Diapositive numro 83Diapositive numro 84Diapositive numro 85Diapositive numro 86Diapositive numro 87Diapositive numro 88Diapositive numro 89Diapositive numro 90Diapositive numro 91Diapositive numro 92Diapositive numro 93Diapositive numro 94Diapositive numro 95Diapositive numro 96Diapositive numro 97Diapositive numro 98Diapositive numro 99Diapositive numro 100Diapositive numro 101Diapositive numro 102Diapositive numro 103Diapositive numro 104Diapositive numro 105Diapositive numro 106Diapositive numro 107Diapositive numro 108Diapositive numro 109Diapositive numro 110Diapositive numro 111Diapositive numro 112Diapositive numro 113Diapositive numro 114Diapositive numro 115Diapositive numro 116Diapositive numro 117Diapositive numro 118Diapositive numro 119Diapositive numro 120Diapositive numro 121Diapositive numro 122Diapositive numro 123Diapositive numro 124Diapositive numro 125Diapositive numro 126Diapositive numro 127Diapositive numro 128Diapositive numro 129Diapositive numro 130Diapositive numro 131Diapositive numro 132Diapositive numro 133Diapositive numro 134Diapositive numro 135Diapositive numro 136Diapositive numro 137Diapositive numro 138Diapositive numro 139Diapositive numro 140Diapositive numro 141Diapositive numro 142Diapositive numro 143Diapositive numro 144Diapositive numro 145Diapositive numro 146Diapositive numro 147Diapositive numro 148Diapositive numro 149Diapositive numro 150Diapositive numro 151Diapositive numro 152Diapositive numro 153Diapositive numro 154Diapositive numro 155Diapositive numro 156Diapositive numro 157Diapositive numro 158Diapositive numro 159Diapositive numro 160Diapositive numro 161Diapositive numro 162Diapositive numro 163Diapositive numro 164Diapositive numro 165Diapositive numro 166Diapositive numro 167Diapositive numro 168Diapositive numro 169Diapositive numro 170Diapositive numro 171Diapositive numro 172Diapositive numro 173Diapositive numro 174Diapositive numro 175Diapositive numro 176Diapositive numro 177Diapositive numro 178Diapositive numro 179Diapositive numro 180Diapositive numro 181Diapositive numro 182Diapositive numro 183Diapositive numro 184Diapositive numro 185Diapositive numro 186Diapositive numro 187Diapositive numro 188Diapositive numro 189Diapositive numro 190Diapositive numro 191Diapositive numro 192Diapositive numro 193Diapositive numro 194Diapositive numro 195Diapositive numro 196Diapositive numro 197Diapositive numro 198Diapositive numro 199Diapositive numro 200Diapositive numro 201Diapositive numro 202Diapositive numro 203Diapositive numro 204Diapositive numro 205Diapositive numro 206Diapositive numro 207Diapositive numro 208Diapositive numro 209Diapositive numro 210Diapositive numro 211Diapositive numro 212Diapositive numro 213Diapositive numro 214Diapositive numro 215Diapositive numro 216Diapositive numro 217Diapositive numro 218