Question

Doublons possibles:
Membres de données publiques vs getters, setters
But des membres privés dans une classe

Quelle est l'utilisation des getters et des setteurs lorsque vous pouvez rendre vos variables publiques et éviter les tracas de lignes telles que A.setVariableX(A.getVariableY())?

Était-ce utile?

La solution

Pour masquer les détails de l'implémentation. Si vous choisissez de rendre vos propriétés publiques à la place, alors décidez plus tard de changer leur façon de fonctionner, vous devez modifier tout le code associé.

Avec les getters et les setters, vous pouvez souvent modifier les détails de l'implémentation interne sans modifier l'API visible (et donc éviter d'avoir à modifier l'un des code qui utilise l'API de la classe en question).

Autres conseils

Les getters et les setters peuvent faire la validation et l'instanciation paresseuse, alors que les membres du public ne le peuvent pas.

Soit dit en passant, ce n'est pas un langage agnostique, car la plupart des langues qui implémentent les propriétés abstraitent la mise en œuvre afin qu'ils ressemblent à des membres publics dans le code.

Parce que parfois, il y a des contraintes quant à ce que pourrait être votre variable et avoir à vérifier cela lorsque vous le définissez, c'est du sens.

Par exemple, si votre âge n'est pas autorisé à être -1, vous vérifierez cela dans votre setter.

if(value >= 0)
{
   _age = value;
}
else
{
  throw new InvalidAgeException("Age may not be less than 0");
}

Les setters et les getters s'appliquent aux propriétés, quelles que soient les «propriétés» dans votre code.

Par exemple, vous pouvez avoir un angle variable, qui stocke une valeur d'angle exprimée en radians. Vous pouvez ensuite définir les setters et les getters pour cette variable, avec n'importe quelle unité d'angle que vous pensez pertinente.

Cela fait partie du principe d'encapsulation. Vous utilisez des setters et des getters comme interface pour interagir avec votre objet afin que vous puissiez - par exemple - ajouter plus tard toutes les fonctionnalités (comme valider les données d'entrée) sans toucher le code qui utilise la ou les classes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top