Sérialisation des objets

Slides:



Advertisements
Présentations similaires
Quelques classes. La classe Object Il s agit de la classe principale, elle contient les fonctions : protected Object clone() qui crée et retourne une.
Advertisements

X. BLANC & J. DANIEL , Le langage Java X. BLANC & J. DANIEL ,
Le mécanisme des exceptions
Flots et Sérialisation des objets
Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
(Classes prédéfinies – API Java)
F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »
Voisin-Polian : Introduction à Java 1 Introduction à Java - les flots - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
JAV - TD 6 Structures de données JAVA
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
1 Le mécanisme des exceptions Qu'est-ce qu'une exception? Comment définir et signaler des exceptions? Comment récupérer des exceptions?
Traitement des erreurs en Java
Programmation orientée objet
COURS DE PROGRAMMATION ORIENTEE OBJET :
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Cours d ’Informatique, DEUG 2 MASS/MIASS
1 Cours JAVA / Y.Laborde Java : Les FLUX de données Les flux de données introduction les flux binaires les flux binaires de sortie (FBS) les flux binaires.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Système d’Exploitation
Introduction à la programmation (Java)
1 Part3 3 2 Exception Générée par un problème de programme Objet définissant une erreur Peut être saisie et traitée par un programme Une erreur: situation.
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Cours 8 (18 novembre 2011) exceptions. héritagePOO-L3 H. Fauconnier2 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X();
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
Communication entre processus From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre.
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
Mastère MIAGE, Compléments de RMI. Mastère MIAGE, Passage de paramètres Le but de RMI est de masquer la distribution Idéalement, Il faudrait.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.
11/04/ L'héritage Cours 7 Cours 7.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
Systèmes distribués Plusieurs technologies existent : Les sockets
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
Tutorat en bio-informatique
Entrées / Sorties.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Strings et Tableaux en Java
Les sockets.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
1 Chapitre III (~70 transparents) Compléments. 2 Au sommaire de ce chapitre 1. Les fichiers Les classes utilitaires
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Fichier et Stream d’Entrée-Sortie IFT1025, Programmation 2 Jian-Yun Nie Version court par Douglas Eck; Version
Introduction à la programmation objet avec java
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
JAVA Les Entrées-sorties
STREAMS (et fichiers).
Lecture/Écriture de fichiers (I/O)
Transcription de la présentation:

Sérialisation des objets

Qu'est-ce qu'un flot? flux stream Un objet capable de transférer une suite d'octets soit d'une source externe vers le programme clavier, fichier, réseau ... source programme Flot d'entrée soit du programme vers une cible externe écran, fichier, réseau, imprimante ... programme cible Flot de sortie

La jungle des flots ( 60 classes) Package java.io aussi java.util.zip Flots binaires Information transmise telle quelle octet par octet Flots de texte Information subit une transformation ("formatage") pour passer au format texte de la machine hôte

Exemple : écrire des caractères dans un fichier Flot de sortie programme fichier par un flot binaire Car UNICODE sur 2 octets ces 2 octets Flots de texte Car code local sur 1 octet Car UNICODE sur 2 octets cet octet Car LF UNIX Car CR et LF MS-DOS '\n'

Flots binaires OutputStream InputStream Manipulent des octets ou tableaux d'octets Attention, entêtes des méthodes trompeuses public abstract int read() throws IOException 1 octet stocké dans un int (0..255) ou -1

Flots binaires utilisés InputStream OutputStream octets DataInputStream DataOutputStream Manipulent des types primitifs + String FileOutputStream FileInputStream Permettent d'associer un flot binaire à un fichier

On "branche" donc des flots sur des flots Exemple : écrire dans un fichier programme fichier DataOuptut Stream FileOutput Stream int, float, char, .. String DataOutputStream fs = new DataOuputStream (new FileOuputStream("essai.b"));

Flots de texte Reader Writer abstraites Manipulent des caractères (UNICODE) InputStreamWriter InputStreamReader FileReader FileWriter Permettent d'associer un flot de texte à un fichier

En pratique on utilise Pour lire : BufferedReader méthode readLine() Pour écrire : BufferedWriter méthodes write (String) newLine() PrintWriter méthodes print println écrire tous les types primitifs + String Qu'on branche sur des flots de plus bas niveau

Et les objets? Les flots vus auparavant permettent de manipuler des : valeurs de type primitif tableaux de caractères chaînes de caractères (String) Les Objets? Il faut les décomposer. Comment?

"Chaque classe s'occupe des attributs qu'elle définit" (1) Répartition des tâches selon la relation d'héritage sauver(f) {écrire a dans f} A a sauver(f) { super.sauver(f) écrire b dans f } B b

(2) Répartition des tâches selon la relation de composition Objet o1 Classe C1 Objet o Classe C Objet o2 Classe C2 int i Classe C sauver(f) { o1.sauver(f) o2.sauver(f) écrire(i) dans f }

Exemple : application Shogun Les classes FrameJeu fenêtre principale PanneauJoueur panneau de gauche PanneauJeu panneau de droite Jeu gère la partie Echiquier dessine la grille EnsPieces ensemble de pièces d'un joueur Piece ce qui est commun à toutes les pièces PieceElem pièce "normale" PieceShogun pièce shogun = sauver jeu Sauver une partie en cours ?

Graphe de décomposition d'un objet aquiLeTour jeu Jeu pjeu PanneauJeu enspieces EnsPieces[] ensPieces[O] ensPieces[1] joueur EnsPieces EnsPieces vPieces Vector PieceShogun T Object[] PieceElem

Sérialisation "automatique" Classe java.io.ObjectOutputStream public final void writeObject(Object obj) throws IOException Classe java.io.ObjectInputStream public final Object readObject() throws OptionalDataException, ClassNotFoundException, IOException Ces classes permettent aussi de manipuler des types primitifs

Ces méthodes ne s'appliquent qu'à des objets sérialisables = dont la classe implémente l'interface Java.io.Serializable (interface "marqueur") Cette propriété s'hérite Si on prend le graphe de l'objet : tous les objets du graphe doivent être sérialisables (sinon NotSerializableException)

aquiLeTour jeu Jeu enspieces EnsPieces[] ensPieces[O] ensPieces[1] Piece joueur EnsPieces EnsPieces vPieces Vector PieceShogun T Object[] PieceElem Jeu, EnsPieces et Piece doivent implémenter l'interface Serializable

Le graphe peut être plus complexe qu'un arborescence

Le menu est géré par des attributs de la fenêtre (objet de la classe FrameJeu) JMenuBar JMenu JMenuItem sauver restaurer

Action associée à sauver : - choix d'un nom de fichier nomFic (utiliser FileDialog) - demander à jeu de se sauvegarder dans le fichier nomFic pjeu.jeu.sauve(nomFic);

Jeu public void sauve (String nomFic) throws IOException { ObjectOutputStream flotS = new ObjectOutputStream (new FileOutputStream (nomFic)); flotS.writeObject(this); flotS.close(); } L'objet jeu

Dans FrameJeu - dans constructeur de FrameJeu : JMenuItem mSauve = new JMenuItem("Sauver"); mRestaure.addActionListener (new ActionListener() { public void actionPerformed (ActionEvent e) { mSauveAction(e);} });

- Ailleurs dans FrameJeu : public void mSauveAction(ActionEvent evt) { … pjeu.jeu.sauve(nomFic); } Problème : throws IOException

mSauve.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) throws IOException { mSauveAction(e);} }); On n'a pas le droit de faire remonter les exceptions à actionPerformed (cf. interface ActionListener) Donc obligé de capturer les exceptions avant (dans mSauveAction par exemple)

public void mSauveAction(ActionEvent evt) { … try { pjeu.jeu.sauve(nomFic);} catch (IOException e) { // message sur fenêtre console par ex. // afficher aussi e.getMessage() } }

Action associée à restaurer : - choix d'un nom de fichier nomFic (utiliser FileDialog) - demander à jeu de se restaurer depuis le fichier nomFic Problème : c'est justement l'objet jeu qu'il faut créer => Une méthode statique dans Jeu qui crée un jeu pjeu.jeu = Jeu.restaure(nomFic);

Jeu public static Jeu restaure(String nomFic) throws IOException, ClassNotFoundException { ObjectInputStream flotE = new ObjectInputStream (new FileInputStream (nomFic)); Object o = flotE.readObject(); Jeu j = (Jeu) o; return j; }

Constructeur de FrameJeu mRestaure.addActionListener (new ActionListener() { public void actionPerformed(ActionEvent e) { mRestaureAction(e);} });

FrameJeu public void mRestaureAction(ActionEvent evt) { … try {pjeu.jeu = Jeu.restaure(nomFic);} catch (Exception e) {….} }

Sérialisation : la conclusion Avantages Automatique Peut gérer des objets complexes Inconvénient Flots binaires : fichiers pas lisibles