web-dev-qa-db-fra.com

Méthodes privées sur méthodes publiques

J'examinais la classe StringTokenizer.Java et quelques questions me sont venues à l'esprit. 

J'ai remarqué que les méthodes publiques qui doivent être utilisées par d'autres classes invoquaient des méthodes privées qui effectuaient tout le travail. Maintenant, je sais que l’un des principes de OOD est de rendre tout ce que vous pouvez en privé et de cacher tous les détails de la mise en œuvre. Je ne suis pas sûr de bien comprendre la logique derrière tout cela. 

Je comprends qu’il est important de rendre les champs privés afin d’empêcher que des valeurs non valides y soient stockées (une des nombreuses raisons). Cependant, en ce qui concerne les méthodes privées, je ne sais pas pourquoi elles sont aussi importantes. 

Par exemple, dans le cas de la classe StringTokenizer, aurions-nous pu simplement placer tout le code d'implémentation dans les méthodes publiques? En quoi cela aurait-il changé les classes qui utilisent ces méthodes puisque l’API de ces méthodes (c’est-à-dire les règles permettant d’appeler ces méthodes publiques) resterait la même? La seule raison pour laquelle je peux penser à l’utilité des méthodes privées est qu’elle vous aide à écrire du code dupliqué. Par exemple, si toutes les méthodes publiques ont fait la même chose, vous pouvez alors déclarer une méthode privée qui effectue cette tâche et qui peut être utilisée par les méthodes publiques. 

Autre question, quel est l'avantage de l'écriture de l'implémentation dans une méthode privée par opposition à une méthode publique?

Voici un petit exemple:

public class Sum{

    private int sum(int a, int b){
        return a+b;
    }

    public int getSum(int a, int b){
        return sum(a,b);
    }
}

Contre...

public class Sum{

    public int getSum(int a, int b){
        return a+b;
    }
}

Comment le premier échantillon est-il plus bénéfique?

27
kpatelio

Pour ajouter quelque chose, une méthode privée peut TOUJOURS être modifiée en toute sécurité, car vous savez avec certitude qu'elle est appelée uniquement à partir de sa propre classe, aucune classe externe ne peut appeler une méthode privée (elle ne peut même pas la voir).

Donc, avoir une méthode privée est toujours bon car vous savez qu'il n'y a aucun problème à la changer, même si vous pouvez ajouter en toute sécurité plus de paramètres à la méthode. 

Pensez maintenant à une méthode publique, n'importe qui peut appeler cette méthode. Par conséquent, si vous ajoutez/supprimez un paramètre, vous devez également modifier TOUS les appels de cette méthode.

La seule raison pour laquelle je peux penser à l’utilité des méthodes privées est qu’elle vous aide à écrire du code dupliqué.

En plus de consolider le code en double (souvent appelé "Ne vous répétez pas" ou "DRY"), l'utilisation de méthodes privées peut également vous aider à structurer et documenter votre code. Si vous trouvez une méthode d’écriture qui fait plusieurs choses, vous pouvez envisager de la scinder en plusieurs méthodes privées. Cela peut clarifier les entrées et les sorties de chaque élément logique (avec une granularité plus fine). De plus, les noms de méthodes descriptives peuvent aider à compléter la documentation de code.

2
zjs

Déclarer une méthode privée a pour but de: 

  • masquer les détails de la mise en œuvre
  • exclure la méthode de la liste en tant qu'API publique
  • assurez-vous que la logique derrière le code n'est pas utilisée/mal utilisée en externe
  • la plupart du temps, l'exécution de votre méthode dépend de l'exécution préalable d'autres méthodes. alors vous pouvez également être sûr que vous contrôlez la bonne séquence d'utilisation de votre méthode

Utilisez private pour vos méthodes, sauf si vous souhaitez que votre méthode soit utilisée en toute sécurité en dehors du contexte de votre classe.

1
Nar Gar

Lors de l'écriture de code propre en Java ou dans tout autre langage orienté objet, le code le plus lisible est généralement constitué de méthodes concises et concises. Il arrive souvent que la logique d'une méthode puisse être mieux exprimée dans des appels de méthode distincts pour rendre le code plus propre et plus facile à gérer.

En gardant cela à l'esprit, nous pouvons envisager des situations dans lesquelles de nombreuses méthodes effectuent des tâches pour atteindre un seul objectif. Pensez à une classe qui n'a qu'un seul but complexe. Le point d'entrée de cet objectif unique peut ne nécessiter qu'un seul point de départ (une méthode publique) mais de nombreuses autres méthodes faisant partie de l'opération complexe (de nombreuses méthodes d'aide privées).

Avec les méthodes privées, nous pouvons cacher la logique qui n'est pas et ne devrait pas être accessible de l'extérieur de la classe elle-même.

1
BVSmallman

Les méthodes publiques sont généralement du code que d'autres classes implémentant cette classe voudront utiliser. Les méthodes privées ne sont généralement pas aussi utiles en dehors de la classe, ou ne servent pas (seules) le but de ce que la classe est censée accomplir.

Supposons que vous êtes dans votre IDE de choix et que vous implémentez une classe A. Une classe est conçue pour ne faire qu'une chose, par exemple la génération de documents. Naturellement, vous aurez quelques méthodes mathématiques et de fonctionnement des octets dans la classe A qui sont nécessaires pour générer un document, mais les personnes essayant d’utiliser la classe A n’auront pas besoin de ces autres méthodes, car elles veulent simplement un document. Nous rendons donc ces méthodes privées afin de simplifier les choses pour les futurs utilisateurs de notre classe.

1
zclark

Rendre les fonctions privées vous donne un avantage dans les cas suivants:

  1. Rendre la fonction privée donne au compilateur JVM l’option d’inclure la fonction et donc d’améliorer les performances de l’application
  2. Si la classe est héritable et que vous l'étendez d'une classe enfant, vous pouvez le faire si vous souhaitez masquer les fonctions de la classe enfant (vous pouvez étendre StringTokenizer).
  3. Si un morceau de code doit être utilisé dans plusieurs fonctions, vous le déplacez avec la méthode de l'utilitaire privé
0
Saurabh

La sécurité et la prévention des bogues constituent un avantage et une bonne raison d'utiliser des méthodes privées dans des classes publiques. Les méthodes déclarées comme privées ne sont accessibles que par la classe dont elles font partie. Cela signifie que votre méthode privée ne peut pas être appelée par inadvertance depuis un autre endroit du programme réduisant les bugs et autres complications. Si vous déclarez que votre méthode est publique, l’ensemble du problème peut y accéder, ce qui peut entraîner des complications.

Vous pouvez avoir un certain nombre de méthodes qui travaillent sur une donnée donnée et que vous ne voulez pas qu'une autre partie du programme puisse interférer. L'utilisation de l'encapsulation de données via des méthodes privées et/ou des variables permet d'éviter ce problème et rend également votre code plus facile à suivre et à documenter.

0
Kerry Tolhurst