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 :

Faut-il réellement déclarer des méthodes private ?


Sujet :

Langage Java

  1. #21
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Quand je code, je sépare au maximum mes fonctions afin d'avoir un code plus claire et plus réutilisable possible, en général j'ai au max 10 ou 15 instructions par fonctions.

    Une conséquence est que pour certain algo, bah j'ai pas mal de fonction.
    Imagine que toutes ces méthodes soient public, on se retrouverait avec des APi avec 20, 30 méthodes, dont les 3/4 au final n'ont au intérêt d'être utilisé en dehors.
    Et puis, ok dans ton cas la méthode a une utilité, mais dans une majorité des cas, la méthode privé n'a une utilité QUE dans une utilisation bien précise.

    De plus encore une fois, la façon ont on code son API peut faire qu'une fonction ne peut être utiliser qu'avec certaine valeur de paramètre. Imagine que la fonction utilise une variable de classe. En privé, aucun problème c'est toi qui gère ca, tu sais quand la fonction est appelée quelle valeur doit avoir ces paramètres. Si jamais la fonction est publique, bah ce n'est plus le cas.

  2. #22
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Je comprends bien ces derniers arguments, mais cela implique que le développeur de la classe doit présupposer ce qui va être utile ou non à l'utilisateur.

    Je trouve le risque est grand de se tromper et de mal estimer l'utilisation de la classe. C'est en tout cas ce qui se produit dans mon cas.

  3. #23
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Points : 710
    Points
    710
    Par défaut
    Citation Envoyé par fredmn Voir le message
    Le cas qui m'intéresse et qui a provoqué mon interrogation serait plutôt similaire à celui-ci :

    - une méthode publique : redimensionnerImage(échelle)
    - une méthode privée : redimensionnerImage(hauteur, largeur)

    (avec bien évidemment la méthode redimmensionnerImage(échelle) qui appelle redimmensionnerImage(hauteur, largeur))

    conséquence : je ne peut donc appeler redimensionnerImage(hauteur, largeur) alors que c'est exactement ce dont j'aurais besoin.

    ps : j'ai bien conscience que mon interrrogation bouscule l'idéologie objet, mais je le redis, cela me chiffonne de retaper du code déja existant.
    pps : merci en tout cas aux personnes qui prennent du temps pour discuter.
    ca c'est le concept de Facade en gros
    tu ne proposes au client que 2-3 methodes points d'entree de ton API le reste etant prive
    si une methode privee te parait utile, c'est peut etre qu'il faut l'ajouter a l'API qui est incomplete dans ce ca la

  4. #24
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Non, si l'API est faite comme les pieds, l'utilisateur n'a pas besoin des fonctions privés. S'il en a besoin, ce que l'utilisateur a fait de mauvais choix technique, sans en utilisant cette API qui ne répond pas à ses besoins, soit en ayant utilisé une mauvaise architecture.

  5. #25
    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 502
    Points
    15 502
    Par défaut
    Je comprends bien ces derniers arguments, mais cela implique que le développeur de la classe doit présupposer ce qui va être utile ou non à l'utilisateur.

    Je trouve le risque est grand de se tromper et de mal estimer l'utilisation de la classe. C'est en tout cas ce qui se produit dans mon cas.
    Je pense que le risque inverse est bien plus problématique : un utilisateur qui présuppose mal de la manière d'utiliser d'une fonction prévue a usage interne uniquement :
    - La fonction peut changer ou disparaitre.
    - Il est possible qu'elle nécessite aussi des actions particulières pas forcément évidentes, pour fonctionner correctement
    - Il peut aussi arriver que la fonction ne fonctionne pas dans des cas particulier dont l'auteur se fiche car il sait qu'ils ne peuvent arriver dans sa propre classe.

  6. #26
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Surtout qu'il vaut mieux qu'une personne, celle qui a développé l'API se creuse la tête un peu, plutôt que les n personnes suivantes qui l'utilisont .

    Enfin bon monsieur cherchait plus le code pour faire la fft que d'utiliser l'API développé dans un but précis.

  7. #27
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 398
    Points : 710
    Points
    710
    Par défaut
    Citation Envoyé par Uther Voir le message
    Je pense que le risque inverse est bien plus problématique : un utilisateur qui présuppose mal l'utilisation d'une fonction prévue a usage interne dont le fonctionnement peut changer, ou nécessiter des actions particulières pas forcément évidentes pour fonctionner correctement, ...
    je serais du meme avis

    une API c'est fait pour evoluer, proposer de nouvelles fonctionnalites mais ne pas peter ton code dans la mesure du possible (plutot alterer le resultat attendu)

    s'il n'y a plus que des methodes publics alors que certaines ne devraient etre qu 'a usage interne, tu vas etre susceptible de les utiliser, alors qu'elles a la prochaine version sont susceptibles d'avoir un comportement tout a fait different, et du coup de peter le fonctionnement de ton application ...

  8. #28
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Outre les arguments qui ont été évoqués précédement, il existe différents points de vue quand au choix de la visibilité d'une méthode.

    * Le choix de la visibilité d'une méthode peut se faire selon la nécessité de pouvoir la tester. En effet, il n'est pas possible d'écrire un test unitaire pour une méthode private. Donc une méthode complexe ou sensible devra être public pour pouvoir la tester.

    * Le choix peut aussi se faire selon l'utilisation que l'on veut permettre de son api. Pour être concret, une approche orientée interface est l'écriture d'un bundle osgi dans lequel seules les méthodes exposées par le service sont accessibles. Il s'agit d'une approche radicalement orientée client.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2008, 18h20
  2. Faut il déclarer des variables ?
    Par hugo69 dans le forum Langage
    Réponses: 16
    Dernier message: 01/07/2008, 12h08
  3. [DB2] déclarer des procédures stockées
    Par rémi_tounul dans le forum DB2
    Réponses: 12
    Dernier message: 29/04/2005, 11h14
  4. Editeur de texte - liste des méthodes
    Par Carlito_superheros dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 30/03/2005, 12h52
  5. [Info]descriptif des méthode ?
    Par java_math dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/06/2004, 08h36

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