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 :

Les objets en Java


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut Les objets en Java
    Bonsoir

    dans le cours publié ici sur developpez.com qui s'intitule 'développons en Java" de M.J M Doudoux , on parle de la notion des objets en Java et on dit que:
    "Chaque instance d'une classe nécessite sa propre variable. Plusieurs variables peuvent désigner un même objet."

    quelqu'un pourrait m'expliquer
    merci

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Soit une classe "Chaise" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Chaise{
     
    }
    Chaise représente mon objet.

    Soit chaise1 une variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chaise chaise1 = new Chaise();
    chaise1 est une référence pointant sur un Objet Chaise. C'est une instance de la classe chaise.

    Chaise <--- Chaise1 : chaise1 pointe sur un objet Chaine

    soit chaise2 une autre varible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chaise chaise1 = new Chaise();
    Chaise chaise2 = new Chaise();
    Chaise <--- chaise1 : chaise1 pointe sur un objet Chaine
    Chaise <--- chaise2 : chaise2 pointe sur un objet Chaine ( pas le même que chaise1 )

    Maintenant si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chaise chaise1 = new Chaise();
    Chaise chaise2;
    chaise2 = chaise1;
    chaise2 pointera sur le même objet que chaise1 :
    chaise2 ---> Chaise <--- chaise1
    chaise1 et chaise2 désigne le même Objet Chaise.
    Cqfd
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    Merci Ivelios !

    je peux comprendre que c'est l'opérateur nes qui se charge de l'instanciation d'un objet et de lui associer une variable qui sera sa référence dans la mémoire pour pouvoir lui accéder.
    donc, si on fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chaise chaise1 = new Chaise();
    Chaise chaise2;
    chaise2 = chaise1;
    au lieu de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chaise chaise1 = new Chaise();
    Chaise chaise2 = new Chaise();
    on n'a plus deux objets, mais plutôt un seul avec deux références dans la mémoire.

    je souhaite avoir bien compris jusque là, mais je comprends pas encore à quoi ça sert d'avoir ces 2 références, est-ce pour pouvoir donner des valeurs différentes aux attributs d'un même objet? Bizarre
    car si on fait chaise2 prend tout de chaise1, les valeurs de ses attributs aussi

    Merci d'avance pour vos explications

  4. #4
    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,

    Citation Envoyé par Nayra Voir le message
    je peux comprendre que c'est l'opérateur new qui se charge de l'instanciation d'un objet et de lui associer une variable qui sera sa référence dans la mémoire pour pouvoir lui accéder.
    donc, si on fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chaise chaise1 = new Chaise();
    Chaise chaise2;
    chaise2 = chaise1;
    au lieu de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chaise chaise1 = new Chaise();
    Chaise chaise2 = new Chaise();
    on n'a plus deux objets, mais plutôt un seul avec deux références dans la mémoire.
    oui effectivement

    Pour sortir de l'abstrait et comprendre mieux ce qu'est une référence, je te présente cet extrait du livre Penser en Java

    Chapitre 2 - Tout est « objet »

    Les objets sont manipulés avec des références


    Chaque langage de programmation à ses propres façons de manipuler les données. Parfois le programmeur doit être constamment conscient du type des manipulations en cours. Manipulez-vous l'objet directement, ou avez-vous affaire à une sorte de représentation indirecte (un pointeur en C ou C++) qui doit être traité avec une syntaxe particulière ?

    Tout ceci est simplifié en Java. On considère tout comme des objets, ainsi il n'y a qu'une seule syntaxe cohérente qui est utilisée partout. Bien qu'on traite tout comme des objets, les identificateurs qui sont manipulés sont en réalité des « références » vers des objets. On pourrait imaginer cette situation comme une télévision (l'objet) avec une télécommande (la référence). Tant qu'on conserve cette référence, on a une liaison vers la télévision, mais quand quelqu'un dit « change de chaîne » ou « baisse le volume », ce qu'on manipule est la référence, qui en retour modifie l'objet. Si on veut se déplacer dans la pièce tout en contrôlant la télévision, on emporte la télécommande/référence, pas la télévision.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    Merci énormément M.
    Des tutoriels très intéressant, et ça m'a beaucoup aidé.

    Pour résumer, deux références pointant sur le même objet, si on modifie les propriétés de l'une, ça revient à modifier celles de l'objet considéré.
    Avec la méthode clone(), on aura deux objets différents avec aussi deux références différentes.

    Ca c'est clair maintenant, reste à comprendre à quoi ça sert d'attribuer à un même objet deux références différentes (ou plus) si ça revient au même (c'est à dire si la modification de l'objet passe par la modification de n'importe laquelle des références) ?

  6. #6
    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 Nayra Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Chaise chaise1 = new Chaise();
    Chaise chaise2;
    chaise2 = chaise1;
    Je pense que cet exemple ou ceux des deux articles ont pour but d'expliquer la notion des références d'objets.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ça c'est clair mnt, reste à comprendre à quoi ça sert d'attribuer à un même objet deux références différentes (ou plus) si ça revient au même (c'est à dire si la modification de l'objet passe par la modification de n'importe laquelle des références ?)
    Ça précisément, ça ne sert à rien, mais il est important de comprendre que le langage fonctionne ainsi.

    Dans le même genre, supposons que tu aies un tableau de Chaise[], et que tu veuilles intervertir les Chaise d'indice 1 et 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chaise tmp = tabChaises[1];
    tabChaises[1] = tabChaises[2];
    tabChaises[2] = tmp;
    Ce genre de choses...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    c'est à dire si la modification de l'objet passe par la modification de n'importe laquelle des références ?
    Oui

    Une second exemple : (oui j'aime bien les exemples )
    Soit une classe BolDeCacahuete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class BolDeCacahuete{
     
    private int nombreDeCacahuete;
    //Constructeur
    public BolDeCacahuete(int nb){
    nombreDeCacahuete = nb;
    }
     
    //Se servir enlève une cacahuete du bol
    public void seServir(){ nombreDeCacahuete--;}
     
    public int nbCacahueteRestant(){ return nombreDeCacahuete;}
    Soit une classe Personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Personne(){
    private BolDeCacahuete leBol;
    //Constructeur
    public Personne(BolDeCacahuete bol){
    leBol = bol;
    }
     
     
    public void prendreCacahuete(){ bol.seServir;}
    Maintenant le lanceur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static void main(String[] args){
    BolDeCacahuete bol = new BolDeCacahuete(50);//50 cacahuete dans le bol
    Personne paul = new Personne(bol);
    Personne jean = new Personne(bol);
    //L'attributs leBol de paul & jean pointe sur le même objet
     
    paul.prendreCacahuete();
    jean.prendreCacahuete();
    System.out.println(bol.nbCacahueteRestant());// Affichage : 48
    }
    Donc, oui ça peut servir dans certain cas.
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut


    bon exemple.
    merci !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/09/2013, 14h12
  2. [Flex4] Flex/java et les objets composés
    Par edhecasa dans le forum Flex
    Réponses: 1
    Dernier message: 22/06/2011, 00h29
  3. Lister les objets en mémoire JAVA
    Par JavaStudent dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2011, 11h59
  4. changer les attributs d'un objet depuis java
    Par pimousse_cerise dans le forum JSF
    Réponses: 1
    Dernier message: 02/11/2009, 23h51
  5. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12

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