cours java beans
TRANSCRIPT
-
8/10/2019 Cours Java Beans
1/157
Cours Architectures Logiciellesc Olivier Caron
PolytechLille
-
8/10/2019 Cours Java Beans
2/157
1
Problematique ?
Les applications logicielles deviennent de plus en plus complexes :
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
3/157
1
Problematique ?
Les applications logicielles deviennent de plus en plus complexes :
Lapplication ne fonctionne pas sur une machine mais sur plusieurs.
programmation reseau, efficacite, performances, securite,tolerance aux pannes,. . .
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
4/157
1
Problematique ?
Les applications logicielles deviennent de plus en plus complexes :
Lapplication ne fonctionne pas sur une machine mais sur plusieurs.
programmation reseau, efficacite, performances, securite,tolerance aux pannes,. . .
Interoperabilite des langages et plates-formes.
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
5/157
1
Problematique ?
Les applications logicielles deviennent de plus en plus complexes :
Lapplication ne fonctionne pas sur une machine mais sur plusieurs.
programmation reseau, efficacite, performances, securite,tolerance aux pannes,. . .
Interoperabilite des langages et plates-formes.
Lapplication utilise/ou reutilise des applications existantes. applications patrimoines, bases de donnees
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
6/157
2
Des objectifs ambitieux
Face a cette complexite, on veut, en outre :
Ameliorer la qualite et la production de code
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
7/157
2
Des objectifs ambitieux
Face a cette complexite, on veut, en outre :
Ameliorer la qualite et la production de code Simplifier le travail du programmeur
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
8/157
2
Des objectifs ambitieux
Face a cette complexite, on veut, en outre :
Ameliorer la qualite et la production de code Simplifier le travail du programmeur
Reutiliser au mieux le logiciel
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
9/157
3
Les solutions
Definir en premier lieu larchitecture logicielle la mieux adaptee :
A software architecture is an abstract system specification consis-ting primarily of functional components described in terms of their
behaviors and interfaces and component-component interconnections.
(Hayes-Roth, 1994)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
10/157
3
Les solutions
Definir en premier lieu larchitecture logicielle la mieux adaptee :
A software architecture is an abstract system specification consis-ting primarily of functional components described in terms of their
behaviors and interfaces and component-component interconnections.
(Hayes-Roth, 1994)
Disposer de briques logicielles reutilisables : les composants.
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
11/157
3
Les solutions
Definir en premier lieu larchitecture logicielle la mieux adaptee :
A software architecture is an abstract system specification consis-ting primarily of functional components described in terms of their
behaviors and interfaces and component-component interconnections.
(Hayes-Roth, 1994)
Disposer de briques logicielles reutilisables : les composants. Disposer dinfrastructures daccueil de ces composants : les serveursdapplications.
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
12/157
4
Plan du cours (1/2)
Des objets aux composants
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
13/157
4
Plan du cours (1/2)
Des objets aux composants
Le modele de composants Java Beans
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
14/157
4
Plan du cours (1/2)
Des objets aux composants
Le modele de composants Java Beans Des objets aux objets repartis
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
15/157
4
Plan du cours (1/2)
Des objets aux composants
Le modele de composants Java Beans Des objets aux objets repartis
Le modele Java RMI
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
16/157
4
Plan du cours (1/2)
Des objets aux composants
Le modele de composants Java Beans Des objets aux objets repartis
Le modele Java RMI
Le modele CORBA
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
17/157
4
Plan du cours (1/2)
Des objets aux composants
Le modele de composants Java Beans Des objets aux objets repartis
Le modele Java RMI
Le modele CORBA
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
18/157
5
Plan du cours (2/2)
Des objets aux composants repartis
Les architectures clients/serveurs 3-tiers
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
19/157
5
Plan du cours (2/2)
Des objets aux composants repartis
Les architectures clients/serveurs 3-tiers Larchitecture J2EE (composants Web, composants EJB)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
20/157
5
Plan du cours (2/2)
Des objets aux composants repartis
Les architectures clients/serveurs 3-tiers Larchitecture J2EE (composants Web, composants EJB) Le modele de composants CORBA
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
21/157
5
Plan du cours (2/2)
Des objets aux composants repartis
Les architectures clients/serveurs 3-tiers Larchitecture J2EE (composants Web, composants EJB) Le modele de composants CORBA
Conception dapplications 3-tiers
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
22/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
23/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
24/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
25/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
Existence de bugs !
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
26/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
Existence de bugs !
Succession des versions (a payer ?)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
27/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
Existence de bugs !
Succession des versions (a payer ?)
Adequation de la nouvelle version par rapport a la configuration
materielle
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
28/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
Existence de bugs !
Succession des versions (a payer ?)
Adequation de la nouvelle version par rapport a la configuration
materielleLogiciel non adapte aux besoins :
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
29/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
Existence de bugs !
Succession des versions (a payer ?)
Adequation de la nouvelle version par rapport a la configuration
materielleLogiciel non adapte aux besoins :
Trop de fonctionnalites (ex : fonctions EXCEL)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
30/157
6
Lindustrie du logiciel, aujourdhui
Des produits chers !
Une bonne solution : le logiciel libre :-) Une mauvaise solution : le piratage :-(
Existence de bugs !
Succession des versions (a payer ?)
Adequation de la nouvelle version par rapport a la configuration
materielleLogiciel non adapte aux besoins :
Trop de fonctionnalites (ex : fonctions EXCEL)
Manque LA fonctionnalite !
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
31/157
7
Lindustrie du logiciel de demain (1/2)
Des logiciels adaptes aux besoins :
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
32/157
7
Lindustrie du logiciel de demain (1/2)
Des logiciels adaptes aux besoins :
Ne se trouve que les fonctionnalites requises
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
33/157
7
Lindustrie du logiciel de demain (1/2)
Des logiciels adaptes aux besoins :
Ne se trouve que les fonctionnalites requises On dispose toujours de la derniere version
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
34/157
7
Lindustrie du logiciel de demain (1/2)
Des logiciels adaptes aux besoins :
Ne se trouve que les fonctionnalites requises On dispose toujours de la derniere version
La derniere version est moins buggee que la precedente. . .
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
35/157
7
Lindustrie du logiciel de demain (1/2)
Des logiciels adaptes aux besoins :
Ne se trouve que les fonctionnalites requises On dispose toujours de la derniere version
La derniere version est moins buggee que la precedente. . . On peut faire evoluer (reconfigurer) son logiciel
On ne paye que :
Les fonctionnalites requises
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
36/157
7
Lindustrie du logiciel de demain (1/2)
Des logiciels adaptes aux besoins :
Ne se trouve que les fonctionnalites requises On dispose toujours de la derniere version
La derniere version est moins buggee que la precedente. . . On peut faire evoluer (reconfigurer) son logiciel
On ne paye que :
Les fonctionnalites requises
La duree effective dutilisation
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
37/157
8
Lindustrie du logiciel de demain (2/2)
INTERNET
Via lereseau Internet, recherche descomposants necessaires,
association de ceux-ci, puis execution a distance.
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
38/157
9
Les Besoins technologiques
Vers des composants sur letagere
Acceder a un composant (protocole reseau)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
39/157
9
Les Besoins technologiques
Vers des composants sur letagere
Acceder a un composant (protocole reseau) Localiser un composant (eq. DNS)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
40/157
9
Les Besoins technologiques
Vers des composants sur letagere
Acceder a un composant (protocole reseau) Localiser un composant (eq. DNS)
Description dun composant (service trader)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
41/157
9
Les Besoins technologiques
Vers des composants sur letagere
Acceder a un composant (protocole reseau) Localiser un composant (eq. DNS)
Description dun composant (service trader)
Faire payer lutilisation dun composant
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
42/157
9
Les Besoins technologiques
Vers des composants sur letagere
Acceder a un composant (protocole reseau) Localiser un composant (eq. DNS)
Description dun composant (service trader)
Faire payer lutilisation dun composant
Programmation : associer des composants
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
43/157
10
Des objets aux composants
Definition, principe et interet
PolytechLillec Olivier Caron
10
-
8/10/2019 Cours Java Beans
44/157
10
Des objets aux composants
Definition, principe et interet
Modele de composants Java Beans
PolytechLillec Olivier Caron
10
-
8/10/2019 Cours Java Beans
45/157
10
Des objets aux composants
Definition, principe et interet
Modele de composants Java Beans Notion dintrospection
PolytechLillec Olivier Caron
10
-
8/10/2019 Cours Java Beans
46/157
10
Des objets aux composants
Definition, principe et interet
Modele de composants Java Beans Notion dintrospection Programmation visuelle
PolytechLillec Olivier Caron
11
-
8/10/2019 Cours Java Beans
47/157
11
Quest-ce quun composant ?
Module logiciel autonome pouvant etre installe sur differentes plate-
formes
PolytechLillec Olivier Caron
11
-
8/10/2019 Cours Java Beans
48/157
11
Quest-ce quun composant ?
Module logiciel autonome pouvant etre installe sur differentes plate-
formesMecanisme dintrospection (auto-descriptif)
PolytechLillec Olivier Caron
11
-
8/10/2019 Cours Java Beans
49/157
11
Quest-ce quun composant ?
Module logiciel autonome pouvant etre installe sur differentes plate-
formesMecanisme dintrospection (auto-descriptif)Conservation de son etat
PolytechLillec Olivier Caron
11
-
8/10/2019 Cours Java Beans
50/157
11
Quest-ce quun composant ?
Module logiciel autonome pouvant etre installe sur differentes plate-
formesMecanisme dintrospection (auto-descriptif)Conservation de son etat Parametrable ou configurable
PolytechLillec Olivier Caron
12
-
8/10/2019 Cours Java Beans
51/157
12
Objectif des composants
A partir de plusieurs composants, construire une nouvelle application :
PolytechLillec Olivier Caron
12
-
8/10/2019 Cours Java Beans
52/157
12
Objectif des composants
A partir de plusieurs composants, construire une nouvelle application :
Associer/connecter des composants
PolytechLillec Olivier Caron
12
-
8/10/2019 Cours Java Beans
53/157
12
Objectif des composants
A partir de plusieurs composants, construire une nouvelle application :
Associer/connecter des composants Proposer des outils daide a la composition de composants
PolytechLillec Olivier Caron
12
-
8/10/2019 Cours Java Beans
54/157
12
Objectif des composants
A partir de plusieurs composants, construire une nouvelle application :
Associer/connecter des composants Proposer des outils daide a la composition de composants
Comp1 Comp3
Comp2
NewComp
PolytechLillec Olivier Caron
13
-
8/10/2019 Cours Java Beans
55/157
Les apports de la programmation par composants
Ne pas partir de zero, existence de modulesefficacesetrobustes:
PolytechLillec Olivier Caron
13
-
8/10/2019 Cours Java Beans
56/157
Les apports de la programmation par composants
Ne pas partir de zero, existence de modulesefficacesetrobustes:
Navigateur HTML (aide en ligne), correcteur orthographique, char-gement, restauration de fichier,. . .
PolytechLillec Olivier Caron
13
-
8/10/2019 Cours Java Beans
57/157
Les apports de la programmation par composants
Ne pas partir de zero, existence de modulesefficacesetrobustes:
Navigateur HTML (aide en ligne), correcteur orthographique, char-gement, restauration de fichier,. . .
Plus facile a decrire une application complexe :
Ensemble de composants
Connection entre ces composants
PolytechLillec Olivier Caron
14
-
8/10/2019 Cours Java Beans
58/157
Les composants en Java : les Java Beanshttp ://java.sun.com/docs/books/tutorial/javabeans
Module logiciel autonome pouvant etre installe sur differentes plate-formes (fichier jar)
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
59/157
14
-
8/10/2019 Cours Java Beans
60/157
Les composants en Java : les Java Beanshttp ://java.sun.com/docs/books/tutorial/javabeans
Module logiciel autonome pouvant etre installe sur differentes plate-formes (fichier jar)
Mecanisme dintrospection (auto-descriptif) (reflection Java) Conservation de son etat (serialisation)
PolytechLillec Olivier Caron
14
-
8/10/2019 Cours Java Beans
61/157
Les composants en Java : les Java Beanshttp ://java.sun.com/docs/books/tutorial/javabeans
Module logiciel autonome pouvant etre installe sur differentes plate-formes (fichier jar)
Mecanisme dintrospection (auto-descriptif) (reflection Java) Conservation de son etat (serialisation) Parametrable ou configurable (serialisation + reflection + evenements)
PolytechLillec Olivier Caron
15
-
8/10/2019 Cours Java Beans
62/157
Structure dun Java Bean
JAVA BEANMthodes
Proprits
Evnements
BeanInfo
Configuration
JAR
PolytechLillec Olivier Caron
16
-
8/10/2019 Cours Java Beans
63/157
Premier Bean : SmileyBeanimport java.awt.*;
public class SmileyBean extends Canvas {
private Color ourColor = Color.yellow;
private boolean smile = true;
public SmileyBean() {
this.setSize(250,250);
}public synchronized void toggleSmile() {
smile = !smile;
this.repaint();
}
public void paint(Graphics g) { ...}
}
PolytechLillec Olivier Caron
17
-
8/10/2019 Cours Java Beans
64/157
Premieres remarques :
Ici, pas de constructions supplementaires
PolytechLillec Olivier Caron
17
-
8/10/2019 Cours Java Beans
65/157
Premieres remarques :
Ici, pas de constructions supplementaires
Une regle Bean respectee : fonction constructeur sans parametres
PolytechLillec Olivier Caron
17
-
8/10/2019 Cours Java Beans
66/157
Premieres remarques :
Ici, pas de constructions supplementaires
Une regle Bean respectee : fonction constructeur sans parametresUne classe simplepeutcorrespondre a un Java Bean.
PolytechLillec Olivier Caron
18
-
8/10/2019 Cours Java Beans
67/157
Premiere applicationimport java.awt.*;
import java.awt.event.*;
public class SmileyPlace extends Frame implements WindowListener{public SmileyPlace(String titre){
SmileyBean smiley = null;
try{smiley = (SmileyBean)
java.beans.Beans.instantiate(null, "SmileyBean");
} catch (Exception e){System.err.println("Exception:"+e);
}this.add(smiley); this.addWindowListener(this)
}static public void main(String args[]){...
PolytechLillec Olivier Caron
19
-
8/10/2019 Cours Java Beans
68/157
La classe java.beans.Beans
Fournit differents services
La creation dun Beans ne se faitjamais parnewpackage java.beans ;public class Beans extends Object {
...
public static Object instantiate(ClassLoader cls, String beanName)
throws IOException, ClassNotFoundException ;
... Chargement du class loader (null equivaut au system class loader)
Tentative de chargerbeanName.ser puis creation du bean
PolytechLillec Olivier Caron
20
-
8/10/2019 Cours Java Beans
69/157
Proprietes des composants - Conventions de nommage
public int getX()
public void setX(int valeur)
PolytechLillec Olivier Caron
20
-
8/10/2019 Cours Java Beans
70/157
Proprietes des composants - Conventions de nommage
public int getX()
public void setX(int valeur) Definit une proprieteentierede nomx
PolytechLillec Olivier Caron
20
-
8/10/2019 Cours Java Beans
71/157
Proprietes des composants - Conventions de nommage
public int getX()
public void setX(int valeur) Definit une proprieteentierede nomx
public boolean isX()
public void setX(boolean valeur)
PolytechLillec Olivier Caron
20
-
8/10/2019 Cours Java Beans
72/157
Proprietes des composants - Conventions de nommage
public int getX()
public void setX(int valeur) Definit une proprieteentierede nomx
public boolean isX()
public void setX(boolean valeur)
Definit une proprietebooleennede nomx
PolytechLillec Olivier Caron
20
-
8/10/2019 Cours Java Beans
73/157
Proprietes des composants - Conventions de nommage
public int getX()
public void setX(int valeur) Definit une proprieteentierede nomx
public boolean isX()
public void setX(boolean valeur)
Definit une proprietebooleennede nomx
Possibilite de ne pas utiliser les conventions de nommage(BeanDescriptor)
PolytechLillec Olivier Caron
20
-
8/10/2019 Cours Java Beans
74/157
Proprietes des composants - Conventions de nommage
public int getX()
public void setX(int valeur) Definit une proprieteentierede nomx
public boolean isX()
public void setX(boolean valeur)
Definit une proprietebooleennede nomx
Possibilite de ne pas utiliser les conventions de nommage(BeanDescriptor)
La reflexion Java permet danalyser dynamiquement un composant
et de le configurer dynamiquement !
PolytechLillec Olivier Caron
21
-
8/10/2019 Cours Java Beans
75/157
Analyse dynamiqueet invocation dynamique (1/5)import java.lang.reflect.* ;
import java.beans.Beans ;
import java.util.Vector ;
public class Reflection {
public static void main(String args[]) {
Class laClasse ; Method lesMethodes[] ;
Vector bools=new Vector() ;
try {
Object obj = Beans.instantiate(null,args[0]) ;
laClasse = obj.getClass() ;
lesMethodes = laClasse.getMethods() ;
int i=0 ;
PolytechLillec Olivier Caron
22
-
8/10/2019 Cours Java Beans
76/157
Analyse dynamiqueet invocation dynamique (2/5)while (i
-
8/10/2019 Cours Java Beans
77/157
Analyse dynamique etinvocation dynamique(3/5)i=0 ; Object param[] =new Boolean[1] ;
param[0]=new Boolean(true) ;
while (i
-
8/10/2019 Cours Java Beans
78/157
Analyse dynamique etinvocation dynamique(4/5)} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Erreur : java Reflection nomClasse") ;
} catch (SecurityException e) {
System.err.println("exception raised...") ;
} catch(IllegalAccessException e) {
System.err.println("Access...") ;
} catch(InvocationTargetException e) {
System.err.println("Argument...") ;
} catch(IllegalArgumentException e) {
System.err.println("Argument...") ;
} catch(java.io.IOException e) {
System.err.println("IO...") ;
} catch(ClassNotFoundException e) {
System.err.println("class...") ; } } }
PolytechLillec Olivier Caron
25
-
8/10/2019 Cours Java Beans
79/157
Analyse dynamique et invocation dynamique (5/5)
On ne connait pas la structure de la classe au depart !
PolytechLillec Olivier Caron
25
-
8/10/2019 Cours Java Beans
80/157
Analyse dynamique et invocation dynamique (5/5)
On ne connait pas la structure de la classe au depart !
Possibilite de construire des outils parametrables, des descripteurs decomposants :
BeanBox (SUN)
PolytechLillec Olivier Caron
25
-
8/10/2019 Cours Java Beans
81/157
Analyse dynamique et invocation dynamique (5/5)
On ne connait pas la structure de la classe au depart !
Possibilite de construire des outils parametrables, des descripteurs decomposants :
BeanBox (SUN)
JBuilder (Inprise)
PolytechLillec Olivier Caron
25
-
8/10/2019 Cours Java Beans
82/157
Analyse dynamique et invocation dynamique (5/5)
On ne connait pas la structure de la classe au depart !
Possibilite de construire des outils parametrables, des descripteurs decomposants :
BeanBox (SUN)
JBuilder (Inprise)
Visual Cafe (Symantec),. . .
Execution de lexemple :java Reflection java.awt.Button
Valid
Displayable
Visible ...
PolytechLillec Olivier Caron
26
-
8/10/2019 Cours Java Beans
83/157
Les evenements (1/3)
Base sur Observer Design Pattern :
Observ
PolytechLillec Olivier Caron
26
-
8/10/2019 Cours Java Beans
84/157
Les evenements (1/3)
Base sur Observer Design Pattern :
Observ
Auditeur 1 Auditeur 2 Auditeur n...
PolytechLillec Olivier Caron
26
-
8/10/2019 Cours Java Beans
85/157
Les evenements (1/3)
Base sur Observer Design Pattern :
Observ
Auditeur 1 Auditeur 2 Auditeur n...
Phase 1 : Inscription
PolytechLillec Olivier Caron
26
-
8/10/2019 Cours Java Beans
86/157
Les evenements (1/3)
Base sur Observer Design Pattern :
Observ
Auditeur 1 Auditeur 2 Auditeur n...
Phase 1 : Inscription
Phase 2 : Evnement
vn.
PolytechLillec Olivier Caron
26
-
8/10/2019 Cours Java Beans
87/157
Les evenements (1/3)
Base sur Observer Design Pattern :
Observ
Auditeur 1 Auditeur 2 Auditeur n...
Phase 1 : Inscription
Phase 2 : Evnement
vn.
Phase 3 : notification
PolytechLillec Olivier Caron
27
-
8/10/2019 Cours Java Beans
88/157
Les evenements (2/3)
Illustration : le modele de lAWT
java.util.EventObject java.util.EventListener
XEventXListener
ZBean
YBean
+void addXListener(XListener x)
+void removeXListener(Listener x)-void notifyListeners()
observers
notifyListeners() {
xe=new XEvent()
for each observers
...
}
XAction, YButton
PolytechLillec Olivier Caron
28
-
8/10/2019 Cours Java Beans
89/157
Les evenements (3/3)EventObjectpackage java.util;
public class EventObject implements java.io.Serializable {
protected transient Object source;
public EventObject(Object source) {...}
public Object getSource() { return source; }
public String toString() { ... }
}
EventListenerpackage java.util;public interface EventListener { }
PolytechLillec Olivier Caron
29
-
8/10/2019 Cours Java Beans
90/157
Un nouvel evenement SourireEvent
Objectif : on veut creer un nouvel evenement qui intervient quand le
smiley sourit.
PolytechLillec Olivier Caron
29
-
8/10/2019 Cours Java Beans
91/157
Un nouvel evenement SourireEvent
Objectif : on veut creer un nouvel evenement qui intervient quand le
smiley sourit.Plusieurs auditeurs peuvent etre a lecoute de cet evenement.
PolytechLillec Olivier Caron
29
-
8/10/2019 Cours Java Beans
92/157
Un nouvel evenement SourireEvent
Objectif : on veut creer un nouvel evenement qui intervient quand le
smiley sourit.Plusieurs auditeurs peuvent etre a lecoute de cet evenement.
import java.util.EventObject ;
public class SourireEvent extends EventObject {public SourireEvent(SmileyBean src) { super(src); }
}
PolytechLillec Olivier Caron
30
-
8/10/2019 Cours Java Beans
93/157
Interface pour les auditeurs
Les auditeurs desirant capturer levenement doivent implementer lin-
terface SourireListener :
import java.util.EventListener ;
public interface SourireListener extends EventListener {
public void devientDrole(SourireEvent e) ;}
PolytechLillec Olivier Caron
31
-
8/10/2019 Cours Java Beans
94/157
La nouvelle classe SmileyBean (1/4)
doit gerer les auditeurs (listeners) : ajout et retrait
PolytechLillec Olivier Caron
31
-
8/10/2019 Cours Java Beans
95/157
La nouvelle classe SmileyBean (1/4)
doit gerer les auditeurs (listeners) : ajout et retrait
doit creer un evenementSourireEvent lorsque le smiley sourit
PolytechLillec Olivier Caron
31
-
8/10/2019 Cours Java Beans
96/157
La nouvelle classe SmileyBean (1/4)
doit gerer les auditeurs (listeners) : ajout et retrait
doit creer un evenementSourireEvent lorsque le smiley souritdoit notifier a tous les auditeurs inscrits levenement
PolytechLillec Olivier Caron
31
-
8/10/2019 Cours Java Beans
97/157
La nouvelle classe SmileyBean (1/4)
doit gerer les auditeurs (listeners) : ajout et retrait
doit creer un evenementSourireEvent lorsque le smiley souritdoit notifier a tous les auditeurs inscrits levenement doit gerer les acces concurrents.
PolytechLillec Olivier Caron
32
( / )
-
8/10/2019 Cours Java Beans
98/157
La nouvelle classe SmileyBean (2/4)
import java.awt.*;
import java.beans.*;
import java.util.ArrayList ;
public class SmileyBean extends Canvas{// Private data fields:
private Color ourColor = Color.yellow;
private boolean smile = true;
private ArrayList sourireListeners = new ArrayList() ;
public SmileyBean(){this.setSize(250,250);
}
PolytechLillec Olivier Caron
33
( / )
-
8/10/2019 Cours Java Beans
99/157
La nouvelle classe SmileyBean (3/4)synchronized public void addSourireListener(SourireListener l){
sourireListeners.add(l) ;
}
synchronized public void removeSourireListener(SourireListener l){sourireListeners.remove(l) ;
}
public synchronized void toggleSmile(){smile = !smile;
if (smile) notifyListeners() ;
this.repaint();
}
PolytechLillec Olivier Caron
34
(4/4)
-
8/10/2019 Cours Java Beans
100/157
La nouvelle classe SmileyBean (4/4)
public void notifyListeners()
{SourireEvent se=new SourireEvent(this) ;ArrayList lv =null ;
// realisation copie (acces concurrent)
// ex: cas ou un addListener en action
synchronized(this) {lv=(ArrayList)sourireListeners.clone() ;
}for (int i=0;i
-
8/10/2019 Cours Java Beans
101/157
Un composant auditeurimport java.awt.Label ;
public class SmileyLabelBean extends Label
implements SourireListener {
private int compteur=0 ;
public SmileyLabelBean() { super("compteur:0") ; }
public void devientDrole(SourireEvent e) {compteur++ ;
this.setText("compteur:"+compteur) ;
}
}
PolytechLillec Olivier Caron
36
C ti d
-
8/10/2019 Cours Java Beans
102/157
Conventions de nommage
Evenement :
class NomEvent
PolytechLillec Olivier Caron
36
C ti d
-
8/10/2019 Cours Java Beans
103/157
Conventions de nommage
Evenement :
class NomEventAuditeur :
interface NomListener
PolytechLillec Olivier Caron
36
C ti d
-
8/10/2019 Cours Java Beans
104/157
Conventions de nommage
Evenement :
class NomEventAuditeur :
interface NomListenerClasse source devenements :
public void addNomListener(NomListener l)
public void removeNomListener(NomListener l)
PolytechLillec Olivier Caron
37
E l li ti (1/3)
-
8/10/2019 Cours Java Beans
105/157
Exemple application (1/3)
PolytechLillec Olivier Caron
38
E l li ti (2/3)
-
8/10/2019 Cours Java Beans
106/157
Exemple application (2/3)import java.awt.*;
import java.awt.event.*;
import java.beans.*;public class SmileyPlace extends Frame
implements WindowListener, ActionListener {
private SmileyBean smiley = null;
public SmileyPlace() {
SmileyLabelBean label=null ;
Button ok=new Button("ok") ;
try {
smiley=(SmileyBean)Beans.instantiate(null,"SmileyBean");
label=(SmileyLabelBean)
Beans.instantiate(null,"SmileyLabelBean");
} catch (Exception e) { System.err.println("Exception:"+e); }
PolytechLillec Olivier Caron
39
E l li ti (3/3)
-
8/10/2019 Cours Java Beans
107/157
Exemple application (3/3)this.add("Center",smiley); this.add("South",label) ;
this.add("North",ok) ;
ok.addActionListener (this) ;smiley.addSourireListener(label) ;
this.addWindowListener(this);
}
public void actionPerformed(ActionEvent e) {
smiley.toggleSmile() ;
}
...
PolytechLillec Olivier Caron
40
Que fait au juste lapplication ?
-
8/10/2019 Cours Java Beans
108/157
Que fait au juste l application ?
Elle nutilise que des composants (norme Java Beans) :
Button, SmileyBean, SmileyLabelBean
PolytechLillec Olivier Caron
40
Que fait au juste lapplication ?
-
8/10/2019 Cours Java Beans
109/157
Que fait au juste l application ?
Elle nutilise que des composants (norme Java Beans) :
Button, SmileyBean, SmileyLabelBeanElle connecte les composants entre euxaddActionListener, addSourireListener
PolytechLillec Olivier Caron
40
Que fait au juste lapplication ?
-
8/10/2019 Cours Java Beans
110/157
Que fait au juste l application ?
Elle nutilise que des composants (norme Java Beans) :
Button, SmileyBean, SmileyLabelBeanElle connecte les composants entre euxaddActionListener, addSourireListener
Elle nappelle que des methodes existantes
toggleSmile
PolytechLillec Olivier Caron
40
Que fait au juste lapplication ?
-
8/10/2019 Cours Java Beans
111/157
Que fait au juste l application ?
Elle nutilise que des composants (norme Java Beans) :
Button, SmileyBean, SmileyLabelBeanElle connecte les composants entre euxaddActionListener, addSourireListener
Elle nappelle que des methodes existantes
toggleSmile
Dans ce cas, pourquoi programmer lapplication ?
PolytechLillec Olivier Caron
41
La BeanBox
-
8/10/2019 Cours Java Beans
112/157
La BeanBox
Le BDK (Beans Development Kit) (http://www.javasoft.com)
PolytechLillec Olivier Caron
41
La BeanBox
-
8/10/2019 Cours Java Beans
113/157
La BeanBox
Le BDK (Beans Development Kit) (http://www.javasoft.com)
Charge dynamiquement des composants Beansfichiers jar normalises
PolytechLillec Olivier Caron
41
La BeanBox
-
8/10/2019 Cours Java Beans
114/157
La BeanBox
Le BDK (Beans Development Kit) (http://www.javasoft.com)
Charge dynamiquement des composants Beansfichiers jar normalisesOutil visuel de programmation
PolytechLillec Olivier Caron
42
Structure physique du composant (1/2)
-
8/10/2019 Cours Java Beans
115/157
Structure physique du composant (1/2)
fichier archive (jar) contenant :
classes Java (*.class)
PolytechLillec Olivier Caron
42
Structure physique du composant (1/2)
-
8/10/2019 Cours Java Beans
116/157
Structure physique du composant (1/2)
fichier archive (jar) contenant :
classes Java (*.class) objet serialise (*.ser)
PolytechLillec Olivier Caron
42
Structure physique du composant (1/2)
-
8/10/2019 Cours Java Beans
117/157
Structure physique du composant (1/2)
fichier archive (jar) contenant :
classes Java (*.class) objet serialise (*.ser)
fichier descriptif (Manifest.MF), sa structure :Name :
:
:
...
Name :
...
PolytechLillec Olivier Caron
43
Structure physique du composant (2/2)
-
8/10/2019 Cours Java Beans
118/157
Structure physique du composant (2/2) Fichier smiley.mf :Manifest-Version: 1.0
Name: SmileyBean.classJava-Bean: True
Name: SmileyLabelBean.class
Java-Bean: True
Name: SourireEvent.classJava-Bean: False...
jar cvfm smiley.jar smiley.mf *.class
PolytechLillec Olivier Caron
44
La BeanBox en action
-
8/10/2019 Cours Java Beans
119/157
La BeanBox en action
PolytechLillec Olivier Caron
45
La serialisation Java (1/2)
-
8/10/2019 Cours Java Beans
120/157
La serialisation Java (1/2)
Mecanisme permettant de rendre persistant des objets Java :
implementer linterface java.io.Serializable
PolytechLillec Olivier Caron
45
La serialisation Java (1/2)
-
8/10/2019 Cours Java Beans
121/157
La serialisation Java (1/2)
Mecanisme permettant de rendre persistant des objets Java :
implementer linterface java.io.Serializable heriter dune classe serialisable
PolytechLillec Olivier Caron
45
La serialisation Java (1/2)
-
8/10/2019 Cours Java Beans
122/157
La serialisation Java (1/2)
Mecanisme permettant de rendre persistant des objets Java :
implementer linterface java.io.Serializable heriter dune classe serialisable
Sauvegarder un Java Bean :FileOutputStream fic=new FileOutputStream("Smiley1.ser") ;
ObjectOutputStream os=new ObjectOutputStream(fic)
os.writeObject(unSmileyBean) ;
PolytechLillec Olivier Caron
46
La serialisation Java (2/2)
-
8/10/2019 Cours Java Beans
123/157
La serialisation Java (2/2)Restaurer un Java Bean :
SmileyBean smiley ;try { // essai de r ecuperer le fichier .ser
smiley=(SmileyBean) Beans.instantiate(null,"Smiley1") ;
} catch(Exception e) {
try {
smiley=(SmileyBean) Beans.instantiate(null,"SmileyBean");
} catch(...
Clause java transient
PolytechLillec Olivier Caron
47
Les proprietes multiples
-
8/10/2019 Cours Java Beans
124/157
Les proprietes multiples
Les proprietes tableaux, conventions :
public Type[] getNomPropriete()public void setNomPropriete(Type[] valeur)
PolytechLillec Olivier Caron
47
Les proprietes multiples
-
8/10/2019 Cours Java Beans
125/157
Les proprietes multiples
Les proprietes tableaux, conventions :
public Type[] getNomPropriete()public void setNomPropriete(Type[] valeur) Les proprietes indicees, element unique dun tableau, conventions :
public Type getNomPropriete(int index)
public void setNomPropriete(int index,Type valeur)
PolytechLillec Olivier Caron
48
Les proprietes liees (1/3)
-
8/10/2019 Cours Java Beans
126/157
Les proprietes liees (1/3)
Exploite le pattern Observateur
PolytechLillec Olivier Caron
48
Les proprietes liees (1/3)
-
8/10/2019 Cours Java Beans
127/157
Les proprietes liees (1/3)
Exploite le pattern Observateur
Cest une propriete qui avertit tous les auditeurs des changements devaleur de la propriete.
PolytechLillec Olivier Caron
48
Les proprietes liees (1/3)
-
8/10/2019 Cours Java Beans
128/157
s p op t s s ( /3)
Exploite le pattern Observateur
Cest une propriete qui avertit tous les auditeurs des changements devaleur de la propriete. Levenement est envoyeapresla modification
PolytechLillec Olivier Caron
48
Les proprietes liees (1/3)
-
8/10/2019 Cours Java Beans
129/157
p p ( / )
Exploite le pattern Observateur
Cest une propriete qui avertit tous les auditeurs des changements devaleur de la propriete. Levenement est envoyeapresla modificationUn auditeur doit implementer linterfacePropertyChangeListener :package java.beans;
import java.util.EventListener ;
public interface PropertyChangeListener extends EventListener {
void propertyChange(PropertyChangeEvent evt);
}
PolytechLillec Olivier Caron
49
Les proprietes liees (2/3)
-
8/10/2019 Cours Java Beans
130/157
p p ( / )
Le composant detenant des proprietes liees doit inclure des methodes
de recensement dauditeurs :
une seule propriete liee dans le composant :public void addPropertyChangeListener(PropertyChangeListener l)
public void removePropertyChangeListener(PropertyChangeListener l)
PolytechLillec Olivier Caron
49
Les proprietes liees (2/3)
-
8/10/2019 Cours Java Beans
131/157
p p ( / )
Le composant detenant des proprietes liees doit inclure des methodes
de recensement dauditeurs :
une seule propriete liee dans le composant :public void addPropertyChangeListener(PropertyChangeListener l)
public void removePropertyChangeListener(PropertyChangeListener l)
plusieurs proprietes liees dans le composant :public void addPropertyChangeListener(
String propertyName, PropertyChangeListener l)
public void removePropertyChangeListener(
String propertyName, PropertyChangeListener l)
PolytechLillec Olivier Caron
50
Les proprietes liees (3/3)
-
8/10/2019 Cours Java Beans
132/157
p p ( / )Levenement est du type :package java.beans;
public class PropertyChangeEvent extends java.util.EventObject {
public PropertyChangeEvent(Object source, String propertyName,
Object oldValue, Object newValue) {
...
}
public String getPropertyName() { return propertyName;}
public Object getNewValue() { return newValue;}
public Object getOldValue() { return oldValue; }
PolytechLillec Olivier Caron
51
Premier exemple de propriete liee (1/3)
-
8/10/2019 Cours Java Beans
133/157
p p p ( / )import java.util.ArrayList ;
import java.beans.* ;
public class TemperatureBean extends java.awt.Label {
private double temperature=20.0 ;
private ArrayList listeners = new ArrayList() ;
public TemperatureBean() {this.setText(""+temperature) ;
}
PolytechLillec Olivier Caron
52
Premier exemple de propriete liee (2/3)
-
8/10/2019 Cours Java Beans
134/157
p p p ( / )synchronized public void addPropertyChangeListener
(PropertyChangeListener l) {
listeners.add(l) ;}
synchronized public void removePropertyChangeListener(
PropertyChangeListener l) {
listeners.remove(l) ;
}
public void notifyListeners(PropertyChangeEvent event) {ArrayList lv =null ;
synchronized(this) { lv=(ArrayList) listeners.clone() ;}
for (int i=0;i
-
8/10/2019 Cours Java Beans
135/157
p p p ( / )public synchronized void setTemperature (double v) {
double old=this.temperature ;
this.temperature=v ; PropertyChangeEvent event ;event=new PropertyChangeEvent(this, "temperature",
new Double(old),new Double(temperature)) ;
this.notifyListeners(event) ;
this.setText(""+temperature) ;
}
public synchronized double getTemperature() {return this.temperature ;
}
}
PolytechLillec Olivier Caron
54
Programmation propriete liee
-
8/10/2019 Cours Java Beans
136/157
Relativement lourd a programmer (notifyListener,. . .)
PolytechLillec Olivier Caron
54
Programmation propriete liee
-
8/10/2019 Cours Java Beans
137/157
Relativement lourd a programmer (notifyListener,. . .)Toujours le meme code
PolytechLillec Olivier Caron
54
Programmation propriete liee
-
8/10/2019 Cours Java Beans
138/157
Relativement lourd a programmer (notifyListener,. . .)Toujours le meme code
Existence de classe utilitaire dans le JDK :java.beans.PropertyChangeSupport
PolytechLillec Olivier Caron
55
Second exemple de propriete liee (1/2)
-
8/10/2019 Cours Java Beans
139/157
public class TemperatureBean2 extends java.awt.Label{private double temperature=20.0 ;
private java.beans.PropertyChangeSupport pcs ;public TemperatureBean2(){
this.setText(""+temperature) ;
pcs=new java.beans.PropertyChangeSupport(this) ;
}synchronized
public void addPropertyChangeListener(PropertyChangeListener l){pcs.addPropertyChangeListener(l) ;
}synchronized
public void removePropertyChangeListener(PropertyChangeListener l){pcs.removePropertyChangeListener(l) ;
}PolytechLille
c Olivier Caron
56
Second exemple de propriete liee (2/2)
-
8/10/2019 Cours Java Beans
140/157
public synchronized void setTemperature (double v) {double old=this.temperature ;
this.temperature=v ;PropertyChangeEvent event ;
event=new PropertyChangeEvent(this, "temperature",
new Double(old),new Double(temperature)) ;
pcs.firePropertyChange(event) ;
this.setText(""+temperature) ;
}public synchronized double getTemperature(){
return this.temperature ;
}}
PolytechLillec Olivier Caron
57
Les proprietes contraintes (1/2)
-
8/10/2019 Cours Java Beans
141/157
Le changement de valeur peut etrebloquepar un auditeur.
PolytechLillec Olivier Caron
57
Les proprietes contraintes (1/2)
-
8/10/2019 Cours Java Beans
142/157
Le changement de valeur peut etrebloquepar un auditeur. Lauditeur implemente linterface VetoableChangeListener :package java.beans;import java.util.EventListener ;
public interface VetoableChangeListener extends EventListener{
void vetoableChange(PropertyChangeEvent evt)
throws PropertyVetoException;}
PolytechLillec Olivier Caron
-
8/10/2019 Cours Java Beans
143/157
58
Les proprietes contraintes (2/2)
-
8/10/2019 Cours Java Beans
144/157
Lauditeur peut declencher lexceptionPropertyVetoExceptionpour
refuser la modification de la propriete. Le composant possedant des proprietes contraintes doit gerer des
auditeurs
PolytechLillec Olivier Caron
58
Les proprietes contraintes (2/2)
-
8/10/2019 Cours Java Beans
145/157
Lauditeur peut declencher lexceptionPropertyVetoExceptionpour
refuser la modification de la propriete. Le composant possedant des proprietes contraintes doit gerer des
auditeursconvention pour la definition de propriete contraintes :
public void setNomPropriete(Type valeur)
throws java.beans.PropertyVetoException
PolytechLillec Olivier Caron
58
Les proprietes contraintes (2/2)
-
8/10/2019 Cours Java Beans
146/157
Lauditeur peut declencher lexceptionPropertyVetoExceptionpour
refuser la modification de la propriete. Le composant possedant des proprietes contraintes doit gerer des
auditeursconvention pour la definition de propriete contraintes :
public void setNomPropriete(Type valeur)
throws java.beans.PropertyVetoExceptionClasse utilitaire : java.beans.VetoableChangeSupport
PolytechLillec Olivier Caron
59
Les composants Java Beans, cest aussi...
-
8/10/2019 Cours Java Beans
147/157
Des API pour des descripteurs de composants
PolytechLillec Olivier Caron
59
Les composants Java Beans, cest aussi...
-
8/10/2019 Cours Java Beans
148/157
Des API pour des descripteurs de composants Des API pour des editeurs de composants
PolytechLillec Olivier Caron
59
Les composants Java Beans, cest aussi...
-
8/10/2019 Cours Java Beans
149/157
Des API pour des descripteurs de composants Des API pour des editeurs de composants
Des outils de versioning (utilitaire serialver)
PolytechLillec Olivier Caron
59
Les composants Java Beans, cest aussi...
-
8/10/2019 Cours Java Beans
150/157
Des API pour des descripteurs de composants Des API pour des editeurs de composants
Des outils de versioning (utilitaire serialver)Des outils dauthentification (utilitaire javakey)
PolytechLillec Olivier Caron
59
Les composants Java Beans, cest aussi...
-
8/10/2019 Cours Java Beans
151/157
Des API pour des descripteurs de composants Des API pour des editeurs de composants
Des outils de versioning (utilitaire serialver)Des outils dauthentification (utilitaire javakey) Des mecanismes de securite (JDK 2 : les permissions java)
PolytechLillec Olivier Caron
60
Conclusion
-
8/10/2019 Cours Java Beans
152/157
Facile ( ?)
PolytechLillec Olivier Caron
60
Conclusion
-
8/10/2019 Cours Java Beans
153/157
Facile ( ?)Puissant
PolytechLillec Olivier Caron
60
Conclusion
-
8/10/2019 Cours Java Beans
154/157
Facile ( ?)Puissant
Ce nest pas un nouveau langage
PolytechLillec Olivier Caron
60
Conclusion
-
8/10/2019 Cours Java Beans
155/157
Facile ( ?)Puissant
Ce nest pas un nouveau langage Permet une programmation tres modulaire : chaque composant est
parfaitement autonome.
PolytechLillec Olivier Caron
60
Conclusion
-
8/10/2019 Cours Java Beans
156/157
Facile ( ?)Puissant
Ce nest pas un nouveau langage Permet une programmation tres modulaire : chaque composant est
parfaitement autonome.Portable
PolytechLillec Olivier Caron
60
Conclusion
( )
-
8/10/2019 Cours Java Beans
157/157
Facile ( ?)Puissant
Ce nest pas un nouveau langage Permet une programmation tres modulaire : chaque composant est
parfaitement autonome.Portable
Interoperable avec composants ActiveX