Programmation Java : Concepts et Exemples
Programmation Java : Concepts et Exemples
Interfaces homme-machine
Fenêtrage - réaction aux événements
Programmation parallèle
Processus (Thread)
Exclusion mutuelle - attentes explicites - moniteurs
Documents HTML
Applets - animation, images, son
Applications réparties
Appel de méthodes d’objets distants (RMI)
Ouvrages de références :
Java in a Nutshell - David Flanagan - O’Reilly & Associates Inc.
Thinking in Java - Bruce Eckel - http://www.EckelObjects.com
initialisations (constructeurs)
public Decompteur(int valInit) {i=valInit;}
public Decompteur() {i=initParDefaut;}
opérations (méthodes)
public void dec() { if (i!=0) {i--;} }
public boolean estNul() {return(i==0);}
}
objets
déclaration d’identificateur
référence
Decompteur reveil; réveil null
création d’objet
objet Decompteur
reveil = new Decompteur(4);
i : 4
réveil
déclaration + création
Decompteur reveil = new Decompteur(4);
2
Travaux dirigés de JAVA
class Decompteur {
donnée statique
public static final int initParDefaut= 100;
private int i;
... procédure statique
public static Decompteur max(Decompteur d1, Decompteur d2) {
if (d1.i>d2.i) {return d1;} else {return d2;}
}
}
int k = Decompteur.initParDefaut;
Decompteur.max(reveil1, reveil2).dec();
3
Travaux dirigés de JAVA
class PileEnt {
private static class Maillon {
int elt; Maillon suivant;
Maillon(int e,Maillon s) {elt=e; suivant=s;}
}
private Maillon sommet;
public PileEnt() {sommet=null;}
public void empiler(int e) {
sommet=new Maillon(e,sommet);
}
public void depiler() {sommet=sommet.suivant;}
public int sommet() {return sommet.elt;}
}
4
Travaux dirigés de JAVA
Classe interne
aspect dynamique : classe liée à un objet
accès aux composants de l’objet courant de la classe englobante
⇒ une nouvelle classe pour chaque objet de la classe englobante
5
Traitements d’exception
Traitements d’exception
throw-try-catch
Pour les cas exceptionnels, ou les cas d’erreurs
sans ce mécanisme : les procédures doivent rendre des résultats supplé-
mentaires, qu’il faut tester ... → alourdit la programmation
6
Traitements d’exception
void p() {
...
try {... q() ...}
catch(xxException e){... traitement ...}
...
}
7
Traitements d’exception
déclenchement d’exception :
void q() throws MachinException {
... throw new MachinException(çaVaPas) ...
}
captage d’exception :
void p() { ...
try {... q() ...}
catch(MachinException e){
traitement(e.quoiQuiVaPas)
}
}
8
Traitements d’exception
class TestExceptions {
static final int NOIR=1; static final int ROUGE=2;
9
Traitements d’exception
Héritage
class Personne { classe de base
une personne
String nom;
int nbEnfants; nom
Personne(String n) { nbEnfants
nom=n; nbEnfants=0;
}
}
classe dérivée
class Salarie extends Personne {
int salaire; un salarié
int prime() { nom
return 5*salaire*nbEnfants/100; nbEnfants
} salaire
Salarie (String n, int s){ prime
super(n); salaire=s;
}
}
10
Traitements d’exception
test de classe
e instanceof c
11
Traitements d’exception
Figure
orig
perimetre
? virtuelle
12
Traitements d’exception
13
Traitements d’exception
la version 1.5 de java de permet pas de créer des tableaux de type générique
On est obligé d’écrire Object[] P= new Object[100]
au lieu de T[] P= new T[100]
et pratiquer un cast (T) P[s] lors de l’extraction de données de la pile
14
Traitements d’exception
Méthodes génériques
Exemple : fonction générique qui rend en résultat la représentation en
clair des éléments d’un tableau de type quelconque :
static <TypeElt> String enClair(TypeElt[] tab){
if (tab.length==0){return "";}
String resul=""+tab[0];
for(int i=1;i<tab.length;i++){
resul=resul+" "+tab[i];
}
return resul;
}
15
Traitements d’exception
p.empiler(new Integer(12));
p.empiler(new Integer(14));
while (!p.estVide()) {
int i = p.sommet().intValue();
System.out.print(" "+ i);
p.depiler();
}
16
Traitements d’exception
Une expression e d’un type primitif t est permise partout où son cor-
respondant objet T est attendu.
Cette expression est considérée comme équivalente à new T(e)
Exemple :
on peut écrire p.empiler(12)
le compilateur le traduit en p.empiler(new Integer(12)).
Exemple :
on peut écrire int i= p.sommet()
le compilateur le traduit en int i= p.sommet().intValue()
17
Traitements d’exception
Interface :
rôle principal :
établir un “contrat” ou encore un “cahier des charges” que
des types d’objets devront satisfaire pour pouvoir participer
à certains traitements.
18
Traitements d’exception
Définition d’interface
exemple : parcoureur de collection
un tel objet doit se comporter comme un “curseur” qui repère un élé-
ment au sein d’une collection et qui permet de la parcourir
interface Parcours<TypeElement> {
Une interface peut être générique. C’est le cas ici : le type des élé-
ments est indiqué par le paramètre de généricité TypeElement.
Ainsi l’interface Parcours pourra être mise en œuvre pour des col-
lections d’éléments de type quelconque
19
Traitements d’exception
20
Traitements d’exception
21
Traitements d’exception
Utilisation d’interface
Une interface I s’utilise comme une classe abstraite :
• on peut déclarer des variables, des résultats ou des paramètres de
type I
• toute instance d’une classe qui implémente I est compatible avec ces
variables, résultats ou paramètres
22
Traitements d’exception
l’algorithme de tri exige que le type des éléments mette en œuvre cette
interface :
public static <T extends Ordonnable<T>> void trier(T[] tab){
// effet : tri tab par ordre croissant selon l’ordre
// défini par la méthode inferieur des éléments de tab
for (int i=tab.length-1; i>=0; i--) {
for (int j=1; j<=i; j++) {
if (tab[j].inferieur(tab[j-1])) {
T x=tab[j-1]; tab[j-1]=tab[j]; tab[j]=x;
}
}
}
}
23
Traitements d’exception
Algorithmes génériques
Pour trier un tableau d’éléments de type Personne,
la classe Personne doit mettre en œuvre l’interface Ordonnable
choix (arbitraire) : l’ordre alphabétique de leur nom.
class Personne implements Ordonnable<Personne>{
public String nom; public int age; public int poids;
public Personne(String n, int a, int p){
nom=n; age=a; poids=p;
}
public String toString(){
return "<"+nom+","+age+" ans, "+poids+" kg>";
}
public boolean inferieur(Personne p){
// résultat : indique si this est avant y par
// ordre alphabétique de leurs noms
return nom.compareTo(p.nom)<0;
}
}
exemple d’utilisation :
Personne[] peuple = { new Personne("toto", 25, 80),
new Personne("tutu", 53, 65),
new Personne("tata", 15, 47),
new Personne("jojo", 12, 30)
};
System.out.println("peuple = "+enClair(peuple));
trier(peuple);
System.out.println("peuple trié selon leur nom = "
+enClair(peuple));
24
Traitements d’exception
Algorithmes génériques
Interface Comparable<T> {
public int compareTo(T x);
// résultat : <0, =0 ou >0 selon que this est
// respectivement inférieur, égal ou supérieur à x
}
25
Traitements d’exception
Algorithmes génériques
interfaces pour passer des fonctions en paramètre
moyen plus général d’exprimer des algorithmes génériques
26
Traitements d’exception
Algorithmes génériques
interfaces pour passer des fonctions en paramètre
pour trier les personnes selon leur âge :
class CompareAge implements Comparaison<Personne>{
public boolean inferieur(Personne x, Personne y){
return x.age<y.age;
}
}
utilisation :
...
trier(peuple,new ComparePoids());
System.out.println("peuple trié selon le poids = "
+enClair(peuple));
trier(peuple,new CompareAge());
System.out.println("peuple trié selon l’âge = "
+enClair(peuple));
27
Traitements d’exception
Component
Window Panel
er
fenêtre de 1 niveau zone dans un container,
regroupement de composants
Frame Dialog
fenêtre principale fenêtre de dialogue
Exemple
28
Traitements d’exception
Frame f;
Button boutonIncr= new Button("+");
2 Button boutonDecr= new Button("-"); composants
Button boutonQuit= new Button("quit");
void afficherCompteur() {
affichageCompteur.setText(String.valueOf(compteur));
}
29
Traitements d’exception
événement xxxEvent
↓
interface xxxListener
ActionListener : actionPerformed(ActionEvent)
MouseListener : mouseClicked(MouseEvent)
mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
KeyListener : keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
ActionEvent
composant class ReactionComposant
implements ActionListener {
actionPerformed() { ... }
}
composant.addActionListener(new ReactionComposant())
30
Traitements d’exception
class Placement {
31
Traitements d’exception
A0 B0 A1 B1 A2 A3 B2 A4 A5 B3 A6 A7 B4 B5 B6 B7
32
Traitements d’exception
A0 B0 A1 B1 A2 A3 B2 A4 A5 B3 A6 A7 B4 B5 B6 B7
33
Traitements d’exception
Exclusion
limiter le parallélisme
pour qu’un objet ne subisse pas en même temps
plusieurs séquences d’actions
34
Traitements d’exception
35
Traitements d’exception
modèle de moniteur
class MoniteurImpression {
synchronized void imprTexte(String txt) {
for(int i=0; i<txt.length(); i++) {
try {Thread.currentThread().sleep(100);}
catch(InterruptedException e) {};
System.out.print(txt.charAt(i));
}
}
}
36
Traitements d’exception
tampon de production-consommation
class MoniteurProdCons { pour un seul producteur
String tampon; boolean estVide=true;et un seul consommateur
37
Traitements d’exception
cons
processus prod processus
producteurs cons consommateur
prod
cons
38
Traitements d’exception
39
Traitements d’exception
objet processus
processus
objet
objet objet
40
Traitements d’exception
41
Traitements d’exception
méthodes à définir
void init() initialisations
void start() le navigateur (r)ouvre le document
void stop() le navigateur quitte le document
void paint(Graphic g) effets visuels sur Panel
au sein du document HTML
méthodes à utiliser
void repaint()
URL getCodeBase();
URL getDocumentBase();
AudioClip getAudioClip(URL u, String nom);
Image getImage(URL u, String nom);
...
}
42
Traitements d’exception
class Graphics {
void drawLine(int x1,int y1,int x2,int y2)
void drawRect(int x,int y,int w,int h)
void drawOval(int x,int y,int w,int h)
void drawString(String s, int x,int y)
void setColor(Color c)
Color getColor()
void setFont(Font f)
Font getFont()
boolean drawImage(...)
}
sons ( .au)
AudioClip m =
getAudioClip(getDocumentBase(),"son.au");
m.play()
43
Traitements d’exception
document HTML
44
Traitements d’exception
Exemple d’applet
boing
45
Traitements d’exception
corrigé
public class Boing extends Applet {
static final int BOING=1; static final int PASBOING=2;
int etat;// vaut altenativement BOING et PASBOING
AudioClip boing; // element sonore
Animation anim; // processus qui réalise l’animation
46
Traitements d’exception
exemple
site serveur
site client
remote object
Calculateur
...
somme(12,34)
... somme(int x,int y)
"résultat:46"
poseidon.ifsic.univ-rennes1.fr:8090
47
Traitements d’exception
class ServeurCalculateur
extends UnicastRemoteObject
implements Calculateur {
public String somme(int x, int y) {
return ("resultat : " + (x+y));
}}
48
Traitements d’exception
class TestServeurClaculateur {
public static void main(String[] argv) {
try {
LocateRegistry.createRegistry(8090);
ServeurCalculateur gaston = new ServeurCalculateur();
Naming.bind(
"//e103c04.ifsic.univ-rennes1.fr:8090/additionneur",
gaston);
}
catch(Exception e) { System.out.println("erreur");}
}
}
49
Traitements d’exception
50
Traitements d’exception
client serveur
stub skeleton
communications réseau
51
Traitements d’exception
Cas général :
un ou quelques objets “serveurs” connus par une adresse externe
germe d’activités qui créent dynamiquement
des objets et se les communiquent par paramètres ou résultats
site client 1
site serveur
2
service1
1
1
new
serv new
//machine/8080/serv
52
Traitements d’exception
class UnObjetTransmissible
implements Serializable {...}
return( )
53
Traitements d’exception
54
Traitements d’exception
site client 3
site client 2
chambreCourante
chambreCourante
...
... obtientChambre(9)
obtientChambre(9)
site client 1
chambreCourante
...
obtientChambre(0)
site serveur
ServeurReservation
obtientChambre()
55
Traitements d’exception
Le serveur
Objet unique
connu par nom externe "//machine:port/leServeur"
56
Traitements d’exception
Les chambres
Objets distants captés par références rendues en résultat
57
Traitements d’exception
Les clients
public class ClientReservation extends Applet {
TextField identClient = new TextField(20);
TextField numChambre = new TextField(4);
58
Traitements d’exception
InterfaceServeurReservation serveurReservation;
InterfaceChambre chambreCourante;
try {
serveurReservation = (InterfaceServeurReservation)
Naming.lookup("//florence.irisa.fr:8090/leServeur");
} catch(Exception e){System.out.println ("erreur");}
boutonEnvoiNumChambre.addActionListener
(new ActionEnvoiNumChambre());
boutonReservation.addActionListener
(new ActionReservation());
}
}
59