Ainsi private permet de limiter l’accès à quelque chose (méthode, attribut, etc) à seulement la classe courrante. Mais il y a d’autres niveaux également :
Nom
Effet
private
Seul la classe courrante peut y accéder
protected
Toutes les classes dans le même package et les classes qui héritent de la classe actuelle peuvent y accéder
public
Tout le monde peut y accéder
Ne rien mettre (par défault)
Seul les classes qui sont dans le même package peut y accéder
Il est conseillé de surtout utiliser public et private.
N’exploitez pas vos amis
Un objet a ses responsabilités, elle ne doit pas simplemenet stoquer des données mais doit aussi avoir des fonctionalités.
💩⚠️ Ne pas faire ça
On peut donc ajouter une nouvelle méthode locateApple pour placer une pomme dans une certaine position par exemple:
En résumé une classe doit implémenter des fonctionalités et éviter de demander aux autres classes de faire son travail.
Ne kidnappez pas les objets
La “loi de déméter” sert à protéger les pauvres objets que vous maltraitez.
Elle défini que vous ne devez intéragir directement qu’avec vos amis et ne pas parler aux inconnus. Et vos amis sont uniquement :
Les objets en paramètres
Les objets en attributs
Les objets de la même classe que vous
Les objets que vous créez
En revanche les objets qui sont retournés par des méthodes d’une autre classe ne peuvent pas être utilisées directement.
Donc ça c’est juste non…
Dans cet exemple, nous avons un objet de classe Game mais on va récupérer et aussi dépendre aussi sur les classes Player, CardHand et Card. Ce qui n’est vraiment pas une bonne idée et rends l’infrastructure du code beaucoup plus complexe.
On pourrait par exemple créer une méthode getActivePlayerCard(int i) dans Game pour obtenir un Card et réduire le nombre de dépendences (notre classe est amie avec Game et Game (où notre nouvelle méthode est) est amie avec CardHand).