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

Langage Java Discussion :

[Language][débutant] "transient" où l'utiliser?


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de rabobsky
    Inscrit en
    Novembre 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 123
    Par défaut [Language][débutant] "transient" où l'utiliser?
    Bonjour,

    j'ai fait des recherches sur transient et je sais que c'est pour avoir des variables de transitions qui peuvent servir lors de calculs. Et cela permet également d'avoir une certaine sécurité par rapport aux variables qui ne sont pas enovoyés dans un Flux(?!).

    Mais j'ai vu des variables transient comme attribut d'une classe, et je ne comprends plus à quoi cela sert... car si c'est pour un calcul intemédiaire cela ne devrait pas être comme attribut d'une classe...

    Merci pour les réponses

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Tout ce que je sais de transient, c'est qu'il s'agit d'une qualification d'attribut de classe signifiant que l'attribut n'est pas persistant (la valeur de l'attribut n'est pas mémorisée lors de la sérialisation de l'objet).
    Quand tu parles de "variables de transitions", j'ai plutôt l'impression qu'il s'agit de variables temporaires.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 34
    Par défaut
    Pour sérialiser un objet, tu sérialises ses attributs. Or des problèmes peuvent apparaitre tel que des cycles de dépendance: si un objet A a un objet B pour attribut et que B a lui meme A pour attribut, alors quand tu sérialises A, tu serialises B (en meme temps que tous les attributs de A), donc tu sérialises A, donc tu sérialises B ...
    Pour eviter cela, il suffit par exemple de déclarer la variable de la classe de B qui contiendra A comme etant transient. Ainsi, lorsque tu serialiseras A, tu serialiseras B, mais lors de cette serialisation de B tu ne serialiseras pas A puisque la variable qui le contient a ete declaree transient et que comme te l'a indiqué Hervé, une variable déclarée transient ne sera pas sérialisée.

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Je ne vois pas l'intérêt de déclarer un attribut transient, mis à part peut-être le fait de gagner en espace disque (?)... mais je ne crois pas que ce soit pour la raison de "cycle de dépendance", car, comme le dit la Javadoc (j'ai mis en gras ce qui me fait dire ça) :
    The default serialization mechanism for an object writes the class of the object, the class signature, and the values of all non-transient and non-static fields. References to other objects (except in transient or static fields) cause those objects to be written also. Multiple references to a single object are encoded using a reference sharing mechanism so that graphs of objects can be restored to the same shape as when the original was written.

  5. #5
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Un exemple tout bête d'attribut que tu ne veux pas sérialiser, une variable contenant du temps. Tu n'as pas nécessairement envie, dans le cas d'une animation par exemple, que ta variable contienne un temps d'il y a 10 jours

  6. #6
    Membre confirmé Avatar de rabobsky
    Inscrit en
    Novembre 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 123
    Par défaut
    merci pour les réponses.

    Je me suis rendu compte que ce n'est pas le transient que je n'arrivais pas à comprendre mais plutot le mot sérialisable...

    Donc j'ai un petit tutoriel Java où cela me semble bien expliqué, dans les cours : http://java.developpez.com/cours/:

    si quelqu'un veut ajouter certaines choses je suis ouvert... car j'avoue ne pas encore maitriser serialiser.

    Merci encore!

    PS : je mettrais le TAG résolu d ici quelques jours... quand tout le monde aura dit ce qu il a à dire

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 34
    Par défaut
    Citation Envoyé par herve91
    Je ne vois pas l'intérêt de déclarer un attribut transient, mis à part peut-être le fait de gagner en espace disque (?)... mais je ne crois pas que ce soit pour la raison de "cycle de dépendance", car, comme le dit la Javadoc (j'ai mis en gras ce qui me fait dire ça) :
    The default serialization mechanism for an object writes the class of the object, the class signature, and the values of all non-transient and non-static fields. References to other objects (except in transient or static fields) cause those objects to be written also. Multiple references to a single object are encoded using a reference sharing mechanism so that graphs of objects can be restored to the same shape as when the original was written.
    Tout dépend de ton alogo de sérialisation. En effet, il n'existe pas "d'algo de reference". Cependant, on retrouve des similitudes entre beaucoup d'algos. Par exemple, ce que tu a mis en gras est effectivement bien géré par beaucoup d'algos: si un objet a deja ete serialisé, on ne va pas le resérialiser s'il est "possédé" par un autre objet, mais juste le référencer. Par contre, si ton algo n'est pas capable de détecter les cycles de dépendances, tu auras quand meme un pb, que tu peux resoudre grace au mot clé transient.

  8. #8
    Membre confirmé Avatar de rabobsky
    Inscrit en
    Novembre 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 123
    Par défaut
    et c est dit qu il y a l aspect securité... aussi

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