Est-il juste de dire que c'est une bonne pratique de tout régler par défaut private
lors du codage de quelque chose?
Et ensuite ne la mettre à niveau que protected
si une sous-classe en a besoin, ou public
si une autre classe en a besoin?
Est-il juste de dire que c'est une bonne pratique de tout régler par défaut private
lors du codage de quelque chose?
Et ensuite ne la mettre à niveau que protected
si une sous-classe en a besoin, ou public
si une autre classe en a besoin?
Réponses:
Réponse courte: Oui
Réponse plus longue:
Oui, mais cela ne doit pas être interprété comme une suggestion de commencer par écrire vos cours avec tout ce qui est privé; cette approche implique la conception de classes en se concentrant sur les détails de l'implémentation avant de s'installer sur une interface.
L'un des aspects les plus importants à considérer lors de la conception d'une classe est la manière dont elle sera utilisée; ce qui implique de réfléchir à vos méthodes publiques avant de commencer à penser aux détails privés / d'implémentation.
De plus, cette approche manque généralement de chances de se demander "Comment pourrais-je écrire un test unitaire pour cette classe?" - qui est une question importante à poser même si vous n'écrivez pas réellement de tests unitaires. (Connexes: "Quels sont les principes de conception qui favorisent le code testable?" )
Donc, une fois que vous avez défini l'interface publique, alors c'est une bonne idée de mettre par défaut le reste en privé car la plupart de ces informations seront généralement des détails d'implémentation granuleux qui ne concernent rien en dehors de la classe.
"Et puis ne le mettre à niveau en protégé si une sous-classe en a besoin, ou public si une autre classe en a besoin?"
C'est la mauvaise approche. Au moment de la conception, vous devez savoir quel accès public vous souhaitez accorder. Habituellement, vous donnez accès au public parce que c'est tout le but de votre classe. Et vous donnez un accès protégé parce que vous voulez que les sous - classes accèdent aux choses. Et vous utilisez le privé pour des choses qui ne sont l'affaire de personne d'autre.
Maintenant, si quelqu'un a besoin d' accéder à des choses auxquelles il n'a pas accès, alors vous devriez réfléchir sérieusement à ce besoin . Ils ne devraient pas avoir besoin de cet accès, sinon votre conception est incorrecte. Peut-être que votre conception est fausse et que quelque chose n'est pas public qui devrait l'être, alors vous changez cela. Mais si votre conception est correcte, il y a quelque chose qui ne va pas avec le besoin , donc vous corrigez cela au lieu d'endommager votre conception.
private
ou protected
?
La clé pour comprendre cet aspect de la programmation orientée objet est le concept d' encapsulation des données . L'idée est de rendre une classe plus facile à comprendre en masquant ses détails d'implémentation. C'est ce qu'on appelle la dissimulation des données . Ainsi, nous voulons seulement exposer (rendre public) les fonctions qui sont nécessaires pour utiliser la classe. Ces fonctions sont l' interface avec la classe.
Pensez à une interface comme la roue d'une voiture. Vous décidez dans quelle direction la voiture va en tournant la roue, mais sous les capots il y a des valves rotatives, l'hydraulique, des poulies qui changent la rotation de vos roues, mais vous n'avez pas besoin d'être un ingénieur en mécanique pour conduire une voiture.
La réponse à votre question est donc oui. Vous souhaitez masquer autant de détails sur une classe que possible dans d'autres classes. Comprendre quand quelque chose doit être public, privé ou protégé est facile à apprendre mais difficile à maîtriser.