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

Langage Java Discussion :

syntaxe classique vs syntaxe eclipse: que choisir? Pourquoi?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Par défaut syntaxe classique vs syntaxe eclipse: que choisir? Pourquoi?
    Bonjour a ts et ttes,

    je suis sur la rédact° de tests unitaires et je decouvre eclipse.

    Lors de la rédact° d'1 test (ce qui n'est pas le sujet ici),

    j'ecris mon constructeur de maniere classique

    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
     
    public class Vehicule {
     
    	private int id;
    	private int count= 0;
    	private String type;
    	private int kilometrage;
    	private String plaque;
     
    	public Vehicule(String p_type, int p_kilometrage, String p_plaque) {
     
    		this.type = p_type
    		this.kilometrage = p_kilometrage;
    		this.plaque = p_plaque;
     
    		this.id = ++count;
     
    	}
    }
    Ensuite j'utilise eclipse pr generer les getter / setter

    et là Eclipse transforme mon constructeur de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public Vehicule(String p_type, int p_kilometrage, String p_plaque) {
     
    		this.setType(p_type);
    		this.setKilometrage(p_kilometrage);
    		this.setPlaque(p_plaque);
     
    		this.setId(setCount(getCount() + 1));
     
    	}
    Du coup, me je pose les questions:
    Y'a t-il 1 syntaxe + efficace qu'1 autre?
    Cela depend il du contexte?
    Si oui, qd choisir telle syntaxe plutot que telle autre?

    Merci bien pr les précisions.
    grub

  2. #2
    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
    la deuxième suggestion peut être intéressante si tu fais des contrôles de validité lors d'un "set"... ça centralise ces contrôles.
    sinon pas strictement nécessaire... mais ça ne coûte rien.

  3. #3
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 347
    Par défaut
    Le problème avec le version "corrigée" par Eclipse est qu'il va vous forcer à utiliser des setters pour toutes les affectations. Ca n'est pas un problème en soi surtout si, comme le dit professeur shadoko, vous faites de la validation dans les setters. Le vrai problème est si les setters sont public car ils exposent alors toute votre classe et peut-être même certains champs que vous voudriez garder privé.

  4. #4
    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 gervais.b Voir le message
    Le vrai problème est si les setters sont public car ils exposent alors toute votre classe et peut-être même certains champs que vous voudriez garder privé.
    oups j'avais oublié ça! Il est vrai qu'il est essentiel d'avoir des mutateurs non public pour maintenir l'encapsulation. (je peste assez contre ces générateurs qui les proposent systématiquement public! je n'ai pas Eclipse mais je suppose qu'il y a une option pour gérer ça)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    J'utilise Eclipse depuis des décennies et il ne m'a jamais remplacé les affectations dans un constructeur comme indiqué dans l'exemple.
    J'ai fait le test avec la classe Véhicule telle que décrite et là encore, pas de modification du constructeur.
    Il doit donc y avoir eu une modification quelque part du mécanisme standard d'Eclipse.

    De mon point de vue :


    • la version initiale est la plus performante.
    • utiliser le principe des setter si des contrôles (ou des affectations connexes) ont été codés.


    Pour le tout petit détail, il manque un ; derrière l'affectation de type par p_type dans le constructeur initial...


    Pour la remarque de gervais.b, un setter n'expose pas une classe pas plus que les propriétés qu'il pourrait utiliser dans son traitement... que voulais-tu dire ?

    Je ne comprends pas la dernière remarque de professeur shadoko (j'ai du raté quelque chose).
    Quel intérêt de mettre les setter private (protected encore ça peut se comprendre) ? Ils sont généralement public vu qu'ils servent à affecter une valeur à une propriété.
    Si on ne veut pas que la valeur puisse changer (facilement), autant ne pas les définir...

    Pour ce qui est de la "protection", dans tous les cas, c'est plus un vœu qu'une réalité en java. On peut toujours utiliser la "reflection" pour modifier directement la valeur d'une propriété (qu'elle ait ou non un setter) pour autant quelle ne soit pas "static final".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    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 OButterlin Voir le message
    Je ne comprends pas la dernière remarque de professeur shadoko (j'ai du raté quelque chose).
    Quel intérêt de mettre les setter private (protected encore ça peut se comprendre) ? Ils sont généralement public vu qu'ils servent à affecter une valeur à une propriété.
    Si on ne veut pas que la valeur puisse changer (facilement), autant ne pas les définir...
    .
    oops.. remarque pertinente. Je me laisse emporter par ma haine des mutateurs publics systématiques.

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

Discussions similaires

  1. Syntaxe pour que des sons se lisent à tour de rôle
    Par pyrrha67 dans le forum Général Python
    Réponses: 10
    Dernier message: 30/09/2021, 17h14
  2. une Syntax error que je ne connaissai pas..
    Par IceCrime752 dans le forum C
    Réponses: 2
    Dernier message: 18/05/2018, 17h35
  3. Dev iOS, appli web ou native ? Que choisir et pourquoi ?
    Par DeviOS dans le forum Développement iOS
    Réponses: 0
    Dernier message: 25/01/2011, 15h15
  4. Que choisir ? C# , VB.NET, C++, Delphi ? pourquoi ?
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 475
    Dernier message: 08/04/2010, 19h27
  5. Que choisir : fichiers ou base de données? et pourquoi?
    Par jlassiramzy dans le forum Langage
    Réponses: 5
    Dernier message: 23/11/2007, 10h33

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