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

Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?

Votants
332. Vous ne pouvez pas participer à ce sondage.
  • Pour

    185 55,72%
  • Contre

    147 44,28%
Langage Java Discussion :

JDK 7: Proposition 12 : déclaration des propriétés [Débat]


Sujet :

Langage Java

  1. #121
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    Est-ce que ça apporte une fonctionnalité nouvelle ? non.

    Source de bug des getters et des Setters ?

    Code peu lisible ?

    Qu'on me dise "java aurait pu être conçu de sorte à avoir ça" je veux bien, mais tes arguments ne sont pas convaincants...

  2. #122
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Est-ce que ça apporte une fonctionnalité nouvelle ? non.
    Est ce que les generics apportent de nouvelle fonctionnalités? Pas vraiment c'est juste du sucre syntaxique, pourtant ça m'ennuie énormément de ne pas les avoir quand je travaille sur un projet limité en version 1.4.

    Source de bug des getters et des Setters ?
    Le principe même du getter/setter, n'est pas buggé.
    Mais la duplication de code inutile augmente toujours le risque d'erreurs de programmation.
    Par exemple, ça m'est arrivé d'avoir une faute de frappe qui fait que getter et setter ont un nom différent, ou une erreur de copier/coller où l'on a oublié de modifier le nom de la variable stockant la propriété.

    Code peu lisible ?
    Le code de certaines de mes classes est constitué à plus de 80% des setter/getters triviaux. Pour moi c'est clairement un gros défaut de lisibilité : une classe qui ne fait rien de particulier de devrait pas atteindre des centaines de lignes. Le code vraiment utile deviens nettement moins évident.
    De plus comme on ne sait pas si un getter fait juste une affectation ou d'avantage, il faut prendre le temps de le vérifier si on veut éviter les mauvaises surprises.
    Un des gros défaut de JAVA est qu'il est bien trop verbeux, et pour moi cette proposition d'évol, va dans le sens de corriger ça. C'est également le cas des closures.

    Qu'on me dise "java aurait pu être conçu de sorte à avoir ça" je veux bien, mais tes arguments ne sont pas convaincants...
    Oui et Java aurait également du être conçu de la sorte à avoir les génériques, heureusement qu'ils ont étés rajoutés par la suite.
    Et puis ce ne serait jamais qu'un ajout pas un changement. Si ça plait pas, rien n'obligerait de l'utiliser.

  3. #123
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    Tes arguments se basent sur 1) je génère mes getters/setters à la main (source de bug) 2) ça représente 90% de mon code dans certain cas (masquage).

    Comme plusieurs l'ont déjà fait remarqué : vive les EDI.

    Maintenant, si java avait uniquement des problèmes de cosmétique, ça ne me dérangerait pas de voir ce point en tête de liste. Malheureusement ce n'est pas le cas, et je pense qu'il y a des choses bien plus importantes que de changer la syntaxe juste pour changer la syntaxe.

  4. #124
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    1) Ces problèmes je les ai eu bien que j'utilise des EDI.
    2) je ne connais pas d'EDI qui masque les getter/setter automatiquement de manière élégante
    Et même si les EDI étaient une solution miracle à tous les problèmes, les propriétés étant un concept de base JAVA, il me parait naturel qu'elles soient gérées au niveau du langage.

    Quant au fait que JAVA ait d'autre problèmes à résoudre, je ne pense pas que ça entre en ligne de compte. Java n'est pas un petit projet amateur. Il y a largement assez de monde a travailler sur JAVA pour s'occuper de divers problèmes à la fois.

  5. #125
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    Dans le monde réel les ressources ne sont pas infinies...

  6. #126
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Par l'utilisation des annotations
    Citation Envoyé par Supersami2000 Voir le message
    Pour mais un peu plus configurable.
    Sinon comment dire "je veux juste un setteur" "le setteur est protected"

    Pourquoi ne pas ajouter des annotations prisent en compte au javac

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Person {
     @access readWrite protected
     public String forename;
     
     @access read public
     public int age;
    }
    Je suis favorable, par des annotations, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Person {
     @withGetter
     @withSetter("private")
     public String name;
    }
    Intérêts :
    - très lisible,
    - moins de code,
    - souplesse :
    * possibilité d'écrire son getter/setter si on veut
    * possibilité de modifier l'accessibilité private/public (par défaut c'est celle attribué à la propriété)

  7. #127
    Membre régulier
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Points : 87
    Points
    87
    Par défaut
    Pour! Mais il faudrait y associer une syntaxe plus riche que le simple mot clé property. N'oublions pas que toutes les propriétés ne mappent pas forcément des champs (certaines retournent le résultat de traitements complexes)

  8. #128
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Supersami2000 Voir le message
    Pour mais un peu plus configurable.
    Sinon comment dire "je veux juste un setteur" "le setteur est protected"

    Pourquoi ne pas ajouter des annotations prisent en compte au javac

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Person {
     @access readWrite protected
     public String forename;
     
     @access read public
     public int age;
    }


    Je vote pour pour deux choses:

    * La première, seulement dans le cas ou les accès aux propriétés par setters ou getter sont définis par des annotations et là je reprends l'idée de Supersami2000.

    En revanche j'ai des interrogations sur les propriétés qui sont des collections. C'est du sucre syntaxique mais l'idée serait de pouvoir effectuer les opérations courantes sur les collections à travers des annotations spécifiques à ces collections et si nécéssaires spéciliasées pour telle ou telle collection (genre une map). De plus l'intérêt serait de ne pas récupérer directement la collection et de faire n'importe quelle opération dessus

    En gras le code généré par le compilateur.

    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
    class BusinessDataBean {
    
      @Access({"private read", "private write"})
      @ListOperations({"public addAll", "public add", "public removeAll", "public remove"})
      private List<String> strings;
    
      @Access({"public read"})
      @MapOperations({"public get" , "pubic containsKey", "private put" })
      private Map<String,Integer> translationMap;
    
      {
         putInTranslationMap("blahblah", 0); // ok ce put éxiste en privé.
      }
    }
    
    class BusinessHandler {
    
      public void doSomething(BusinessDataBean bean) {
        bean.setStrings(new ArrayList<String>()); // error : le setter est privé
        bean.addToStrings("blahblah");
        bean.removeAllInStrings(...);
        bean.addAllToStrings(...);
        
        bean.getTranslationMap(); // error : on ne pas avoir accès à l'instance de la collection
        bean.containsKeyInTranslationMap("blahblah");
        bean.putInTranslationMap("blahblah", 0); // error : le bean ne permet de put
      }
    }
    Evidement les collections seront automatiquement initialisée, et ces initilisations sont toujours configurables à l'instanciation de l'objet.


    * La seconde raison est à propos de la documentation, très souvent ce sont les propriétés qui sont documentés dans les objets du domaine métier, et les accesseurs n'ont soit pas de commentaire ou le commentaire par défaut de l'IDE. Grâce à cette syntaxe un développeur qui veut consulter la documentation aura directement accès à celle de le propriété voulue, éventuellement l'ide pourra ajouter des informations pour dire qu'il s'agit de telle ou telle méthode : setter, getter, et dans le cas de ma propositions la javadoc de la collection.

    Je trouve que cette idée prends tout son sens lorsqu'on modélise avec un outils UML, on ne s'amuse pas à documenter les getter et setter autres appels sur une collection.

    Bref qu'en pensez vous!

    EDIT : Après en avoir discuté avec des collègues, les property à partir du moment ou elles sont dans un javabean elles devrait être publiques. Un peu comme dans Groovy. Si on veut un comportement particulier pour tel ou tel accesseur d'une propriété alors on l'écrit pleinement.

    Du coup on aurait soit le mot-clé property soit une annotation @Property. D'ailleur en soit l'utilisation du mot clé ne me dérange pas, on a bien du subir des changements marquant pour passer à java 5 notamment pour l'enum. Si on ne change rien pour garantir à tout prix la compatibilité ascendante on n'arrivera jamais à rien et se serait une usine à gaz.

Discussions similaires

  1. Réponses: 27
    Dernier message: 19/10/2008, 11h51
  2. JDK 7: Proposition 13 : Accès aisé aux propriétés
    Par vbrabant dans le forum Langage
    Réponses: 93
    Dernier message: 16/10/2008, 18h14
  3. recopie des propriétés d'un composant
    Par pitounette dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/02/2004, 10h40
  4. Comment cacher des propriétés dans un nouvel objet ?
    Par Pedro dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/10/2003, 18h53
  5. ouverture de la fenêtre des propriétés afffichage
    Par Mercilius dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 26/03/2003, 17h07

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