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 :

Utilisation de this


Sujet :

avec Java

  1. #1
    Membre du Club Avatar de supzero
    Inscrit en
    Février 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 59
    Points : 56
    Points
    56
    Par défaut Utilisation de this
    Un grand pour l'equipe ,les membres ,et les passagers.
    je travail des exercices en java sur un site que j'ai découvert hier ,trés bien comme site mais je trouve du mal a comprendre le tous (je suis débutant et il y'a pas d'explication pour les corrigés) mais quand-meme big-up pour son maitre.
    sur l'éxercice numero 1 parallélogramme du chapitre de la programmation oriente-objet
    http://www.prog-info.org/Scripts/Exo...cice.php?id=49
    mes questions :
    1 pourquoi déclarer les variables protected ? pourquoi pas privé?
    2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /**
        * <p>Constructeur par défaut.</p>
        */
       public Point()
       {
          this(0.0, 0.0);
       }
    pourquoi utilisé le this ?est ce qu'il y'a d'autre maniére de le faire ?
    3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
        * <p>Constructeur de Point avec l'abscisse et l'ordonnée spécifiés.</p>
        * @param x L'abscisse du point.
        * @param y L'ordonnée du point.
        */
       public Point(double x, double y)
       {
          this.setX(x);
          this.setY(y);
       }
    dans un constructeur avec des paramétres ,est ce que l'utilisation de this et toujours
    suivis par set ? et pourquoi pas get ?
    merci d'avance et si quelqu'un arrive a détécte mes points faible
    merci de les signalés .
    Ma devise " Si tu ne sais pas : DEMANDE. Si tu sais : PARTAGE "
    lenny 2.6.26-2-686

  2. #2
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,

    l'instruction appelle ce constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Point(double x, double y){...}
    avec deux arguments (0.0, 0.0), c'est, à ce que je sache, la seule manière de faire appel à d'autre constructeur de la même classe.

    pour le this, il référence l'objet courant, et donc quand tu mets this.getX(), ça veut dire appeler la méthode getX de l'instance courante.
    son utilisation n'est pas obligatoire, mais dans des cas, elle l'est; par exp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setX(double x)
       {
          this.x = x;
       }
    ici, on est obligé d'utiliser this pour différencier entre le x qui est un attribut de Point, et x qui est passé en argument.
    fais un tour ici: http://java.developpez.com/faq/java/...sClesThisSuper

    pour la première question, je crois que tu airais pu les mettre en private puisqu'il y a déjà des getters et setters. un petit rappel: http://java.developpez.com/faq/java/...motsClesPublic

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    petite précision, dans ce cas, utiliser this.setX(....) plutot que setX(....) est même non recommandé. Il n'y a pas de raison, à cet entdroit là, de surcharger le code avec un this (sauf si on veux apprendre aux gens à utiliser this :p)

  4. #4
    Membre du Club Avatar de supzero
    Inscrit en
    Février 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 59
    Points : 56
    Points
    56
    Par défaut
    salut ,
    ok,et pourquoi avoir besoin de faire appel entre deux constructeurs de la même classe?.
    et est ce que l'existance du constructeur par défaut est capitale ?
    je m'excuse pour mes questions !!! et merci pour les éxplications
    Ma devise " Si tu ne sais pas : DEMANDE. Si tu sais : PARTAGE "
    lenny 2.6.26-2-686

  5. #5
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    est ce que l'existance du constructeur par défaut est capitale ?
    cela dépend de ta classe, mais dans le cas de l'exercice, si l'utilisateur veut créer un point mais sans valeurs précises, et puis après spécifier x et y avec setX et setY, c'est mieux de lui donner la possibilité de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Point p = new Point();
    //un traitement
    p.setX(unX);
    p.setY(unY);
    pourquoi avoir besoin de faire appel entre deux constructeurs de la même classe?
    quand l'utilisateur fait appel au constructeur par défaut, il n'a pas spécifié le x et y, donc tu dois leur donner une valeur par défaut. Tu aurais pu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Point()
       {
          setX(0.0);
          setY(0.0);
       }
    dans le constructeur par défaut, mais vu que le même traitement est fait dans l'autre constructeur, et que dans un cas réel, un constructeur n'est pas aussi court que celui-là, il vaut mieux faire appel à l'autre constructeur que de recopier les même code deux fois

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par supzero Voir le message
    ok,et pourquoi avoir besoin de faire appel entre deux constructeurs de la même classe?.
    Pour éviter la duplication de code.

    Dans ce cas précis ce n'est peut-être pas très visible, mais si tu crées plusieurs constructeur avec des vérifications de valeur tu risques de dupliquer beaucoup de code.

    Plutôt que de faire cela on utilise un appel de constructeur.

    En général on implémente les traitements dans le constructeur le plus complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public MaClasse {
     
    	public MaClasse(int p1, String p2, boolean p3, Date p4) {
    		//
    		// tout le code d'initialisation ici :
    		// ...
    		// ...
    		// ...
    	}
    Et les autres constructeurs s'appelle mutuellement pour remonter jusqu'à celui-ci, en passant directement les paramètres et en utilisant une valeur par défaut pour les paramètres absents :
    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
    	public MaClasse(int p1, String p2, boolean p3) {
    		this(p1, p2, p3, new Date());
    	}
     
    	public MaClasse(int p1, String p2) {
    		this(p1, p2, false);
    	}
     
    	public MaClasse(int p1) {
    		this(p1, "");
    	}
     
    	public MaClasse(int p1) {
    		this(0);
    	}
    Tous les traitements sont effectué dans le premier constructeur


    Citation Envoyé par supzero Voir le message
    et est ce que l'existance du constructeur par défaut est capitale ?
    Oui et non...
    Le constructeur par défaut n'est pas obligatoire mais il est utile dans bien des cas, comme dans la notion de "Java Beans" qui implique cela (entre autres).


    Citation Envoyé par tchize_ Voir le message
    petite précision, dans ce cas, utiliser this.setX(....) plutot que setX(....) est même non recommandé.
    Je dirais plutôt qu'il s'agit de préférence personnelle... mais cela n'apporte ni ne change rien...

    Par contre c'est l'utilisation de set() dans le constructeur qui pourrait être problématique si elle est virtuelle...

    Une méthode virtuelle est une méthode d'instance qui n'est ni private ni final (en clair une méthode qui pourrait être redéfinie dans une classe fille).

    En effet appeler une méthode virtuelle dans un constructeur pourrait poser problème si sa redéfinition se base sur des éléments initialisé dans le constructeur de la classe fille, car ils ne seront alors pas initialisé (le constructeur parent n'est pas encore terminé, et donc le constructeur fils ne s'est pas encore exécuté).

    a++

  7. #7
    Membre du Club Avatar de supzero
    Inscrit en
    Février 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 59
    Points : 56
    Points
    56
    Par défaut
    salut et merci pour cette conversation
    alors,si vous permettez . est ce que les deux constructeurs sont identiques ?

    le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Rectangle(double x, double y, double longueur, double largeur)
        {
           super(x, y);
           this.setLongueur(longueur);
           this.setLargeur(largeur);
        }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Rectangle(double x, double y, double longueur, double largeur)
        {
           super(x, y);
           this.longueur=longueur;
           this.largeur=largeur;
        }
    le premier constructeur et celui de la classe Rectangle,le 2éme c'est un peut mon grand point d'? dans la classe Point on a pas utiliser de set dans le constructeur ,
    exp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setLongueur(longueur);
    est ce que c'est parce qu'elle est la classe mére ?
    Ma devise " Si tu ne sais pas : DEMANDE. Si tu sais : PARTAGE "
    lenny 2.6.26-2-686

  8. #8
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,
    dans ce cas ci les 2 constructeurs ne sont pas identiques, puisque dans le premier tu précises la longueur et la largeur par le biais des setters, et dans ces dernières, tu ne fais pas simplement une affectation de valeurs, mais tu testes d'abord la valeur passée en argument
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void setLongueur(double longueur)
       {
          if(longueur < 0.0)
             this.longueur = 0.0;
          else
             this.longueur = longueur;
       }
    ici par exp tu testes si la longeur est < 0, et si c'est le cas, tu lui affectes 0.0.

    par contre dans le 2ème constructeur, tu affectes directement longueur et largeur, sans tester s'ils sont < 0, et donc si tu passes en argument une longueur négatif, elle sera acceptée, ce qui ne serait pas le cas dans le premier constructeur.

    l'instruction fait appel au constructeur de la classe mère, donc la classe Point, et dans ce constructeur, il y a setX et setY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Point(double x, double y)
       {
          this.setX(x);
          this.setY(y);
       }

  9. #9
    Membre du Club Avatar de supzero
    Inscrit en
    Février 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 59
    Points : 56
    Points
    56
    Par défaut
    ahh oui , je commence a comprendre
    je continue le travail et je vous tien au courant des problémes rencontrés
    merci infiniment
    Ma devise " Si tu ne sais pas : DEMANDE. Si tu sais : PARTAGE "
    lenny 2.6.26-2-686

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

Discussions similaires

  1. Utilisation de this
    Par ttone dans le forum Débuter
    Réponses: 27
    Dernier message: 09/10/2008, 22h00
  2. utilisation du this
    Par kenny.kev dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 08/04/2008, 14h36
  3. utilisation de this[]
    Par michpc dans le forum Flash
    Réponses: 2
    Dernier message: 01/02/2007, 12h59
  4. les classes et c# .. quand utiliser le "this" ?
    Par jgbid123 dans le forum Windows
    Réponses: 3
    Dernier message: 01/12/2006, 22h04
  5. [POO] Erreur lors de l'utilisation de $this en PHP5
    Par Ekimasu dans le forum Langage
    Réponses: 4
    Dernier message: 03/11/2006, 20h21

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