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 :

Problème de get/set


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Par défaut Problème de get/set
    Bonjour à tous,

    J'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package TestAuto;
     
    public class Sdz1 {
     
    	  public static void main(String[] args){   
     
    		  Ville v1 = new Ville("02", "V", "00","PP","", "01");         
     
    		  System.out.println(" v1 = "+ v1.getNumMvmt()+" "+v1.getTG()+" "+v1.getNumeroDossier()+" "+v1.getPaiePrincipaleOuAccessoire()+" "+ v1.getPerpai()+" "+v1.getNumeroRemise());	  
    		  } 
    }
    Qui me permet d'obtenir v1 = 02 V 00 PP 2020/05 01

    Grâce à la classe :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    package TestAuto;
     
    public class Ville {
     
    	 private String nomVille;
    	 private String nomPays;
    	 private int nbreHabitants;
     
    	 private String NumMvmt;
    	 private String TG ;
    	 private String NumeroDossier;
    	 private String PaiePrincipaleOuAccessoire;
    	 private String Perpai;
    	 private String NumeroRemise;
     
     
    		//Constructeur par défaut
    		  public Ville(){
    		    System.out.println("Création d'une ville !");      
    		    nomVille = "Inconnu";
    		    nomPays = "Inconnu";
    		    nbreHabitants = 0;
    		  } 
     
     
    		  public Ville(String numMvmt, String tG, String numeroDossier, String paiePrincipaleOuAccessoire, String perpai, String numeroRemise)
    		  {
    		    System.out.println("Création d'une ville avec des paramètres !");
    		    NumMvmt = numMvmt ;
    		    TG = tG;
    		    NumeroDossier = numeroDossier;
    		    PaiePrincipaleOuAccessoire = paiePrincipaleOuAccessoire ;
    		   // Perpai = perpai;
    		    Perpai ="2020/05";
    		    NumeroRemise = numeroRemise;
    		  }      
     
    		  public Ville(String numMvmt){
    			    System.out.println("Création d'une ville !");      
    			    NumMvmt ="01";
    			  } 
     
     
    			  //Les variables et les constructeurs n'ont pas changé…
     
    			  //*************   ACCESSEURS *************
     
    			  //Retourne le nom de la ville
    			  public String getNom()  {  
    			    return nomVille;
    			  }
     
    			  //Retourne le nom du pays
    			  public String getNomPays()
    			  {
    			    return nomPays;
    			  }
     
    			  // Retourne le nombre d'habitants
    			  public int getNombreHabitants()
    			  {
    				  return nbreHabitants;
    			  } 
     
    			  public String getNumMvmt() {
    				  return NumMvmt;
    			  }
     
    			  public String getTG() {
    				  return TG;
    			  }
     
    			  public String getNumeroDossier() {
    				  return NumeroDossier;
    			  }
     
    			  public String getPaiePrincipaleOuAccessoire() {
    				  return PaiePrincipaleOuAccessoire;
    			  }
     
    			  public String getPerpai() {
    				return Perpai;
    			 // return "2020/05";
    			  }
     
    			  public String getNumeroRemise() {
    				  return NumeroRemise;
    			  }
     
    			  //*************   MUTATEURS   *************
     
    			  //Définit le nom de la ville
    			  public void setNom(String pNom)
    			  {
    			    nomVille = pNom;
    			  }
     
    			  //Définit le nom du pays
    			  public void setNomPays(String pPays)
    			  {
    			    nomPays = pPays;
    			  }
     
    			  //Définit le nombre d'habitants
    			  public void setNombreHabitants(int nbre)
    			  {
    			    nbreHabitants = nbre;
    			  }  
     
    			 public void setNumMvmt(String numMvmt) {
    					NumMvmt = numMvmt;
    				}
     
    			 public void setTG(String tG) {
    					TG = tG;
    				}
     
    			 public void setNumeroDossier(String numeroDossier) {
    					NumeroDossier = numeroDossier;
    				}			
     
    			 public void setPaiePrincipaleOuAccessoire(String paiePrincipaleOuAccessoire) {
    					PaiePrincipaleOuAccessoire = paiePrincipaleOuAccessoire;
    				}
     
    			 public void setPerpai(String perpai) {
    					Perpai = perpai;
    				}
     
    			 public void setNumeroRemise(String numeroRemise) {
    					NumeroRemise = numeroRemise;
    				}
    			}

    J'aimerais savoir comment récupérer automatiquement la valeur 2020/05 correspondant à Perpai sans avoir à indiquer "" ?

    Merci

    Hadrien

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par hadrien4789 Voir le message
    J'aimerais savoir comment récupérer automatiquement la valeur 2020/05 correspondant à Perpai sans avoir à indiquer "" ?
    Je suppose que tu parles du "" qu'on voit dans le code suivant, entre "PP" et "01" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Ville v1 = new Ville("02", "V", "00","PP","", "01");
    Les valeurs entre parenthèses sont des paramètres à la construction d'une instance de Ville. Ces paramètres sont définis donc dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Ville(String numMvmt, String tG, String numeroDossier, String paiePrincipaleOuAccessoire, String perpai, String numeroRemise)
    C'est le String perpai. Si tu ne veux pas passer ce paramètre, simplement, ne le déclare pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Ville(String numMvmt, String tG, String numeroDossier, String paiePrincipaleOuAccessoire, String numeroRemise)
    Ainsi, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Ville v1 = new Ville("02", "V", "00","PP", "01");
    D'ailleurs il semble que cette information soit affectée à la variable Perpai directement dans le code du constructeur sans utiliser de paramètre là :
    Ce qui semble confirmer que tu n'as pas besoin d'avoir un paramètre pour cette information.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    commentaires qui n'ont rien à voir avec la question posée:
    quel est l'intérêt d'un constructeur public sans paramètres (ou celui qui n'initialise ni le nom ni le pays)? on peut changer le nom d'une ville ou son pays avec des méthodes public? (pourquoi?)

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    La ville est un POJO décrivant un concept (en l’occurrence la ville).

    Il est fortement déconseillé de multiplier les constructeurs et en particulier les constructeurs avec plusieurs paramètres.

    Il est plutôt appréciable d'utiliser le Design Pattern Builder:
    https://blog.xebia.fr/2016/12/28/des...ans-un-bateau/

    https://fr.wikipedia.org/wiki/Monteu...de_conception)

    Du coup, un POJO reste un simple objet avec attributs (private) et Getter/Setter;

    Cordialement.

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par PhilippeGibault Voir le message
    La ville est un POJO décrivant un concept (en l’occurrence la ville).
    Aïe je risque de déclencher un guerre de religion
    pour moi ce genre de pratique ne se justifie pas et va à l'encontre des principes de l'encapsulation
    développement de l'argumentaire ici: http://scrountch.info/java/chunk/ch36.html
    Il est fortement déconseillé de multiplier les constructeurs et en particulier les constructeurs avec plusieurs paramètres.
    ah bon? pourquoi? (je m'inscris en faux contre cette affirmation )

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Parce qu'après on ne sait pas quel paramètre correspond à quel champ. C'est déjà un peu galère avec un seul constructeur qui a plusieurs paramètres de même type, mais bon, on va dire que ce constructeur essaie de respecter un genre d'évidence dans l'ordre des paramètres.

    Quand on surcharge les constructeurs avec plusieurs combinaisons possibles, là c'est plus la peine. On se retrouve à chaque fois à passer plusieurs minutes à bien revérifier duquel il s'agit et qu'est-ce qu'il prend.

    Il est plus clair de faire un choix et de s'y tenir. Un constructeur avec tous les paramètres. Éventuellement un constructeur sans paramètre quand ça nous arrange, ou genre avec un seul paramètre quand c'est le seul vraiment indispensable, bref maxi deux constructeurs très très distincts, là on s'en sort déjà mieux.

    D'accord pour l'encapsulation par contre. Le pattern constructeur est bien confortable pour par exemple faire une déviation par rapport à une construction par défaut, mais ce n'est pas bon pour tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Rappel: Joshua Bloch, Item 2, troisième édition (https://www.amazon.fr/Effective-Java...D1JD6VCRQ5EK6M ):
    "Consider a builder when faced with many constructor parameters".

    En général, il faut différentier la construction de l'objet à l'objet lui-même, principe de séparation et de responsabilité.

    Le design pattern pour construire, c'est Builder.

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    Aïe je risque de déclencher un guerre de religion
    pour moi ce genre de pratique ne se justifie pas et va à l'encontre des principes de l'encapsulation
    développement de l'argumentaire ici: http://scrountch.info/java/chunk/ch36.html

    ah bon? pourquoi? (je m'inscris en faux contre cette affirmation )
    En fait je souscrit plutot au fait qu'avoir 36 constructeurs a tentante a pourrir la lecture du code et a l’alourdir.

    Cote JavaFX qui part d'une conception un peu plus moderne que Swing, on a en general le minimum de constructeurs et ensuite les setters sont la pour cela. Certains des concepts annexes comme les controleurs FXML ne supportent que les constructeurs par defaut.

    De plus, récemment il est plus courant d'utiliser des fabriques ou des builders quand on a besoin de 36 paramètres pour initialiser un objet.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Problème de get/set data
    Par KiKiTiTi dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 16/07/2008, 08h27
  2. Problèmes sur Get Set d'une variable.
    Par Mattk dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/04/2007, 01h43
  3. Problèmes avec gets
    Par al85 dans le forum C
    Réponses: 6
    Dernier message: 11/05/2005, 08h42
  4. problème avec GET DIAGNOSTICS
    Par hpghost dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 07/07/2004, 11h59
  5. [debutant][Gregoriancalendar] Problème avec le set
    Par britou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/06/2004, 16h01

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