La question est simple:
Comment declare vous vos variables d'instances?
(private or protected)
La question est simple:
Comment declare vous vos variables d'instances?
(private or protected)
Si la classe n'est pas vouée à etre étendue :
Tout en private sauf les constantes de classe ( public static final MA_CONSTANTE=...)
Si la classe est vouée à être étendue :
Tout en protected SAUF les variables gérées exclusivement par la classe courante.
Oui mais coment tu fais pour savoir si une classe va etre etendu ou pas. Comment tu sais si une variable vas etre exclusivement utilise dans une class?
Bah ça, c'est toi qui décide lors de la conception : la classe que tu es en train de concevoir devra-t-elle uniquement être utilisée telle-quelle, ou bien le développeur suivant aura-t-il le droit d'étendre ta classe ? ça relève du problème de conception là.Oui mais coment tu fais pour savoir si une classe va etre etendu ou pas
exemple assez courant :Comment tu sais si une variable vas etre exclusivement utilise dans une class
Ta classe possède une variable privée qui lui sert par exemple de limite :
private int limite;
Cette limite peut être initialisée par une valeur par défaut que les classes fille auront le droit d'étendre :
protected static int DEFAULT_LIMITE=100;
l'affectation de la variable limite se fait forcément par un setteur puisque des traitements dans ta classe en découlent :
public void setLimite(int l){
this.limite=l;
... // traitement interne à ta classe
}
Si tu avais mis la variable "limite" en protected, rien n'empêchait la classe fille de la modifier directement en omettant de faire les traitements internes.
Pour conclure, il me semble que tout cela concernce les règles de conception de la POO.
salut,
le private interdit tout accès aux attributs d'une classe depuis l'extérieur (notion d'encapsulation) mais elle crée un problème au niveau de l'héritage si tu déclare les attributs en private les classes héritants ne pourront pas accéder à ces attributs alors pour ne pas être obligés de les déclarer comme public pour les utiliser on a pensés à protected qui permet à ces classes d'accéder à ces attributs.
Personnellement je déclare exclusivement mes attributs de classes en protected, le private me semblant trop restrictif :
- Impossibilité d'y accéder depuis l'extérieur, quelle que soit la classe appelante (en revanche un attribut protected peut être modifié depuis une classe appartenant au même package),
- Pour pouvoir modifier ou accéder à un attribut, méthodes get/set systématiques (contraignat quand il y a une vingtaine d'attributs),
- Voir plus haut.
Les attributs déclarés en private peuvent être, selon certains, pour éviter au développeur suivant de faire n'importe quoi. Mais je considère que c'est au développeur suivant de savoir ce qu'il fait.
Partager