Vous êtes sur la page 1sur 218

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 ou
linteractivit 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 excuter
effectivement dans lenvironnement rel courant.

Java est portable


Compilateur
Java pour PC

Code
Java
.java

Compilateur
Java pour
PowerPC

Compilateur
Java pour
Sun Solaris

Interprteur
Java pour PC

Pseudocode Java
indpendant
de la plateforme
.class

Interprteur
Java pour
PowerPC

Interprteur
Java pour
Sun Solaris

Application Java
Application

JVM
+
Fichiers
.class

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 et
l'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
EtudiantBoursier, etc.

une

majuscule

Etudiant,

Les noms des mthodes et des variables commencent par


une 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 crites


entirement en majuscules : Integer.MAX_VALUE

Syntaxe de base : les types de donnes primitifs

byte
short
int
long
float
double
char

(8 bits)
(16 bits)
(32 bits)
(64 bits)
(32 bits)
(64 bits)
(16 bits)

Possibilit de faire du casting comme en C


double 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-- ;
}
else
System.out.print(ngatif );

Syntaxe:

Syntaxe de base : Linstruction FOR

for (initialisation; condition; expression)


{
instructions
}
Exemple:
for (int i=0 ; i<5 ; i++)
System.out.print(Salut!);

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 classe


public class NomDeLaClasse {

dclarations des champs (attributs, proprits)


dclarations des mthodes
}
public class Fraction {
// champs
public int num ;
public int den ;
// mthodes
public 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 en
train de dfinir).
ou de dsigner ses attributs ou ses mthodes.
this est gnralement utilis pour lever lambiguit sur un
identificateur lorsque le paramtre dune mthode porte le
nom 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 dfinit
avec 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 (nombre


darguments ou types des arguments diffrents).

La mthode main(1)
Premier sous-programme excut au lancement dune

application Java.
Signature:

public static void main (String[] args) {

}
Le paramtre est un tableau de chanes utilis pour les

arguments 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 entiers
System.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 commenant


par 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.
Exemple
public 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 prsentant
dans le flux dentre jusqu une marque de fin de ligne et renvoi
de la chane ainsi construite. La marque de fin de ligne est
consomme, 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 cette
dernire :
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 celui
de protection des attributs et mthodes.

Les

Modificateurs de visibilit en Java :


public : accessible par toutes les classes. Hrit par les sous
classes.
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 dans
le mme package.

Visiblit : exemple
public class Etudiant {
public String nom;
private String numIns;
public Etudiant(String nom) {
this.nom = nom;
}

// methodes accesseurs

public 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 ltat
dun objet donn (attributs dinstance)
variables de classe : elles dterminent les attributs ou ltat
dune classe donne (attributs de classe)
variables locales : dclares et utilises dans les dfinitions de
mthodes.
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 dinstance

public 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 et
non l'objet lui-mme.
Ce sont ces rfrences qui sont affectes ou passes comme
arguments 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 deux
rfrences.

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 ou
membres statiques.
Les membres de classe :
sont introduits par le mot static
existent en un seul exemplaire
sont 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 autres
objets.
Ils permettent dviter la duplication de certains types
dattributs (comme les constantes) dans chaque instance.
Exemple
Lattribut 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 (ou


mthodes) de classe, elle doit tre dclare statique.
Exemples
exit() est une mthode statique de la classe
java.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 classe
existante.

Les tableaux (2)


Instanciation
TypeDesElements[ ] NomDuTableau =
new TypeDesElements[TailleDuTableau];
Exemple
int[ ] tab_entiers = new int[15];
String[ ] chaines = new String[3];
Matrices

TypeDesElements[ ][ ] NomDuTableau;
TypeDesElements NomDuTableau[ ][ ];
Exemple

int [ ][ ] matrice
ou 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<5; i++){


t[i] = entree.nextInt();
entree.nextLine();}

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 PointCardinal


et 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 seules

instances sont les valeurs du type numr.

La classe java.lang.Enum
En fait, tout type numr est sous-classe de la classe

java.lang.Enum.

java.lang.Enum introduit quelques mthodes :


String name(), String toString()
Exemple :
public enum PointCardinal {
NORD, SUD, EST, OUEST;
public String toString() {
return "<" + super.toString().toLowerCase() + ">";
}
}

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 : Exemple


public enum PointCardinal {
NORD, SUD, EST, OUEST ;
public String toString() {
return "<" + super.toString().toLowerCase() + ">";
}
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 v
Integer unInteger = new Integer(v);

Dballage : opration inverse.


...
// dballage de v
v = 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;

Integer n = new Integer(1);

n = n + 5;

n est considr comme un int

String s = n.toString();

n est considr comme un objet


de type Integer

System.out.println(s);
if (n == 10)

if (n.intValue() == 10)

La boucle for each

La boucle for each


Nouvelle (Java 5) syntaxe de la boucle for pour parcourir les
lments dun tableau ou dune collection.

Exemple 1:
// somme des elements dun tableau
double[ ] 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 utilit


Dfinition
Un package est un ensemble de classes et d'autres packages
regroups 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 structurant
lensemble 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 prciser
son appartenance un package en utilisant le mot-cl package:
package mon_package;
Toutes les classes dfinies dans ce fichier font ainsi partie du
package 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 un
rpertoire nomm formesGeo.

Les packages : importation


Pour pouvoir utiliser une classe d'un package dans un autre
fichier, il faut l'importer :
import nom_du_package.nom_classe;
import formesGeo.Carre;
On peut importer toutes les classes d'un package en mme
temps:
import nom_du_package.*;
import java.io.*;
Le package java.lang qui gre les types de donnes et les
lments de base du langage est automatiquement import.

Les packages : compilation

Pour compiler une classe contenant linstruction suivante, il


faut indiquer le chemin au compilateur.
import monPackage.ClasseImportee;

soit : Option classpath de javac


javac classpath chemin_du_fichier MaClasse.java

soit : Variable denvironnement CLASSPATH


doit 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 rpertoire


monPackage

soit : Utiliser loption classpath de la commande java

soit : Variable denvironnement CLASSPATH


doit 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 interprteur
Java. Ces classes appartiennent au package java.
Java Standard Extension API : extensions normalises par
Sun/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 site
officiel 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 (classes
Object, String, Boolean, Integer, Float, Math, System (fonctions
systme), 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 exceptionnel

comme une erreur est survenue au cours de lexcution dun programme :

FileNotFoundException survient lorsquon tente douvrir un fichier


inexistant
IOException survient lorsquon fait une lecture incorrecte, lorsquun
fichier ne peut tre ferm, etc.
Java permet de grer les erreurs par exception, i.e. de prvoir dans son
application des blocs de code o sera traite systmatiquement, telle ou
telle 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 plusieurs
instructions 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 si
une exception se produit (afficher un message d'erreur par exemple).
finally est excut inconditionnellement, quelle que soit la faon dont on
sort 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 propre
doit 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, "Voulezvous quitter ?");
}
while (reponse == JOptionPane.NO_OPTION);
}
// methode factorielle
public static long factorielle(long n){
if (n <= 1)
return 1;
return n * factorielle(n-1);
}

La classe Scanner et InputMismatchException


Scanner gnre une exception de type InputMismatchException

en 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 partir

d'une (ou plusieurs) classe(s) existante(s).

Les classes sont souvent organises en hirarchies;


toutes les classes Java hritent de la classe
java.lang.Object.
Java nautorise que lhritage simple.
Lhritage multiple est remplac par la notion
dinterface.

Lhritage simple : exemple


Etudiant
+nom : String
numIns : 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() { // redefinition


System.out.println(etudiant :+ this.nom);
System.out.println(bourse :+ this.bourse);
}

La pseudo-variable super
En faisant hriter une classe dune autre, on peut
dfinir une mthode dont lidentificateur est le mme
que celui de sa classe mre.
masquage de la mthode de la classe mre.
La pseudo-variable super permet daccder la
mthode 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 certaines
proprits 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<this.annees; i++) solde *= 1 + this.taux;
return solde;
}
}

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 ne
possde pas de corps.
Elles ne peuvent pas tre instancies.
Elles doivent tre drives en sous-classes fournissant une
implmentation 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. Elles
ne peuvent donc pas tre instancies.
Une interface Java contient une liste de mthodes abstraites
que 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 doit
implementer 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 faisant
prcder son identificateur du mot-cl interface.
public interface UneInterface {
// dclaration des champs et des mthodes
}
Tous les champs sont des constantes dont les modificateurs
sont implicitement public static final
Toutes les mthodes sont publiques et non implmentes; elles
utilisent implicitement des modificateurs public abstract et sont
suivies dun ;.

Les interfaces : implmentation


Une interface doit tre implmente par une ou plusieurs
classes.
Une classe peut implmenter une ou plusieurs interfaces.
Lorsquune classe implmente une interface, elle doit
implementer 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<formes.length;i++){
System.out.print(surface de la forme+i+ : );
System.out.println(formes[i].surface());
}
}
}

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 quantit


importante 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 sil
nest pas tri.

Les indices pour accder aux lments dun tableau doivent tre
entiers.

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
SortedSet

Map
List

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
Set

HashSet

Interfaces List
Map

Tableau
(Vecteur)

Arbre

TreeSet
ArrayList

HashMap

Liste
chane

LinkedList
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 doit

tre 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 lordre

de leur cl daccs.

Collections Java : Itrateurs

Les collections peuvent tre parcourues laide

ditrateurs : 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);
// iterer
Iterator 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 dune
classe implmentant linterface java.util.Iterable.
// affichage des elements dun ensemble
Set 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 : Map


Linterface Map offre des mthodes permettant
ditrer sur les cls, les valeurs et sur les paires:
Map m = new HashMap();
// sur les cls
for (Iterator i = m.keySet().iterator(); i.hasNext();)
System.out.println(i.next());
// sur les valeurs
for (Iterator i = m.values().iterator(); i.hasNext();)
System.out.println(i.next());
// sur les paires cl/valeur
for (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 HashMap


import 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 HashMap


while (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 mthodes
gnriques.

Exemple : grer un couple dobjets


public class Couple<A>{
A elt1, elt2;

Couple(A elt1, A elt2) {


this.elt1 = elt1;
this.elt2 = elt2;
}

Classes gnriques

public static void main(String args[]){


Couple<String> c = new Couple<String>("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<E>,

Vector<E>,
Iterator<E>,
etc.

Exemple 1:

Gnricit et collections

public class Ufrs{


public static void main(String arg[]){
ArrayList<String> ufrs = new ArrayList<String>();
ufrs.add("sat");
ufrs.add("seg");
ufrs.add("sjp");
ufrs.add("lsh");
for (String ufr : ufrs)
System.out.print(ufr + " ");
System.out.println();
}
}

Exemple 2 :

Gnricit et collections

public class Frequence {


public static void main(String[] args) {
Map<String, Integer> tab = new TreeMap<String, Integer>();
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 <types-param> type-du-rsultat nom-mthode (args)

Exemple 1:
import java.util.*;
public class MethodesGeneriques{
static <A> 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 <T> void echangerGenerique(CoupleGen<T> c){
T tmp;
tmp = c.elt1;
c.elt1 = c.elt2;
c.elt2 = tmp;
}
public static void main(String args[]){
CoupleGen<String> mots =
new CoupleGen<String>("club","info");
echangerGenerique(mots);
ecrire(mots);
}

Mthodes gnriques

class CoupleGen<A>{
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 liste


darguments 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
JComponent
Button

TextField

Container

Panel

Window
Dialog
FileDialog

Comp. Swing

Frame

Applet

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 1

import 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)

Lutilisateur agit sur


un composant

couteur
La source notifie
lvnement

Objet Evt

source
Lcouteur senregistre auprs de la
source

Interfaces graphiques : vnements


Un 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 dans


une 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 (touche


presse/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 ecouteur


bouton2.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<=5; i++)
add(new Button("Bouton "+i));
setBounds(100, 100, 250, 150);
setVisible(true);
}
public static void main(String args[]){
new TestFlowLayout1();
}
}

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<=5; i++)
add(new Button("Bouton "+i));
setBounds(100, 100, 250, 150);
setVisible(true);
}
public static void main(String args[]){
new TestGridLayout();
}
}

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<=5; i++){
p = new Panel();
p.add(new Button("Bouton "+i));
add(p);
}
setBounds(100, 100, 250, 150);
setVisible(true);
}
public static void main(String args[]){
new TestGridLayout1();
}
}

Interfaces graphiques

: Composants Swing de saisie et


de choix

JTextField : champ de saisie simple (zone de texte)


JPasswordField : champ de saisie pour les passwords
JTextArea : champ de saisie multiligne
JButton : bouton
JCheckBox : boite cocher
JRadioButton : bouton radio
JList : liste de valeurs
JComboBox : liste droulante
etc.

Interfaces graphiques

: Composants Swing arbre et


tableau

JTree : arbre hirarchique


JTable : tableau capable dafficher diffrents types de donnes

Interfaces graphiques

: Composants Swing conteneurs

JFrame : fentre avec bord et barre de titre


JWindow : fentre sans dcoration
JDialog : bote de dialogue
JPanel : panneau vide
JTabbedPane : panneau onglets
JSplitPane : panneau partag (horizontalemt ou verticalemt)
JScrollPane : panneau ascenseur
Etc.

Interfaces graphiques

: Composants Swing botes de


dialogue

JFileChooser : choix de fichier


JOptionPane : dialogues standards : message, confirmation
Etc.

Interfaces graphiques

: Composants Swing menus

JMenuBar : barre de menu


JMenu : menu
JMenuItem : lment de menu
JPopupMenu : menu contextuel
Etc.

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 le
serveur Web, qui peut tre tlcharg sur le client Web et
s'excute dans une page Web.
Elle permet d'amliorer la prsentation de cette dernire ou
de remplir une fonction spcifique.
Les applets sont considres comme des objets des pages
HTML 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 o
elle s'excute,
- excuter des programmes,
- communiquer avec d'autres machines, part le
serveur 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
<HTML>
<HEAD>
<TITLE> Une applet simple </TITLE>
</HEAD>
<BODY>
Voici le rsultat :
<APPLET CODE="Bonjour.class" WIDTH=150
HEIGHT=25>
</APPLET>
</BODY>
</HTML>

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 la
classe 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 fentre
de l'applet)
- et handleEvent() (gestion d'vnements relatifs la souris
et au clavier).

La classe Applet (2)


Elle contient aussi quatre mthodes pour traiter les vnements
correspondant 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.
<APPLET
CODE = nom du fichier java
WIDTH = taille initiale de l'applet en pixels
HEIGTH = taille initiale de l'applet en pixels

Attributs optionnels

>
On peut passer des arguments une applet en utilisant la balise
HTML 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)


<HTML>
...
<BODY>
<applet code=Bonjour.class width=200 heigth=100>
<param name = param1 value = "Bonjour">
<param name = param2 value = "Comment vas tu?">
</applet>
</BODY>
</HTML>

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

JDBC Driver

JDBC Driver

bridge driver

Pour MySQL

pour Oracle

ODBC driver

MS
Access

SQL
Server

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 forName
de java. lang. Class

Exemple avec le driver de MySQL


Class.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 connexion


import 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,
transactions

rollback : grent les

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 SQL


public 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.

Permet de mapper les objets Java (POJO) avec les


tables de la base de donnes.

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.

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;
@Entity
public 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)


@Entity
public class Personne {
@Id
@GeneratedValue
private int id;
private String nom;
private String prenom;
private int getId(){ return id; }

Exemples dentit (2/3)


@Entity
public class Personne implements Serializable {
private int id;
private String nom;
private String prenom;
@Id
@GeneratedValue
private int getId(){ return id;}

Exemples dentit (3/3)


@Entity
public 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
@Entity
public 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<Enseignant> getEnseignants() {
return enseignants;
}
public void setEnseignants(Collection<Enseignant>
ens) {
this.enseignants = ens;
}

Entity Manager (1 /2)

Service qui centralise toutes les actions de persistance.

Correspond ltat dune connexion avec la BD.

Pour rendre les entits persistentes, on le prcise via


linterface javax.persistence.EntityManager.
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> T find(Class<T> 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


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name=PersonUnit">
<class>Personne</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/BD"/>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.jdbc.password" value=""/>
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</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<Personne> 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<Personne> 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 personne
em.getTransaction().begin();
Personne p = new Personne();
p.setNom(Balde);
p.setPrenom(Lamine);

em.persist(p);
em.getTransaction().commit();