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

Débats sur le développement - Le Best Of Discussion :

[Débat] Technologie .NET vs JAVA


Sujet :

Débats sur le développement - Le Best Of

  1. #981
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Moi je ne comprends pas pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public int prop
    {
    get{return _prop;}
    set {_prop=value;}
    }
    est mieux que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public int getProp
    {
    return _prop;
    }
    
    public int setProp(int i)
    {
    return _prop;
    }
    Si quelqu'un veut m'expliquer, je suis open, mais je comprends toujours pas....
    Et là où je trouve ça encore mieux, c'est qu'aujourd'hui la "mode" semble être les interfaces fluides...Qui rendent bien souvent inutiles la propriété en C#...
    Mais bon...
    Tu préfères quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    truc.setProp(machin.getProp());
    truc.Prop = machin.Prop;
    Tu me diras que c'est juste du sucre syntaxique... Je te répondrais que oui, mais qu'est-ce qui n'en est pas ?

  2. #982
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Ce qui me dérange avec les propriétés en java, c'est que lorsque je crée de simples POJO destinés à servir par exemple de parameter objects, le standard "m'oblige" à demander à mon IDE de générer 50 lignes de bouse pour polluer ma classe.

    Et si je manque de bol, ces méthodes faisant partie d'une API publique, je suis obligé de documenter ces bêtises à double lorsque j'ai des choses intéressantes à raconter sur la propriété, ce qui arrive tout de même malheureusement assez souvent.

    Bien que je m'y conforme, j'ai toujours trouvé assez débile de devoir générer des get/set partout. Je triche en utilisant lombok lorsque c'est possible. C'est un point que je trouve mieux réussi dans scala dont la syntaxe autorise de laisser visible un membre public et de le passer plus tard en propriété intelligente sans casser le code à la compilation.
    Ca évite d'écrire de la plomberie tout en préservant cette (soi-disant) encapsulation si chère aux yeux du monde.

  3. #983
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Ok c'est vrai que l'autoproperty c'est top pour les DTO, et pour les copies de propriété c'est plus clean.

    En même temps comme j'ai toujours aimé les interfaces fluides et que j'utilise cela énormément pour coder ainsi que du pattern factory (mécaniquement), j'avoue que même en C# j'utilise des méthodes pour setter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var _instance =NonsenseObject.CreateNewEmpty()
                          .MakeSense(true)
                          .BuildChaosOrganiser(false)
                          .FinalySetIteration(3000)
                          .BuildObject();
    donc pour moi c parfois plus verbeux en Java, mais pour l'utilisateur de l'API, généralement ça ne change rien.
    Sauf effectivement les lambda si j'utilise une convention de paramètres dans un singleton.

  4. #984
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    En C# 3.0, tu peux initialiser avec les appels de propriétés:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse obj = new MaClasse() { Prop=toto, Prop2=tata };

  5. #985
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    En C# 3.0, tu peux initialiser avec les appels de propriétés:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse obj = new MaClasse() { Prop=toto, Prop2=tata };
    et c'est quoi la diff avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse obj = new MaClasse(toto, tata);
    vu que dans tous les cas faut allez voir la doc pour, dans ton cas, savoir le nom de proprieter et dans le cas "normal" l'ordre des parametre.

  6. #986
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par unknow0 Voir le message
    et c'est quoi la diff avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse obj = new MaClasse(toto, tata);
    vu que dans tous les cas faut allez voir la doc pour, dans ton cas, savoir le nom de proprieter et dans le cas "normal" l'ordre des parametre.
    La différence c'est que dans le cas des propriétés, tu n'es pas obligé de créer un grand nombre de constructeurs avec toutes les surcharges possibles pour initialiser.

  7. #987
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    En même temps, avec .NET 4, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Truc{
      public Truc(int a=0, int b=2, int c=4, string machin="bidule"){...}
    }
    
    new Truc(b:3, machin:"trucmuche");

  8. #988
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par davcha Voir le message
    En même temps, avec .NET 4, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Truc{
      public Truc(int a=0, int b=2, int c=4, string machin="bidule"){...}
    }
    
    new Truc(b:3, machin:"trucmuche");
    Oui sauf que pour le coup, je déteste les paramètres par défaut

  9. #989
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Oui sauf que pour le coup, je déteste les paramètres par défaut
    Il te dit pas d'aimer ça, il dit qu'on peut le faire

  10. #990
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    conceptuellement, je ne comprends pas comment on peut penser objet sans penser ses constructeurs.

    Au contraire, toutes les possibilités de création d'un objet devrait être connues et maitrisées. C'est d'ailleurs une des problèmatiques qu'adresse l'ioc.

    La différence c'est que dans le cas des propriétés, tu n'es pas obligé de créer un grand nombre de constructeurs avec toutes les surcharges possibles pour initialiser.
    Donc tu ne peux jamais tester correctement ton objet, vu que tu ne sais pas si le testeur ou même le code du test l'instancient correctement.

    Et pour le problème de construction, il y a justement les concepts de fabriques qui sont intéressants.

  11. #991
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Donc tu ne peux jamais tester correctement ton objet, vu que tu ne sais pas si le testeur ou même le code du test l'instancient correctement.
    Ca aussi c'est un argument contre les "mauvais programmeurs".

    En pratique, tu vas pas t'amuser à instancier un objet à coup de memberinit sur des membres privés.
    Tu vas pas non plus t'amuser à instancier un objet manuellement, en dehors de son constructeur...

    Quand tu fais du memberinit, tu appelles un constructeur, et ensuite tu initialises des propriétés. En gros, ça te permet de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Truc truc = new Truc();
    truc.setBidule(bidule);
    Machin m = new Machin(chose);
    m.setFoo(bar);
    m.setPlop(ploup);
    m.setBidule(truc);
    Sauf que c'est légèrement plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var m = new Machin(chose){
      Foo = bar,
      Plop = ploup,
      Bidule = new Truc { Bidule = bidule }
    };
    Après, c'est une question de goût, mais y'a aucune différence entre les deux.

    Je rappelle que les propriétés en C# sont traduites en getter/setter en CIL, que les divers "sucres syntaxiques" autour des constructeurs ou des appels de méthodes avec paramètre par défaut sont aussi convertis en l'équivalent qui va bien...

    Bref, y'a aucune histoire de rupture d'encapsulation derrière tout ça.

  12. #992
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    La différence c'est que dans le cas des propriétés, tu n'es pas obligé de créer un grand nombre de constructeurs avec toutes les surcharges possibles pour initialiser.
    humm pas faut en effet.

    mais par contre sa pose d'autre probleme, tu peu definir nb'importe quelle attribut de cette facon? (genre les priver/protected)

    l'avantage d'ogliger de passer par un constructeur c'est de garentire l'integriter de la class.

  13. #993
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    L'initialisation ne marche que sur les publics, bien sûr.

    Et le problème du "Ouin il faut utiliser que les constructeurs" est tout aussi présent en Java.

  14. #994
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Citation Envoyé par davcha Voir le message
    Ca aussi c'est un argument contre les "mauvais programmeurs".

    ...

    Bref, y'a aucune histoire de rupture d'encapsulation derrière tout ça.
    Ben si quelque part si tu dois attacher une propriété non initialisée à la construction, la plupart du temps c'est une composition.

    Par soucis de maintenance, j'utiliserai une méthode avec une signature explicite.

    Je comprends bien que ce soit lpus lisible ou plus simple, ça ne veut pas pour autant dire que c'est bien ou mieux.

  15. #995
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Genre, tu feras truc.setMachin(..) ?

    Comme dit plus haut, y'a pas de différence entre propriété et getters/setters. C'est que du sucre syntaxique.
    Rien t'empêche de mettre une grosse méthode derrière ton getter ou setter de propriété...

    En fait, la seule différence entre les deux (Java et .NET, ici), c'est qu'en Java, tu n'as pas ce sucre syntaxique pour les propriétés.

    Avoir un choix syntaxique (plus lisible qui plus est) n'est pas une bonne chose parce que celui-ci induit des différences fonctionnelles (qui n'existent pas) ?..

  16. #996
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par davcha Voir le message
    En fait, la seule différence entre les deux (Java et .NET, ici), c'est qu'en Java, tu n'as pas ce sucre syntaxique pour les propriétés.
    C'est oublier un peu vite que cela a une influence sur la serialisation (pour la serialsisation XML par défaut entre autre).

    Des getter/setter en méthode sont ignorés par le mécanisme de sérialisation.

  17. #997
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Comme si y'avait pas d'attribut qui empêche la sérialisation...

  18. #998
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par davcha Voir le message
    Comme si y'avait pas d'attribut qui empêche la sérialisation...
    Ben si, justement; en revanche, il n'y a pas d'attributs qui précisent qu'une paire de méthode getter/setter doit être utilisée pour la sérialisation.

  19. #999
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ce qui en fait un avantage des propriétés sur les getters/setters: Choix contre absence de choix.

  20. #1000
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ce qui en fait un avantage des propriétés sur les getters/setters: Choix contre absence de choix.
    C'est exactement ce que je voulais dire.

Discussions similaires

  1. [Débat] .NET vs JAVA/J2EE
    Par tssi555 dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/12/2008, 07h54
  2. Connexion a un service web .NET en JAVA
    Par skunkies dans le forum Services Web
    Réponses: 1
    Dernier message: 01/03/2007, 00h24
  3. [Net]socket java
    Par georges25 dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 13/02/2006, 16h22
  4. Réponses: 7
    Dernier message: 06/04/2005, 19h18

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