cours java beans

Upload: tolmous

Post on 02-Jun-2018

243 views

Category:

Documents


1 download

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