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 :

Compréhension des constructeurs


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut Compréhension des constructeurs
    Bonjour,

    Voici l'extrait d'un début de classe avec 3 constructeurs, si je comprends leur rôle, je ne saisis pas clairement le sens du mot clé "this" lignes 18 et 30


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    public class Article {
        private int id;
        private String name; // description varchar(50)not null,
        private String image; //  image varchar(200) null,
        private BigDecimal price; // decimal(7,2) not null,
        private String content; // varchar(1000)not null,
        private Category category; // numeric not null,
        private Manufacturer manufacturer; //constructeur_id numeric not null,
        private Date published; // dateMiseEnLigne date null,
        private int stock; // numeric not null,
        private PropertyChangeSupport pcs = new PropertyChangeSupport(this);  
     
        /**
             * Construct a new article with invalid fields except
             * image (null), content (empty), published (null) and stock (0).
             */
    	public Article() {
    	this(0, null, null, null, null);// call to the overloaded constructor
    	}
     
    	/**
         * Construct a new article with required fields
         * @param id
         * @param name
         * @param price
         * @param category
         * @param manufacturer
         */
        public Article(int id, String name, BigDecimal price, Category category, Manufacturer manufacturer) {
            this(id, name, "", price, "", category, manufacturer, null, 0);
        }
        /**
         * Construct a new article with all fields
         * @param id
         * @param name
         * @param image
         * @param price
         * @param content
         * @param category
         * @param manufacturer
         * @param published
         * @param stock
         */
     
     
        public Article(int id, String name, String image, BigDecimal price, String content, Category category, Manufacturer manufacturer, Date published, int stock) {
            this.setId(id);
            this.setName(name);
            this.setImage(image);
            this.setPrice(price);
            this.setContent(content);
            this.setCategory(category);
            this.setManufacturer(manufacturer);
            this.setPublished(published);
            this.setStock(stock);
        }
    Vous remerciant

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Le "this" permet de chaîner le constructeur vers un autre constructeur, en gros, on centralise les méthodes d'initialisation vers un unique constructeur, le plus complet.
    Dans ton cas, la ligne 18 renvoie vers le constructeur en ligne 46.

    Ceci dit, c'est surprenant (à priori) d'utiliser un setter dans le constructeur, à moins que les méthodes setXXX fassent quelque chose de particulier.
    On aurait plutôt tendance à initialiser directement la propriété avec quelque chose comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Article(int id, String name, String image, BigDecimal price, String content, Category category, Manufacturer manufacturer, Date published, int stock) 
    {
       this.id = id;
       this.name = name;
       this.image = image;
       etc...
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    En programmant objet, il y a une différence entre objet et classe. Un objet est une instance d'une classe. La classe c'est le modèle/ le patron (sens couture)

    this est justement le pointeur/ la référence de l'objet courant.
    Il sert essentiellement à désambiguïser les choses :
    • Lorsqu'un paramètre de méthode a le même nom qu'un membre (attribut de classe)
    • Lorsqu'une fonction globale/ externe a le même nom qu'une méthode.

    En règle générale, il ne sert à rien parce que ces situations sont facilement modifiables pour y remédier sauf dans le cas cité par @OButterlin : de chaîner le constructeur vers un autre constructeur.


    Citation Envoyé par OButterlin Voir le message
    Ceci dit, c'est surprenant (à priori) d'utiliser un setter dans le constructeur, à moins que les méthodes setXXX fassent quelque chose de particulier.
    Des fois, les constructeurs font [sensiblement] la même chose que le mutateur ("setter") Donc au lieu d'une duplication de code (avec les risques lors de changements), il faut mieux appeler le mutateur.

  4. #4
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Merci beaucoup d'avoir pris le temps de me répondre de manière si détaillée.

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

Discussions similaires

  1. Fiabilité des constructeurs de serveurs ??
    Par shkyo dans le forum Ordinateurs
    Réponses: 11
    Dernier message: 12/05/2006, 10h30
  2. Compréhension des exploits
    Par LordBob dans le forum C
    Réponses: 3
    Dernier message: 25/01/2006, 23h22
  3. [DEBUTANTE][ECLIPSE] Pb de compréhension des package SERVLET
    Par fchafia dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 18/02/2005, 16h55
  4. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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