IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

[dé]sérialisation et héritage et références [XStream]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 68
    Par défaut [dé]sérialisation et héritage et références
    [dé]sérialisation et héritage


    Bonjour,

    voici ma problématique (simplifiée), je voudrais [dé]sérialiser deux listes d'objets sachant que la 2e liste référence des objets de la 1ere liste, mais avec des objets d'une classe-fille.

    Ex: j'ai une liste de Véhicules et une liste de Voitures qui héritent de Véhicules.
    La liste de Voitures référencent les données de la liste de Véhicules :

    List<Véhicule>
    véhicule1.type = "voiture"
    véhicule1.nbRoues = 4
    véhicule1.couleur = "blanc"
    véhicule1.propriétaire = Propriétaire1
    véhicule1.probleme = null

    List<Voiture>
    véhicule1.type = "voiture"
    véhicule1.nbRoues = 4
    véhicule1.couleur = "blanc"
    véhicule1.propriétaire = Propriétaire1
    véhicule1.probleme = null
    voiture1.chassis = "Coupé"

    Le problème est que lors de la sérialisation, on perd la notion d'héritage Véhicule/Voiture, et le fichier xml présentes les objets de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <list>
         <Véhicule>
              <type>voiture</type>
              <nbRoues>4</nbRoues>
              ...
              <probleme />
         </Véhicule>
    </list>
    <list>
         <Voiture>
              <type reference="Véhicule[0].type" />
              <nbRoues reference="Véhicule[0].nbRoues" />
              ...
              <chassis>Coupé</chassis>
         <Voiture>
    </list>
    Ce que je voudrais, c'est quelque chose comme ça, l'objet-fils référençant l'objet-mère et les valeurs de ses attributs propres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    <list>
         <Voiture reference="Véhicule[0]">
              <chassis>Coupé</chassis>
         </Véhicule>
    </list>
    On voit mieux le problème si on valorise voiture1.probleme, c'est-à-dire un attribut-mère via l'objet-fils, le véhicule1.probleme n'est pas valorisé, et on aura :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <list>
         <Véhicule>
              <type>voiture</type>
              <nbRoues>4</nbRoues>
              ...
              <probleme />
         </Véhicule>
    </list>
    <list>
         <Voiture>
              <type reference="Véhicule[0].type" />
              <nbRoues reference="Véhicule[0].nbRoues" />
              ...
              <chassis>Coupé</chassis>
              <probleme>qqch</probleme>
         <Voiture>
    </list>
    Y-at'il une solution à ce problème, ou alors peut être que j'ai raté un détail qui rend mon problème insolvable. (sauf traitement des données de manière empirique, à chaque désérialisation, je peux retrouver qui référence qui et réinstancier les bons objets)

    PS: si je ne suis pas clair, n'hésitez pas à demander des précisions.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par captain_mich Voir le message
    PS: si je ne suis pas clair, n'hésitez pas à demander des précisions.
    C'est quoi ces histoires de références, je croyais qu'on parlait d'héritage ?

    Qu'est-ce que tu fais, c'est quoi ton modèle et pourquoi ça mêle à la fois référence et héritage alors qu'en principe chacun suffit sans avoir besoin de l'autre ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 68
    Par défaut
    Ok ok, 'me suis mal exprimé. (c'est un peu flou pour moi, donc voila ...)

    Il y a héritage car une liste contient des objets du type-père et une autre liste contient des objets d'un type-fils. (une liste d'animaux et une liste de chiens, histoire de changer des voitures)
    Héritage car je manipule un type d'objets, que chacun de ses objets est sous-typé et possède ses propres comportements et attributs.

    Il y a référence car la liste-fille contient des éléments de la liste-mère (Milou est dans les deux listes, animaux et chiens, mais Garfield n'est que dans la liste d'animaux)
    Référence parce qu'un objet peut apparaitre dans plusieurs listes mais ne peut être dupliqué dans le contexte du traitement.

    C'est assez basique, mais j'ai du mal ...




    Celà dit, je pense voir le problème.

    Pour résoudre mon problème, il faut que je caste les objets (dès que je peux) dans la liste de référence, et ainsi avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <liste mère, classe Animal>
         <Chien>
              <nom>Milou</nom>
               ...
         </Chien>
         <Chat>
              <nom>Garfield</nom>
               ...
         </Chat>
         <Animal>
               <nom>Bubule</nom>
               ...
         </Animal>
    </list>
    <une liste fille, classe Chien extends Animal>
         <Chien reference="animaux[0]" />
    </list>
    <une autre liste fille, classe Chat extends Animal>
         <Chat reference="animaux[1]" />
    </list>
    Lors de la désérialisation, je retrouve ce que je voulais...

    Comme tu dis, l'un suffit à l'autre, c'est que j'ai bêtement codé sans me soucier de ce problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boost, héritage et sérialisation
    Par AF_2.8 dans le forum Boost
    Réponses: 3
    Dernier message: 19/11/2010, 09h42
  2. Sérialisation + Héritage
    Par kirua_sama dans le forum C#
    Réponses: 0
    Dernier message: 12/08/2010, 12h06
  3. Réponses: 15
    Dernier message: 29/07/2010, 22h03
  4. Passge par référence & héritage
    Par jsatla dans le forum C++
    Réponses: 11
    Dernier message: 04/01/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo