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

avec Java Discussion :

this & état initial d'un objet


Sujet :

avec Java

  1. #1
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut this & état initial d'un objet
    salut a tous .
    je sais qu'on peut faire autrement mais je veut vérifier si on peut enregistrer l'état d'un objet lors de sa création avec le mot clé this

    voila un exemple explicatif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class MonClasse
    { 
     
     MonClasse etat_Initiale;
     
     
    public MonClasse(pram1,param2....)
    {
      etat_initiale = this;
    }
     
    }
    est ce qu'avec cette façon ,je peut récupérer l'état global(les valeurs de mes attirbuts initialement lors de la création...) après les avoir modifiers ultérieurement ?

  2. #2
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    Il me semble que pour utiliser this, il faudrait s'y prendre de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public MonClasse(pram1,param2....)
    {
      //etat_initiale = this;
      this.param1 = param1; this.param2 = param2;
    }
    N'étant pas vraiment sur, car débutant, peut être qu'une confirmation par essais pourrais conformé cet exemple.
    Cordialement.

  3. #3
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Microbulle Voir le message
    Bonjour,
    Il me semble que pour utiliser this, il faudrait s'y prendre de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public MonClasse(pram1,param2....)
    {
      //etat_initiale = this;
      this.param1 = param1; this.param2 = param2;
    }
    N'étant pas vraiment sur, car débutant, peut être qu'une confirmation par essais pourrais conformé cet exemple.
    Cordialement.
    oui tu as raison c'est comme ça qu'on utilise this (sans plus de détail sur comment et pourquoi) ,mais moi, je cherche la philosophie

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par slim_java Voir le message
    est ce qu'avec cette façon ,je peut récupérer l'état global(les valeurs de mes attirbuts initialement lors de la création...) après les avoir modifiers ultérieurement ?
    Le mot clé "this" représente l'instance sur laquelle tu travailles.
    En effectuant "etatInitial = this;" tu stockes cette instance dans une variable nommée etatInitial. Si ensuite tu modifies "this", alors "etatInitial" sera modifié de la même manière, puisque les deux variables pointent vers la même instance.
    Si tu veux vraiment stocker l'état initial d'un objet avant de modifier celui-ci, il faut vraiment le copier, élément par élément si besoin...

  5. #5
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Le mot clé "this" représente l'instance sur laquelle tu travailles.
    En effectuant "etatInitial = this;" tu stockes cette instance dans une variable nommée etatInitial. Si ensuite tu modifies "this", alors "etatInitial" sera modifié de la même manière, puisque les deux variables pointent vers la même instance.
    Si tu veux vraiment stocker l'état initial d'un objet avant de modifier celui-ci, il faut vraiment le copier, élément par élément si besoin...
    ce que tu vien de dire est logique et marche avec toute 2 ,3...n référence qui pointent sur un même emplacement mémoire c'est pas ça qui m'inquiéter mais si je fait comme ça dans le constructeur :

    public Mon class(param1,param2....)
    {
    etat_Inial=new MonClasse(this);
    }

    alors ca marche ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par slim_java Voir le message
    ce que tu vien de dire est logique et marche avec toute 2 ,3...n référence qui pointent sur un même emplacement mémoire c'est pas ça qui m'inquiéter mais si je fait comme ça dans le constructeur :

    public Mon class(param1,param2....)
    {
    etat_Inial=new MonClasse(this);
    }

    alors ca marche ?
    Salut,

    Ça marchera si tu as bien défini ton constructeur par copie
    Tu peux aussi implémenter Clonable et implémenter la méthode clone()
    Notamment lors de la copie d'objets non immuables, par exemple
    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
    22
     
    public class MaClasse {
     
      private MaClasse initialState;
     
      private Date date; // java.util
     
      public MaClasse(...) {
        initialState = this.clone();
      }
     
      public MaClasse clone() {
     
        MaClasse result = new MaClasse();
     
        result.date = this.date; // -> si tu modifies ta date, celle de l'état initial sera modifiée
        result.date = new Date(this.date.getTime()); // tu as une nouvelle instance de date, donc plus de problème
     
        return result;
     
      }
    }
    Bref il faut bien faire attention lors de la copie.
    Autre remarque : quel est l'état initial de ton instance état initial ? tu as pas peur de boucler infiniment ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par slim_java Voir le message
    ce que tu vien de dire est logique et marche avec toute 2 ,3...n référence qui pointent sur un même emplacement mémoire c'est pas ça qui m'inquiéter
    Bah ça n'avait pas l'air clair pour toi, ou sinon tu n'aurais pas du poser la question


    Citation Envoyé par slim_java Voir le message
    mais si je fait comme ça dans le constructeur :
    public Mon class(param1,param2....)
    {
    etat_Inial=new MonClasse(this);
    }
    Là, clairement, etat_Initial contient une nouvelle instance de MonClasse, donc les modifications effectuées sur "this" ne l'affecteront pas directement. Ensuite, il reste à définir le constructeur MonClasse(MonClasse), de façon à ce que l'état de l'objet donné en paramètre soit bien copié dans le nouvel objet créé...
    Évidemment, si certains champs de MonClasse sont des objets et que tu te contentes de copier leur référence, alors toute modification sur ces objets sera visible dans etat_Initial... A toi de voir si tu veux ou non effectuer une copie "en profondeur".

  8. #8
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par George7 Voir le message
    tu as pas peur de boucler infiniment ?
    oui c'est ce qui m'ai venu à l'esprit ,je vais optez pour le constructeur par copie et faire preuve de patience

  9. #9
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Peut être que cette idée sera valable.
    Pourquoi ne pas stocker tes états initiaux dans un tableau? Les accès, par la suite serais simplifier, d'autant plus qu'il n'est pas nécessaire de déclarer par avance la taille du tableau et vue que la taille est disponible par la méthode ".lenght".
    Enfin je dit ça, je ne dit rien
    C'est une simple suggestion

  10. #10
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Bah ça n'avait pas l'air clair pour toi, ou sinon tu n'aurais pas du poser la question
    cette fois ,ce que tu disais sera logique si j'ai poster ma question avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     etat_Inial = reférenceObjet
    avec reférenceObjet autre que this

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Microbulle Voir le message
    Peut être que cette idée sera valable.
    Pourquoi ne pas stocker tes états initiaux dans un tableau? Les accès, par la suite serais simplifier, d'autant plus qu'il n'est pas nécessaire de déclarer par avance la taille du tableau et vue que la taille est disponible par la méthode ".lenght".
    Enfin je dit ça, je ne dit rien
    C'est une simple suggestion
    Je suis pas sûr de comprendre ton idée ?
    En plus que veux tu dire par : "d'autant plus qu'il n'est pas nécessaire de déclarer par avance la taille du tableau et vue que la taille est disponible par la méthode ".lenght""
    La taille d'un tableau en Java est statique et il faut la donner à l'instantiation.
    Bref tu peux expliquer ce que tu entends dans ton idée stp ?

    A plus

  12. #12
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Effectivement, j'ai commis une erreur suffisament grosse que je n'e l'ai pas vue au départ. Il faut indiqué la quantité au moment de la créer. Ce que je voulais dire c'est au moment de sa définition, il peut procédé ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int [] TTableau;
    ...
    utilisation
    ...
    Et que, comme il sait quels état initiaux il utilise, ou il veut sauvé l'état, il crée une case pour chaque. Pour avoir la quantité totale et se déplacé avec une boucle, il n'a pas besoin de compté les cases, un simple length suffit.
    d'où mon idée qui peut être une mauvaise idée.

  13. #13
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    Peut être que le plus simple c'est d'implementer cloneable, non?
    Ensuite soit tu peu faire un MaClasse.clone(); soit il te faut redefinir la methode clone... c'est juste une idée...

  14. #14
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut
    c'est maintenant que j'ai fini le codage de mon module.c'était trop dure vraiment.
    j'ai opté pour le constructeur par copie en stockant les valeurs de mon instance dans un autre objet (pas de méme type en grainte de boucler infinément).pour les débutants,cette méthode marche bien mais dans mon cas ça a pas tourné car mon objet n'est pas stable
    la découverte de l'anomalie n'a pas était facile mais bon ..la solution qui ma résolue le problème était de stoker les valeurs des attributs de mon objets a l'extérieur de l'objet (pas dans les attribut de l'objet).....
    pour indication ,je travail avec la création des graphiques sous java et mon objet dont je vous parler était une instance de la classe Area alors que les méthodes que qui m'ont embéterrr étaient intersect() ,subsract.()... @ +

Discussions similaires

  1. Réponses: 11
    Dernier message: 08/05/2014, 18h10
  2. [CKEditor] modifier état initial pour ajout modèle
    Par damien40 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 04/05/2007, 10h40
  3. Exporter un état dans Word avec objet
    Par dinette dans le forum Access
    Réponses: 12
    Dernier message: 04/01/2007, 15h15
  4. Un état pour un seul objet
    Par spekal dans le forum UML
    Réponses: 1
    Dernier message: 20/06/2006, 09h53
  5. photo sur état depuis cadre d'objet
    Par Ps4 dans le forum Access
    Réponses: 2
    Dernier message: 23/09/2005, 10h58

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