web-dev-qa-db-fra.com

Pourquoi des méthodes "privées" dans l'objet orienté?

Je comprends que c'est un concept très basique dans le oups. Mais je ne peux toujours pas me déplacer. J'ai compris pourquoi les variables membres sont privées, donc l'utilisateur de classe ne peut pas en abuser en configurant des valeurs invalides.

Mais comment cela peut-il s'appliquer aux méthodes?

44
pointlesspolitics

Beaucoup de bonnes réponses, mais peut-être une de plus d'un autodidacte Java programmeur pendant que je traversais tout cela par moi-même avec beaucoup de douleur;)

Considérez une classe comme quelque chose vu de l'extérieur, pas comme quelque chose que vous voyez en interne . Si vous regardez une classe de l'extérieur, que voyez-vous?

Pour reprendre l'exemple de l'horloge, une horloge peut vous donner des informations sur l'heure actuelle et elle peut être configurée pour afficher l'heure exacte.

Donc, en regardant les choses de l'extérieur, une horloge est une machine qui peut faire ces deux choses; les méthodes publiques que nous les appelons.

Mais nous, en tant que constructeurs de cette horloge, nous savons qu'avant toute opération de temps, nous devons passer de 23 à 11 sur notre écran (c'est ce genre d'horloge), nous devons donc réorganiser les choses en interne un peu pour le faire. Le passage de 23 à 11 fonctionne très bien pour nous dans les deux cas - régler l'horloge et afficher l'heure actuelle - mais nous le faisons "sur le côté" car l'utilisateur n'a pas besoin de savoir à propos de toutes ces mathématiques compliquées. Ce sont des méthodes privées!

Notre classe Clock pourrait donc avoir deux méthodes publiques (showTime et setTime) qui sont toutes que l'utilisateur veut à voir, et une méthode privée (recountTime) qui fournit des fonctionnalités pour ces méthodes publiques et sont quelque chose que l'utilisateur ne veut pas pour voir.

Donc, d'une part, vous devez garder à l'esprit que privé est ce qui ne sera pas réimplémenté et accessible par les futurs programmeurs en utilisant votre code (comme cela a été souligné dans les réponses ci-dessus). Mais privé signifie aussi les choses faites sur le côté, donc l'utilisateur ne le voit pas . C'est pourquoi nous appelons les méthodes publiques une interface publique - c'est tout ce que l'utilisateur verra de l'extérieur.

Pour moi, il est utile (je suis autodidacte, donc ce n'est peut-être pas une méthodologie très populaire ...) d'écrire tout ce que les utilisateurs (utilisateurs réels et autres classes) feront avec ma classe (interface publique avec seulement des méthodes publiques) 'signatures), puis d'écrire les signatures de méthodes privées que I-the-implementer utilisera pour atteindre les objectifs publics qui ont promis de fournir à mes utilisateurs puis il suffit de le remplir avec du code.

Il peut être utile de garder à l'esprit que l'ancienne règle C est toujours valide (comme cela a été exprimé dans 97 choses que chaque programmeur devrait savoir ): une fonction/méthode ne devrait comporter que quelques lignes, vraiment! !

97
trzewiczek

Les méthodes privées sont utiles pour diviser les tâches en parties plus petites ou pour empêcher la duplication de code qui est souvent nécessaire par d'autres méthodes dans une classe, mais ne doit pas être appelée en dehors de cette classe.

27
uckelman

Les méthodes sont (également) utilisées pour structurer le code, et je ne veux pas que la structure interne de mon implémentation s'échappe via l'interface. Souvent, j'ai une méthode qui, à l'extérieur, semble faire une seule tâche, mais doit en fait effectuer quelques tâches plus petites. Dans de tels cas, je crée une petite méthode privée pour chacune des sous-tâches et je les appelle à partir de la méthode publiquement visible.

9
Thomas Lötzer

Pour exactement la même raison - certaines méthodes sont uniquement destinées à être utilisées à l'intérieur de la classe, et l'utilisation par des objets non-classe serait abusive. Pensez aux méthodes qui incrémentent et décrémentent le nombre d'objets pour la classe - elles ne doivent être appelées qu'à partir des constructeurs ou destructeurs d'une classe, et doivent donc être privées.

6
anon

Les méthodes privées ne peuvent être appelées que par des méthodes de la même classe ou du même "module". Les méthodes ne sont généralement pas rendues privées; ils sont généralement protégés pour que les enfants puissent les appeler, ou publics pour que d'autres codes puissent les appeler.

3

Eh bien, dans certains cas, vous voulez niquement cette classe spécifique pour utiliser une méthode et la protéger contre toute autre classe.

Juste un exemple pour montrer comment il peut être utilisé:

Vous avez une horloge de classe, elle fonctionne et fonctionne en gardant une trace de l'heure et de la date. Vous pouvez obtenir l'heure ou la date à l'aide de méthodes publiques. Mais l'horloge doit être correcte. vous ne pouvez donc pas ajuster l'heure ou la date en dehors de la classe. Mais l'horloge elle-même doit pouvoir régler l'heure (heure d'été par exemple)

Dans ce cas, l'horloge aura une méthode privée pour régler l'heure.

Ensuite, vous avez également un pro supplémentaire, qui est structuration du code. Vous pouvez diviser votre code en petites méthodes privées qui structurent le code mais les empêchent d'être utilisées en dehors de votre classe.

3
S.Hoekstra

Ayant toutes les autres réponses à l'esprit. Il convient de rappeler que la méthode privée n'est qu'un tip pour un programmeur dans de nombreuses langues. Dans la plupart des cas, il est toujours possible d'utiliser une méthode privée. Par exemple, en créant un objet qui hérite de l'objet avec une méthode privée et remplace sa méthode par une nouvelle méthode publique.

Dans certains langages modernes fortement orientés objet, les méthodes privées n'existent que par convention. La méthode avec '_' au début est considérée comme privée.

1
smentek