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

  1. #1
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    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 chevronné
    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 : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    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.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

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

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 325
    Points : 436
    Points
    436
    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 chevronné
    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 : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    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)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  5. #5
    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
    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 chevronné
    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 : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    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.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  7. #7
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    Par défaut
    Bonjour a vous,

    Je pose les bases avt de...

    A la lecture de mon post, vs avez dû comprendre
    - que je debute en Java (en prog, je suis 1 amateur éclairé a la bougie)
    - que je debute sous eclipse.

    professeur shadoko dit:
    la deuxième suggestion peut être intéressante si tu fais des contrôles de validité lors d'un "set"
    Je comprends que vos fameux controles de validité se redigent ds la classe a tester, a la declaration des setter et non pas ds la classe de test (qui est le test unitaire)

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setId_autocar(int id_autocar) {
    		this.id_autocar = id_autocar;
    	}
    C'est ici, j'ajoute les controles de validité?
    Avec des condit° if, else, switch (et sans doute d'autres que je ne connais pas)?

    professeur shadoko rajoute:
    ça centralise ces contrôles.
    Ca me semble plutôt une bonne chose de centraliser.

    OButterlin dit:
    la version initiale est la plus performante.
    Ok, je prends note pr la suite, car etant débutant, la rapidité passe pr le moment au second plan (+ la simplcité de ce que j'ecris...)

    OButterlin rajoute
    Pour ce qui est de la "protection", dans tous les cas, c'est plus un vœu qu'une réalité en java
    Il me semble que j'en prends cse petit a petit.

    La recherche sur la "reflection" (faute d'ortographe volontaire ou pas?) se fera un peu plus tard.

    Je laisse le post ouvert encore un moment, histoire de voir si je dois creuser des idées.

    Je m'en vais de ce pas faire un autre post que que vous (les intervenants forum, pas vs 3 spécifiquement) puissiez me dire ce que vs en pensez.

    Merci pr vos réponses.
    grub

  8. #8
    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
    Effectivement, en français, on écrirait réflexion, mais là, on parle d'une fonctionnalité java.
    Reflection is a feature in the Java programming language. It allows an executing Java program to examine or "introspect" upon itself
    Cette fonctionnalité permet d'explorer des classes, lister les méthodes, extraire des valeurs ou changer les valeurs de propriétés.
    C'est surtout utile dans la conception d'outils.
    Ci-dessous un exemple de modification de la propriété "id" de ta classe Vehicule
    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
    ...
            Vehicule v = new Vehicule("VL", 160000, "116 LX 68");
            System.out.println("id = " + v.getId());
     
            try
            {
                Field field = v.getClass().getDeclaredField("id");
                field.setAccessible(true);
                field.set(v, 4);
                System.out.println("id = " + v.getId());
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau membre du Club
    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
    Points : 34
    Points
    34
    Par défaut
    re,

    ok, je clos le post.

    Merci pr vos éclaircissements et pour l'explication de ce qu'est la reflection.

    Bonne journée a vous,
    grub

+ 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