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 :

instance d'un objet


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut instance d'un objet
    Bonjour,
    Je me pose quelques petites questions:

    Je crée un objet Carte qui est renseigné par trois variables d'instances, puis je crée deux instances de cet objet que j'appelle carte1 et carte2.

    Alors, si je fais carte1=carte2, il me semble que je copie les chemins d'accès de telle manière que carte1 conduit à carte2. Cela ne veut pas dire que les variables d'instances de carte 1 sont modifiées pour correspondre à celle de carte2.
    Est-ce que c'est bien ça?

    Et si je fais un test sur (carte1==carte2), il me semble que le résultat est true, car le test vérifie que les chemins d'accès sont les mêmes , il ne regarde pas les variables d'instances.
    Est-ce que c'est bien ça?

    Enfin, si je modifie les variables de carte1
    carte1.nom="temple";
    est ce que cette modification de carte1 est copiée dans carte2?
    autrement dit, après le test suivant
    carte2.getNom()=="temple";
    est ce que le résultat est true?

    Merci bcp

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Citation Envoyé par tanguy.L Voir le message
    Bonjour,
    Je me pose quelques petites questions:

    Je crée un objet Carte qui est renseigné par trois variables d'instances, puis je crée deux instances de cet objet que j'appelle carte1 et carte2.

    Alors, si je fais carte1=carte2, il me semble que je copie les chemins d'accès de telle manière que carte1 conduit à carte2. Cela ne veut pas dire que les variables d'instances de carte 1 sont modifiées pour correspondre à celle de carte2.
    Est-ce que c'est bien ça?
    Oui et non... j'ai l'impression que tu confonds deux ou trois trucs.

    Il y a, d'un coté, des instances, quelque part en mémoire. La notion de chemin d'accés n'existe pas en java, du moins pas au niveau ou nous en sommes (c'est au niveau du garbage collector qu'on dit qu'une instance est accessible, mais c'est sans importance pour nous).

    Ces instances sont, en quelque sorte, en l'air.

    De l'autre coté, il y a des références (les fameux pointeurs du C). Une référence indique une instance, mais une instance peut être indiquée par plusieurs références. Ces références sont la seule façon de désigner une instance dans ton code.

    Souvent, pour raisons pratiques, on confond référence et instance. Quand on parle de l'instance toto, cela veut bien souvent dire une référence nommée toto qui pointe sur une instance.

    Donc, si on reprend ton exemple, lorsqu tu crées un objet Carte, cela veut dire créer un objet de classe Carte, objet qui n'a pas de désignation, appelons-le, puisqu'il faut tout de même l'appeler, A. Cet objet A, ensuite, tu vas l'affecter à une référence nommée carte1, puis à une référence nommée carte2. Dans cette dernière opération, il n'y a aucune modification des paramètres, puisqu'il n'y a aucune modif de l'objet A.

    On code, cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Carte carte1 = new Carte(); // Je crée un objet Carte (l'objet dit "A"), puis je l'affecte à la référence "carte1".
    carte2 = carte1; // carte2 et carte1 pointent vers le même objet, dit "A", objet qui ne change pas lui même.


    Citation Envoyé par tanguy.L Voir le message
    Et si je fais un test sur (carte1==carte2), il me semble que le résultat est true, car le test vérifie que les chemins d'accès sont les mêmes , il ne regarde pas les variables d'instances.
    Est-ce que c'est bien ça?
    Oui.
    Citation Envoyé par tanguy.L Voir le message
    Enfin, si je modifie les variables de carte1
    carte1.nom="temple";
    est ce que cette modification de carte1 est copiée dans carte2?
    Elle n'est pas copiée, car carte1 et carte2 référencent le même objet. Donc, du simple fait que carte1 et carte2 indiquent le même objet, toute modification par un biais est reconnue par l'autre.
    Citation Envoyé par tanguy.L Voir le message
    autrement dit, après le test suivant
    carte2.getNom()=="temple";
    est ce que le résultat est true?
    Et (prabablement) non !

    ... par contre, carte1.getNom() == carte2.getNom() donnera true. Ton exemple est perturbé par le fait que "temple" est une chaine de caractère, et que les chaines sont des objets traités de façon un peu spéciale en Java. Disons que si tu avais pris un entier au lieu d'une chaine de caractères, tu aurais eu raison.

    Hormis ce problème de chaine de caractères, comprends-tu mieux le principe des objets, références, etc ?

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    ok
    Alors si j'ai bien compris:
    Il y deux actions qui sont réalisées par ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Carte carte1=new Carte ();
    tout d'abord on alloue l'espace nécessaire à une nouvelle instance de l'objet Carte, puis on dit que l'on accède à cette instance par le biais de la référence carte1.

    Ainsi qd on fait:

    On ne fait que dire que la référence carte 2
    pointe sur la même instance de Carte que carte1

    cette référence que ce soit carte1 ou carte2 permet de modifier les variables d'instances de mon instance d'objet Carte

    le test carte1 == carte2 est alors true
    par contre si je veux tester les caractéristiques de mon instance il faut que j'utilise des getters

    Alors qu'en penses tu?
    Merci d'avance

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Oui, c'est ça.

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

Discussions similaires

  1. utiliser la même instance d'un objet plusieurs fois
    Par mhamedbj dans le forum NetBeans
    Réponses: 7
    Dernier message: 08/03/2007, 18h28
  2. Récupérer une instance d'un objet
    Par MDiabolo dans le forum MFC
    Réponses: 9
    Dernier message: 26/01/2007, 10h41
  3. Destruction en instance d'un objet
    Par TicTacToe dans le forum Delphi
    Réponses: 3
    Dernier message: 16/12/2006, 10h57
  4. Réponses: 8
    Dernier message: 11/07/2006, 17h27
  5. Sauver l'instance d'un objet dans un TMemoryStream
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 11/09/2005, 09h23

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