Title: Plan du cours
1Plan du cours
- La sérialisation
- comment stocker et restaurer les Objets?
- Les interfaces graphiques et la programmation
évènementielle. - Comment concevoir les écrans?
- Comment programmer les évènements?
- Comment développer une application en java?
- Les Threads ou les processus légers
- Quest ce que la programmation parallèle.
- Comment programmer les processus en java
- Les Applets java sur le Web.
- Comment utiliser java pour programmer vos pages.
2Exemple Entrée/Sortie
Sérialisation
3problématique
- La portée de chaque variable est limitée au bloc
de déclaration. - A la fin de lapplication, les variables (objets)
sont détruites par le GarbageCollector (perte de
données). - Certaines variables ou objets (pour des raisons
applicatives) doivent persister à la fin du
programme.
4Exemple gestion des employés
- On veut écrire un programme de saisie demployés.
- Solution
5Solution
- Trouver le moyen de persister les données.
- Solution utiliser un fichier pour stocker les
données - Définir un modèle de stockage des Objets
- Définir le moyen de restauration des Objets
- Exemple
- public class MyClass
- public void saveYourself(Writer o)
- throws IOException
- public static MyClass loadYourself(Reader r)
- throws IOException
6Limite de cette solution
- Le stockage de lobjet passe par le stockage de
ses données membres. - Chaque Objet membre doit appartenir à une classe
qui implémente le même mécanisme. - Impossible de passer par les interfaces (la
méthode de restauration doit être static). - La solution devient très complexe pour gérer les
références
7Problème de reférence
Emp1. saveYourself(Writer o) Emp2.
saveYourself(Writer o) Emp2. saveYourself(Writer
o)
employé4
Emp1Employé.loadYourself(Reader
r) Emp2Employé.loadYourself(Reader
r) Emp3Employé.loadYourself(Reader r)
8La sérialisation
- Le mécanisme offert par Java pour persister les
données. - Un format uniforme pour formater les objets sous
forme dune séquence doctets. - Il gère le problème de référence.
- Offre dautres mécanismes de personnalisation
9Les Conditions nécessaires
- Le type de lobjet (Class) doit être déclaré
public - La classe doit disposer dun constructeur à zéro
paramètres - La classe doit implémenter linterface
Serialisable - Toutes les données membre doivent être
sérialisable type primitive ou des classes
qui implémentent Serialisable .
Les données membres static et static final ne
sont pas sauvegardées
10Implémentation de linterface Serializable
- Implémenter une interface induit à
limplémentation de ses méthodes, Mais - Serializable ne définit aucune méthode.
- Question1 A quoi sert une interface sans
méthodes? - Réponse Serialisable est une interface drapeau
qui informe lenvironnement Java pour traiter la
Classe de manière particulière. - Question2 pourquoi toutes les classes
nimplémentent pas Serializable par défaut ? - Réponse problème de sécurité (voire la suite).
11Sérialiser un Object
- La Classe ObjectOutputStream.
- Elle prend en paramètre un OutputStream
- Utilise la méthode writeObject(Object)
public class employé implements Serializable
public class Sauvgarder public static
void main() Employé emp1new Employé() Object
OutputStream outnew ObjectOutputStream(
new FileOutputStream(fileName)) out.writ
eObject(emp1) Out.close
12Restaurer un objet ( de-sérialiser )
ObjectInputStream in new ObjectInputStream(
new FileInputStream(fileName)) Employé
emp1((Employé)in.readObject()
- Faut savoir à lavance le type de lobjet.
- Utilisé la classe ObjectInputStream.
- Prend un object InputStream.
- Utilise la méthode readObject().
- Type de retour Object.
- Il faut savoir le type (pour le transtypage).
- Vous pouvez utiliser la méthode. getClass() pour
savoir le type effectif.
13Exemple problème de référence
emp2
2
emp3
ObjectInputStream innew ObjectOutputStream(
new FileInputStream(fileName)) emp1
((Employé)in.readObject()) emp2
((Employé)in.readObject())// ne crée pas dobjet
emp3 ((Employé)in.readObject())
14 Aspects avancés
- Sécurité
- Une objet sérialisé est un fichier UTF(texte).
- Un objet sérialisé peut être lu et modifié.
- le mot clé transient
- Certaines données (non static) ne doivent pas
être stockées (les valeurs calculées, mot de
passe) - Le mot clé transient informe java de ne pas
sérialiser la variable en question.
public class Employé implements Serializable
private transient double salaire
// le salaire ne sera pas sérialisé
15En résumé
- Désormais, il est possible de sauvegarder les
variables objets. - Implémenter linterface Serialisable
- Utilisez ObjectInputStream ObjectOutputStream
pour stocker et restaurer les objets. - Les objets restaurés sont de type Object
(transtypage). - Faites attention lors de lhéritage, les classes
mères doivent avoir des contructeurs à zéro
paramètres
16Les Interfaces graphiques
17Les interfaces graphiques Introduction
- Une application est une boîte noire.
- Prend des entrées et produit des sorties.
- Les utilisateurs ne sont pas des programmeurs.
- Nécessité dun mécanisme dinteraction entre
lutilisateur et lapplication - Echanger les données.
- Echange de contrôle.
18Solution la plus basique les Intput/output
Stream
- Vous pouvez passer par des objets de gestion de
flux ou de données pour interagir avec
lutilisateur. - Saisir les données dans un fichier ou à partir du
clavier (System.in, InputStream). - affichage des résultats sur la console ou dans
des fichiers (System.out et OutputStream).
19Inconvénients
- Très lourde (beaucoup de code pour peut de
chose). - Peu adaptée pour les interactions de type
contrôle. - Pas du tout intuitive il faut connaître pour
pouvoir lutiliser - certains types de données ne peuvent être gérés
en tant que flux.
Solution Les interfaces graphiques
20Faire une interface graphique...
- Comment construire un écran graphique ?
- Comment gérer les événements ?
- Comment maintenir la cohérence entre les objets
applicatifs / objets graphiques ?
21Définition des écrans !
- Une application plein d écrans graphiques
- Un écran graphique 1 arbre de composants
graphiques - La racine La fenêtre
- Les feuilles des composants atomiques (button,
List, TextField) - Les nuds des conteneurs (des zones pour mettre
des composants atomiques)
22Exemple très simple
23Exemple un arbre de composant graphique
Les nuds des containeurs
saisir Frame
?????
ajout
Buttonl
nom
post TextField
Label
Les feuilles composants atomiques
24Étape1 Comment construire des écrans Graphiques ?
- Java offre une pléthora de composantes
graphiques. - Deux packages java.awt. javax.swing.
- Le package swing est une extension de awt
- On peut les classer selon trois catégories
- Les composantes écrans
- Les composantes de gestion demplacement les
containers - Les composantes graphiques atomiques.
- Les composantes de type menus.
25Une vue partielle sur le modèle de classe du
package swing
Une classe abstraite!
Les composants atomiques
JComponent
(from awt)
component
Les composants composites !
Container
JButton
TextComponent
(from awt)
(from awt)
(from awt)
JTextField
Panel
JWindow
(from awt)
JList
Pas de nouvelles fenêtres
JFrame
26La classe JFrame
- La classe qui permet de créer des fenêtres
- Cest lobjet racine
- Sous classe de la classe Frame de awt.
- Elle maintient un objet de gestion de composants.
Frame (awt)
Interface WindowConstants
JFrame
Interface RootPaneContainer
JRootPane
27Les constructeurs de JFrame
- Deux constructeurs
- public JFrame()
- public JFrame(String titre)
- Exemple
public static void main(String args)
//mode daffichage par défaut (mode
java) JFrame.setDefaultLookAndFeelDecorated(true)
Jframe e new JFrame( Ecran de saisie
Employé") e.setSize(300,40)//spécification de
la taille e. show() //affiche la composante de
type écran en mode java
Largeur300
Hauteur40