Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
La programmation Réseau
Java : Aspects Avancés La programmation Réseau
2
Communication par sockets
Les classes de java.net.* permettent très facilement de se connecter à une machine afin d’y établir des flux d’entrées/sorties. En java, la socket est équivalente à un gestionnaire d’entrée/sortie entre deux machines.
3
Protocoles de communication
Il existe deux protocoles utilisant les sockets en Java : TCP : Stream Socket Communication en mode connectéS Les applications sont averties lors de la déconnexion UDP : Datagram Socket Communication en mode non connectéS Plus rapide mais moins fiable que TCP
4
Protocole TCP Le serveur : Le client : Crée une socket
Attend une connection accepte la demande échange de données Le client : demande une connection création de socket échange de données
5
ServerSocket Définit une socket sur le serveur.
Pour créer une ServerSocket, il faut lui donner un numéro de port. Une fois crée, la socket Serveur attend une connection par la méthode accept(). Ex : ServerSocket s = new ServerSocket (8888) Socket socket = s.accept(); // attente d ’une connection
6
La Socket du client Se connecter sur une socket d ’un serveur, implique de connaître son adresse. InetAddress permet de récupérer une adresse à partir d ’un nom. La liaison d ’une socket à la socket serveur peut alors être demandée Ex : InetAddress addr = InetAddress.getByName("crabe"); Socket socket = new Socket(addr, Serveur_1.PORT);
7
Communication inter-socket
Les communication entre socket s ’effectue ‘ classiquement ’, par les flux d ’entrées, issus de la méthode getInputStream par les flux de sorties, issus de la méthode getOutputStream.
8
Communication inter-socket Exemple
ServerSocket s = new ServerSocket(8888); System.out.println("Socket lancee : " + s); try { Socket socket = s.accept(); // Attendre une connection System.out.println( "Connection acceptee: "+ socket); InputStream socket_in = new InputStream( socket.getInputStream()); DataInputStreaam in = new DataInputStreaam(socket_in); String str = in.readLine(); }
9
Protocole UDP Emission de paquets de données, rapide mais peu fiable
Définir un paquet à envoyer ou à recevoir par la classe DatagramPacket Définir une socket par la classe DatagramSocket
10
Emission de paquets import java.net.*; public class UDPClient {
public static void main(String arg[]) try String chaine = "un message"; byte[] data = chaine.getBytes(); InetAddress addr = InetAddress.getByName(null); DatagramPacket packet = new DatagramPacket(data, data.length, addr, 1234); DatagramSocket ds = new DatagramSocket(); ds.send(packet); ds.close(); } catch(Exception e){}
11
Reception de paquets import java.net.*; public class UDPServeur {
public static void main(String arg[]) try // Serveur DatagramSocket ds = new DatagramSocket(1234); while(true) DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); ds.receive(packet); System.out.println("Message: " + packet.getData()); } catch(Exception e){}
12
Une classe réseau : URL URL permet de créer des liens vers des pages internets : Exemple : URL url = new URL(" DataInputStream dis = new DataInputStream(url.openStream()); String line; while ((line = dis.readLine()) != null) System.out.println(line);
13
Exercice Un exemple classique de programmation réseau : le client-serveur. Un serveur est lancé sur une machine et attend la connexion d’un client. Puis, il récupère les lignes envoyées par le client, les affiche et les lui renvoie.
14
Java : Aspects Avancés Les Threads
15
Qu’est-ce qu’un thread?
Un thread est un processus qui hérite de son processus père. Java permet la mise ne commun de code, de données (« light weight process » ou « processus léger ») Le processus partage ses ressources système (entrées/sorties, ...). La programmation est enfin sans contrainte !
16
Utilité des processus Afin de « rendre la main » au programme principal. Afin d ’interagir efficacement. Pour la gestion des graphiques, des applets.
17
Définition d’un Thread
Pour créer une tâche, il suffit de faire hériter sa classe de la classe Thread. La principale méthode de Thread est run() qui doit être surchargée. C’est la méthode qui sera exécutée simultanément par les autres tâches du programme. La méthode yield() oblige la tâche à se reposer, pour laisser aux tâches la possibilité de s’exécuter La classe Thread implémente l’interface Runnable. Implémenter Runnable oblige à définir la méthode run().
18
Exemple de thread (1/2) class une_tache extends Thread {
une_tache(String nom) { super(nom); } // appel au constructeur de Thread public void run() while (true) System.out.println("Mon nom est : " + getName()); Thread.yield(); // petite pause }
19
Exemple de thread (2/2) class Exemple_tache_1 {
public static void main(String args[]) une_tache tache1 = new une_tache("tache 1"); une_tache tache2 = new une_tache("tache 2"); tache1.start(); tache2.start(); while (true) System.out.println("Je suis la tâche principale"); Thread.yield(); }
20
Run et Start La méthode run() est généralement placée dans une boucle infinie La méthode start(), est utilisée pour lancer le Thread et appelle la méthode run()
21
Accès simultanés à une ressource
La programmation multitâche implique le partage de ressources (mémoire, objets). Dans certains cas, ceci peut être problématique. Pour cela, Java dispose du mot clé synchronized qui assure l’exclusion mutuelle d’une section critique en informant le moniteur (gestionnaire de mémoire). exemple: public synchronised void compte() {…} empèche toute instance de la classe de lancer compte tant qu’elle ne s’est pas terminée. Lorsqu'un thread t1 exécute cette méthode à partir d ’un objet, un autre thread t2 ne peut pas l'exécuter à partir du même objet. Mais t2 peut l ’exécuter pour une autre instance de la même classe.
22
Synchronisation et efficacité
Chaque objet possède un verrou lock ou moniteur. (Cela fait partie de la classe Object). Exemple de verrou : ... synchronized (compteur) {compteur.add() ; compteur.mult() ; ...} Lorsqu'une méthode synchronisée d'un objet est appelée, le verrou est mis, aucune autre méthode synchronisée de cet objet peut être exécutée. Acquérir le verrou d'un objet est forcément coûteux. Il faut donc savoir gérer et diminuer au maximum les sections critiques.
23
Le processus dans tous ses états
Nouveau : il est créé mais start() n ’est pas encore appelé Exécutable : il a été initialisé (il est exécuté si l ’ordonnanceur le décide) Mort : fin normale d ’un Thead (sortie de la méthode run() Bloqué : l ’ordonnanceur ignore le Tread
24
Raison d ’un blocage Le thread peut être :
endormi : sleep(milliseconds) suspendu : par suspend(). Il sera alors relancé par resume() en attente : par wait(). Il pourra alors être réactivé par notify() ou notifyAll() IO : en attente d ’une Entrée/Sortie synch : en attente de la libération d ’une ressource synchronisée
25
Différence Wait/Suspend
Tient le verrou de l ’objet, donc bloque dons les méthode synchronisées et peut être source de DeadLock Wait ne tient pas les verrous et donc ne doit pas être appelé d ’un bloc synchronisé, sous risque d ’accès concurrent
26
Maintien en cohérence... Il faut éviter l ’utilisation de :
stop : cette méthode libère les verrous même si l ’objet est dans un état instable Il faut le remplacer par un test dans la boucle du run() lever l ’exception InterrupedException en utilisant la méthode interrupt() suspend (et donc resume), car ils sont sources de nombreux deadlock
27
Exercice Un exemple classique de programmation de processus : le producteur-consommateur. Un producteur produit des objets dans une pile, 2 consommateurs en consomment. Ecrire les classes Tab_objets, Producteur et Consommateur, ainsi que la classe principale.
28
Java : Aspects Avancés Les applets
29
Une Applet... Second type de programmation Java, le plus connu car le plus visible Ne peut être exécutée que depuis un Navigateur Le Navigateur doit contenir en interne une machine virtuelle sa propre méthode main
30
Les méthodes d ’une applet
Une applet est un objet graphique (descendant de panel), aussi contient elle des méthodes graphiques. Les principales méthodes d ’une applet sont : init(), que le navigateur appelle après chaque chargement de l’applet., start(), lancée après l’initialisation, stop(), arrête l’applet lorsqu’elle n’est plus visible, destroy(), appelé à l’arrêt du navigateur, ou au rechargement de l’applet, paint(Graphics g) est appelé chaque fois que l’applet est réaffichée.
31
Exemple d ’applet import java.awt.*; import java.applet.*;
public class Applet1 extends Applet { Font font; public void init() font = new Font("TimesRoman", Font.PLAIN,20); } public void paint(Graphics g) g.setFont(font); g.setColor(Color.red); g.drawString("Salut tout le monde!", 0, font.getSize()); g.draw3DRect(0, 0, 180, 30, true);
32
Insertion dans une page Web
L ’insertion est possible par le tag APPLET : <HTML> <HEAD> <TITLE>Exemple d'applet</TITLE> <BODY> <H1>Un exemple dapplet</H1> <applet code="Applet1.class" width=200 height=50> desole ... ce navigateur ne supporte pas les applets </applet> </BODY> </HEAD> </HTML>
33
Passage de paramètres dans une page Web
La méthode getParameter("msg") retourne la valeur du paramètre indiqué dans la page web. Pour passer les paramètres, il faut appeler l’applet dans la page web comme ceci : <Applet code="Applet1.class" width=300 height=200> <param name=msg value="voici le message"> </Applet>
34
Archiver les classes Lorsqu ’une applet utilise une autre classe située dans le même répertoire, elle charge cette classe, ce qui cause un ralentissement. Pour éviter les multiples chargement il faut compresser les classes avec jar L’appel à partir d’une page web se fera sous la forme : <Applet code="Applet1.class" archive= "nom_archive.jar" width=300 height=200> <param name=msg value="voici le message"> </Applet>
35
Applet permanente Toutes les applets utilisent la même machine virtuelle. Si l’on souhaite créer une applet à activité permanente (défilement de texte, d’images, ...), il faut la créer en tant que processus afin de ne pas bloquer les autres applets. Pour cela, il faut que l’applet implémente l’interface Runnable (similaire à Thread, mais qui permet de réécrire la fonction stop())
36
Exercice Ecrire une applet qui affiche un texte déroulant dans la barre d ’état du navigateur. On utilisera la fonction showStatus de l ’applet. La fréquence de défilement est passée en paramètre
37
AWT : Abstract Window Toolkit
Java : Aspects Avancés AWT : Abstract Window Toolkit
38
Généralités sur AWT AWT comporte :
Sylvain LECOMTE & Vincent POIRRIEZ Généralités sur AWT AWT comporte : des éléments graphiques des conteneurs Un mécanisme de gestion d'événements, ... AWT a beaucoup évolué entre et : nouveau modèle événementiel gestion de l'impression gestion de l'échange de données AWT a encore évolué avec Java Foundation Class et java.2D
39
Les objets graphiques de AWT
Sylvain LECOMTE & Vincent POIRRIEZ Les objets graphiques de AWT Les éléments graphiques Button Canvas (zone de dessin) Checkbox Choice Label List MenuBar MenuItem TextArea TextField
40
Sylvain LECOMTE & Vincent POIRRIEZ
Les conteneurs de AWT Les conteneurs sont les couches sur lesquels seront dessinés les objets : Frame Dialog Window Panel (conteneur de base) Les Gestionnaires de mise en page permettent de placer automatiquement les objets.
41
FlowLayout java.awt.FlowLayout : de gauche à droite, de haut en bas
Sylvain LECOMTE & Vincent POIRRIEZ FlowLayout java.awt.FlowLayout : de gauche à droite, de haut en bas one two three
42
Sylvain LECOMTE & Vincent POIRRIEZ
BorderLayout java.awt.BorderLayout découpe la zone en Nord, Sud, Est, Ouest et Centre North West Center East South
43
Sylvain LECOMTE & Vincent POIRRIEZ
GridLayout java.awt.GridLayout découpe la zone en une grille dont on peut choisir les dimensions one two three four five six
44
Sylvain LECOMTE & Vincent POIRRIEZ
Avantage de AWT Il permet de créer une interface graphique d ’exécutant sous toutes les interfaces (Windows, Xwindows, …) il simplifie la tâche du concepteur de l ’IHM (presque tous les objets sont présents)...
45
Sylvain LECOMTE & Vincent POIRRIEZ
Evenements Chaque objet graphique (ou presque) possède sa propre gestion dévénements, Java propose des interfaces d ’écoute (Window, Mouse, ...)Listener Pour les plux complexes, il existe des classes dont les méthodes ne font rien ! (Window, Mouse, ...)Adapter Avantage, si une classe hérite d ’une de ces classes, elle n ’a qu ’à surcharger la méthode désirée
46
Exemple d ’interface AWT
Sylvain LECOMTE & Vincent POIRRIEZ Exemple d ’interface AWT
47
Exemple d ’interface AWT (2)
Sylvain LECOMTE & Vincent POIRRIEZ Exemple d ’interface AWT (2) tfPanel chPanel lstPanel cbPanel rbPanel btPanel MenuBar Label TextField Choice List Checkbox Button
48
Exemple de label // Text Field Panel
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de label // Text Field Panel Panel tfPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("TextField"); tfdPanel.add(label); textField = new TextField(15); tfPanel.add(textField);
49
Sylvain LECOMTE & Vincent POIRRIEZ
Exemple de choix // Choice Panel Panel chPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("Choice"); chPanel.add(label); choice = new Choice(); choice.addItem("Solaris"); choice.addItem("Linux"); choice.addItem("Aix"); chPanel.add(choice);
50
Exemple de liste // List Panel
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de liste // List Panel Panel listPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("List"); listPanel.add(label); list = new List(); list.addItem("Solaris"); list.addItem("Linux"); list.addItem("Aix"); listPanel.add(list);
51
Exemple de cases // Checkbox Panel
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de cases // Checkbox Panel Panel cbPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); cbSolaris = new Checkbox("Solaris"); cbPanel.add(cbSolaris); cbLinux = new Checkbox("Linux"); cbPanel.add(cbLinux); cbAix = new Checkbox("Aix"); cbPanel.add(cbAix);
52
Exemple de bouton radio
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de bouton radio // RadioButton Panel Panel rbPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); rbGroup = new CheckboxGroup(); rbSolaris = new Checkbox("Solaris"); rbSolaris.setCheckboxGroup(rbGroup); rbPanel.add(rbSolaris); rbLinux = new Checkbox("Linux"); rbLinux.setCheckboxGroup(rbGroup); rbPanel.add(rbLinux); rbAix = new Checkbox("Aix"); rbAix.setCheckboxGroup(rbGroup); rbPanel.add(rbAix); rbGroup.setSelectedCheckbox(rbSolaris);
53
Evenement sur choix, boutons radios, cases et listes
Sylvain LECOMTE & Vincent POIRRIEZ Evenement sur choix, boutons radios, cases et listes ItemListener est l’interface permettant de gérer les événements sur les objets de type Choice, List et CheckBox Elle contient la méthode itemStateChanged(ItemEvent e) déclenchée lors de sélection/déselection d’un item.
54
Exemple de bouton // Button Panel
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de bouton // Button Panel Panel btPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); okButton = new Button("Ok"); okButton.addActionListener(new OkButtonListener()); btPanel.add(okButton); cancelButton = new Button("Cancel"); cancelButton.addActionListener(new CancelButtonListener()); btPanel.add(cancelButton);
55
Exemple de menu // Menu Bar Menu procMenu = new Menu("Procedural");
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de menu // Menu Bar Menu procMenu = new Menu("Procedural"); procMenu.add(new MenuItem("Pascal")); ... Menu ooMenu = new Menu("Object Oriented"); ooMenu.add(new MenuItem("SmallTalk")); Menu funcMenu = new Menu("Functional"); funcMenu.add(new MenuItem("Lisp")); Menu languageMenu = new Menu("Languages"); languageMenu.add(procMenu); MenuBar mb = new MenuBar(); mb.add(languageMenu);
56
Exemple de construction
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de construction public class FrameExample extends Frame { public FrameExample(String title) { super(title); ... setMenuBar(mb); setLayout(new GridLayout(0, 1, 2, 2)); add(textFieldPanel); add(choicePanel); add(listPanel); add(checkboxPanel); add(radioButtonPanel); add(buttonPanel); pack(); show();}
57
Exemple de gestion d’événement sur bouton
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de gestion d’événement sur bouton Gestion des événements : clic sur le bouton Ok okButton.addActionListener(new OkButtonListener()); public class OkButtonListener implements ActionListener { public void actionPerformed(ActionEvent evt) { System.out.println("textField = " + textField.getText()); System.out.println("choice = " + choice.getSelectedItem()); System.out.println("list = " list.getSelectedItem()); System.out.println("cbSolaris=" + (cbSolaris.getState() ?"Yes" : "No")); System.out.println("cbLinux=" (cbLinux.getState() ?"Yes" : "No")); System.out.println("cbWindow=" + (cbAix.getState() ?"Yes" : "No")); System.out.println("rbSolaris=" + (rbSolaris.getState() ?"Yes" : "No")); System.out.println("rbLinux=" (rbLinux.getState() ?"Yes" : "No")); System.out.println("rbWindow=" + (rbAix.getState() ?"Yes" : "No")); }
58
Exemple de gestion d’événement sur menu
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de gestion d’événement sur menu Gestion des événements : sélection d'items du menu MenuItem mi = new MenuItem("Pascal"); mi.addActionListener(new LanguageMenuListener()); public class LanguageMenuListener implements ActionListener { public void actionPerformed(ActionEvent evt) { System.out.println("Menu: " + evt.getActionCommand()}; }
59
Exemple de gestion d’événement sur fenêtre
Sylvain LECOMTE & Vincent POIRRIEZ Exemple de gestion d’événement sur fenêtre Gestion des événements : fermeture de la fenêtre addWindowListener(new MyWindowListener()); public class MyWindowListener extends WindowAdapter { public void windowClosing(WindowEvent evt) System.out.println("Window closing"); System.exit(0); }
60
Evenement sur champs de texte et zone de texte
Sylvain LECOMTE & Vincent POIRRIEZ Evenement sur champs de texte et zone de texte L’interface TextListener permet de gérer les événements sur les objets de type TextField et TextAera, Elle contient la méthode textValueChanged(TextEvent e) déclenchée lors de modification du texte
61
Autres gestions d ’événements (souris)
Sylvain LECOMTE & Vincent POIRRIEZ Autres gestions d ’événements (souris) On trouve aussi l’interface MouseListener qui définit les méthodes void mouseClicked(MouseEvent e) clic sur l’objet void mouseEntered(MouseEvent e) passage sur l’objet void mouseExited(MouseEvent e) sortie de l’objet void mousePressed(MouseEvent e) pression sur l’objet void mouseReleased(MouseEvent e) relâche de l’objet Cette interface est implémentée par la classe MouseAdapter qu ’il faudra étendre pour gérer les événements souris
62
Autres gestions d ’événements (fenêtre)
Sylvain LECOMTE & Vincent POIRRIEZ Autres gestions d ’événements (fenêtre) Ainsi que l’interface WindowListener qui définit les méthodes suivantes : void windowActivated(WindowEvent e) la fenêtre devient active void windowClosed(WindowEvent e) fermeture par un bouton ou autre void windowClosing(WindowEvent e) fermeture par menu système void windowDeactivated(WindowEvent e) la fenêtre n’est plus active void windowDeiconified(WindowEvent e) de minimisée à un autre état void windowIconified(WindowEvent e) minimisation void windowOpened(WindowEvent e) première ouverture Cette interface est implémentée par la classe WindowAdapter qu ’il faudra étendre pour gérer les événements sur la fenêtre.
63
Sylvain LECOMTE & Vincent POIRRIEZ
L ’objet graphics Les fonctions de la classe Graphics permettent de dessiner simplement différentes figures sur un support : clearRect, draw3Drect, drawArc, drawImage, drawLine, drawOval, drawPolygon, drawPolyline, drawRect, drawString, fill3Drect, fillArc, fillOval, fillPolygon, fillRect, getColor, getFont, setColor, setFont. Le support peut être tout objet descendant de Composant
64
Exercice Créer une Frame permettant de dessiner des lignes à l ’aide de la souris Utiliser un tableau de 10 Points pour tracer des lignes entre chaque Point.
65
Sylvain LECOMTE & Vincent POIRRIEZ
Java : Aspects Avancés Le Swing
66
Swing : Qu ’est ce que c ’est ?
Sylvain LECOMTE & Vincent POIRRIEZ Swing est un ensemble de librairies graphiques plus évoluées et plus complètes que les librairies AWT. Swing est livrée avec le JDK 1.2, pour JDK 1.1, il est possible de télécharger les classes swing.
67
Nouvelles Fonctionnalités
Sylvain LECOMTE & Vincent POIRRIEZ Swing propose de nouveaux composants tels que Les Tables, les Arbres, la Barre de progression… Les objets graphiques AWT ont été surchargés (on trouve maintenant les types JButton, Jpanel, ...) Avec Swing, il est possible de masquer certains événements Il est possible de "zaper" entre les différentes interfaces : l ’interface Windows l ’interface Motif une interface 3D « métale »
68
Sylvain LECOMTE & Vincent POIRRIEZ
Un exemple de swing... import javax.swing.*; import java.awt.*;import java.awt.event.*; public class SwingApplication { private static String labelPrefix = "Number of button clicks: "; private int numClicks = 0; public Component createComponents() final JLabel label = new JLabel(labelPrefix + "0 "); JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) numClicks++; label.setText(labelPrefix + numClicks); } } ); label.setLabelFor(button); }
69
Un exemple de swing Suite...
Sylvain LECOMTE & Vincent POIRRIEZ Un exemple de swing Suite... public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } //Create the top-level container and add contents to it. JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); //Finish setting up the frame, and show it. frame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0); } }); frame.pack(); frame.setVisible(true); }
70
Sylvain LECOMTE & Vincent POIRRIEZ
Swing dans une applet Il est tout à fait possible de créer des applets utilisant des composants swing. Il faut alors être sûr que les navigateurs des utilisateurs pourront interpréter le swing. import javax.swing.*; import java.awt.*; public class HelloSwingApplet extends JApplet { public void init() JLabel label = new JLabel("You are successfully running a Swing applet!"); label.setHorizontalAlignment(JLabel.CENTER); //Add border. label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black)); getContentPane().add(label, BorderLayout.CENTER); }
71
Un autre exemple : un menu
Sylvain LECOMTE & Vincent POIRRIEZ Un autre exemple : un menu
72
Sylvain LECOMTE & Vincent POIRRIEZ
Conclusion sur Swing Swing offre surtout beaucoup plus de composants que AWT (trop ?) : Le rendu est meilleur Les options nombreuses Mais l ’API est encore difficile à connaître ne pas hésiter à utiliser le Tutorial...
73
Sylvain LECOMTE & Vincent POIRRIEZ
Java : Aspects Avancés Les JavaBean
74
Sylvain LECOMTE & Vincent POIRRIEZ
La notion de composant Un bean Java est un composant réutilisable (sorte d ’active X) Il facilite donc la création de programmes par connexion de composants Java propose déjà un ensemble de composants très utiles (le bean hotjava par exemple pour afficher une page web, ...) Pour développer, utiliser des beans, il existe le bdk, le kit de développement de beans ...
75
Outil de développement
Sylvain LECOMTE & Vincent POIRRIEZ Outil de développement Réserve de composants Application Propriété du composant sélectionné
76
L ’introspection Permet à un système de se regarder lui même Exemple :
Sylvain LECOMTE & Vincent POIRRIEZ L ’introspection Permet à un système de se regarder lui même Exemple : Les objets de la classe Class représente des classes du système Les objets de la classe Method représente des méthodes On peut alors rechercher une classe par son nom Class classButton = Class.forName("Button"); et créer une nouvelle instance de cette classe Objetc myButton = classButton.newInstance(); et récupérer toutes les méthodes de cette classe : Method [] bmethods = classButton.getDeclaredMethods();
77
Qu ’est ce qu ’un Beans ? Un composant qui possède :
Sylvain LECOMTE & Vincent POIRRIEZ Qu ’est ce qu ’un Beans ? Un composant qui possède : des propriétés des événements reconnus des méthodes de traitement des événements Importance de l ’introspection : possibilité d ’interroger le composant Quelles sont tes méthodes, les variables, les événements traités
78
Types de Beans Component (montre, barre, synoptique, ...)
Sylvain LECOMTE & Vincent POIRRIEZ Types de Beans Component (montre, barre, synoptique, ...) Container (panneau, ...) Invisible (ne possède pas d ’interface graphique ) joue le rôle d ’interface Applet
79
Sylvain LECOMTE & Vincent POIRRIEZ
La double vie des Beans Pendant la configuration dans le BDK le Bean peut posséder sa propre interface graphique de configuration Le bean est sérializé à la fermeture du bdk, il est désérialisé (rechargé) à l exécution. Les méthodes du bean sont activés par des événements.
80
Classes d’évènements prédéfinies
Sylvain LECOMTE & Vincent POIRRIEZ Classes d’évènements prédéfinies Evénements de bas niveau java.util.EventObject java.awt.AWTEvent java.awt.event.ComponentEvent java.awt.event.FocusEvent java.awt.event.WindowEvent java.awt.event.InputEvent java.awt.event.KeyEvent java.awt.event.MouseEvent
81
Créer un Bean... 1. Ecrire le source : C ’est un rectangle rouge
Sylvain LECOMTE & Vincent POIRRIEZ Créer un Bean... 1. Ecrire le source : C ’est un rectangle rouge import java.awt.*; import java.io.Serializable; public class SimpleBean extends Canvas implements Serializable { public SimpleBean() { setSize(60,40); setBackground(Color.red); }} 2. Créer un fichier jar contenant la classe SimpleBean
82
Créer un Bean (suite) 3. Charger le .jar dans la ToolBox
Sylvain LECOMTE & Vincent POIRRIEZ Créer un Bean (suite) 3. Charger le .jar dans la ToolBox 4. Créer une instance de la classe dans la BeanBox On peut se rendre compte que le Bean dispose d ’un certain nombre de propriétés (qui sont en fait héritées de Canvas) : Foreground Background font name
83
Ajouter une propriété Exemple : la propriété de « couleur »
Sylvain LECOMTE & Vincent POIRRIEZ Ajouter une propriété Exemple : la propriété de « couleur » 1. Créer et initialiser l ’atribut : private Color color = Color.green; 2. Ecrire une méthode pour obtenir la couleur : public Color getColor() {return color;} 3. Ecrire une méthode pour changer la couleur public void setColor(Color newColor){ color = newColor; repaint();} 4.Réécrire la méthode paint() héritée de Canvas : public void paint(Graphics g) { g.setColor(color); g.fillRect(20, 5, 20, 30);} 5.Compiler le Bean, le charger dans la Toolbox et créer une instance dans la BeanBox.
84
Sylvain LECOMTE & Vincent POIRRIEZ
Résultat
85
Sylvain LECOMTE & Vincent POIRRIEZ
Enterprise Java Beans Ce sont les Beans contenant une couche client serveur, très à la mode en ce moment (commerce électroniques, accès à ds bases de données distantes, communication aux travers de site web,...)
86
Sylvain LECOMTE & Vincent POIRRIEZ
Java , suite Et non fin, cf. Internet, de nombreuses applications de Java à tous niveaux, possibilité d ’inclure des librairies C, notions de servlet pour communication de données d ’un client vers un fournisseur par html, accès sécurisé, xml,
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.