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

Java Discussion :

Question de cohérence, curiosité


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Points : 66
    Points
    66
    Par défaut Question de cohérence, curiosité
    Bonjour

    Par curiosité, histoire de me conforter ce que j'appelle "bonne solution est préférable à mauvaise solution? (Peut-être une question "bête") mais j'aimerais avoir l'explication "informatique" . Dans le premier cas on alloue de l'espace pour deux variables que l'on garde jusqu'à la fin du traitement, dans le second, on alloue et détruit l'allocation d'espace à chaque début/fin de méthode? Ou bien les deux méthodes sont équivalentes?

    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
    23
    24
    25
     
    public void methode1(){
       /** Mauvaise solution **/
       double i,j;
       Pour Animal de anmiaux
           methode2(animal,i,j)
       Fin Pour
       { traitement } 
       /** Bonne solution **/
       Pour Animal de anmiaux
            methode2(animal)
       Fin Pour
      { traitement }
    }
     
    public void methode2(Animal animal){
      /** Mauvaise solution **/
       i = this.tester();
       j = this.tester();
       animal.setValeur(i-j)
     /** Bonne solution **/
      double i = this.tester();
      double j = this.tester();
       animal.setValeur(i-j)
    }
    Si l'on ajoute une variable du type:
    dans la méthode 1
    X x = new X()
    et que dans méthode 2 on exécute x.y() alors on travaille toujours sur le même objet.

    Si l'on place X x = new X() dans la méthode 2 alors on crée un objet différent pour chaque appel à la méthode. Vrai ?

    Merci beaucoup pour vos éclaircissements !

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par bruno_nono Voir le message
    Par curiosité, histoire de me conforter ce que j'appelle "bonne solution est préférable à mauvaise solution? (Peut-être une question "bête") mais j'aimerais avoir l'explication "informatique" . Dans le premier cas on alloue de l'espace pour deux variables que l'on garde jusqu'à la fin du traitement, dans le second, on alloue et détruit l'allocation d'espace à chaque début/fin de méthode? Ou bien les deux méthodes sont équivalentes?
    Je ne comprends pas quelle différence tu essaies de faire entre les deux. Ça compile pas, on va dire que c'est normal. Mais ton intention n'est pas claire, donc je peux pas trop imaginer ce que tu as en tête.


    Citation Envoyé par bruno_nono Voir le message
    Si l'on ajoute une variable du type:
    dans la méthode 1
    X x = new X()
    et que dans méthode 2 on exécute x.y() alors on travaille toujours sur le même objet.

    Si l'on place X x = new X() dans la méthode 2 alors on crée un objet différent pour chaque appel à la méthode. Vrai ?
    Vrai. Donc si tu as besoin de créer un nouvel objet à chaque appel de méthode, solution 2.
    Si tu as besoin d'utiliser le même objet à chaque appel de méthode, solution 1.

    Si les deux peuvent faire l'affaire, il s'agit de choisir un compromis entre performance et clarté.
    - Si c'est plus "clair" en termes de lisibilité, de ne pas créer un objet avant d'appeler des méthodes qui le prennent en paramètre, il faut voir si créer cet objet à chaque appel est une opération lourde. Si non, pourquoi s'embêter, au fond ?
    - À l'inverse, si c'est pas clair d'appeler des méthodes sans préciser en paramètre sur quel objet elles se fondent, ou si créer l'objet à chaque fois serait trop lourd, dans ce cas il vaut mieux créer l'objet dans l'appelant, et le passer en paramètre à chaque fois.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je ne comprends pas quelle différence tu essaies de faire entre les deux. Ça compile pas, on va dire que c'est normal. Mais ton intention n'est pas claire, donc je peux pas trop imaginer ce que tu as en tête.
    C'était surtout par rapport à l'utilisation de la mémoire: en gros faire
    100 fois double x est-il plus gros qu'une fois double x.
    Les deux sont identiques au final à priori. Du coup, c'était juste par question de "règles java". Qu'est-ce qui est le plus joli ?

    Ok pour le new.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    La JVM effectue des optimisations lors de la compilation à la volée.

    Par conséquent, faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int var;
    for (int i = 0; i < 100; i++) {
        var = i;
    }
    n'apporte rien par rapport à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (int i = 0; i < 100; i++) {
        int var = i;
    }

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

Discussions similaires

  1. [WS 2008 R2] [AD] : question de cohérence des Unites Organisationnelles
    Par youlyous dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 17/05/2013, 15h29
  2. question purement de curiosite
    Par Doksuri dans le forum Zend Framework
    Réponses: 10
    Dernier message: 12/09/2011, 15h17
  3. question curiosité ofstream ifstream
    Par hibiscuit dans le forum C++
    Réponses: 7
    Dernier message: 20/09/2007, 15h18
  4. Question de curiosité sur du code
    Par defluc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/09/2007, 16h12

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