Encapsulation Java
Encapsulation
La signification d' Encapsulation est de s'assurer que les données "sensibles" sont cachées aux utilisateurs. Pour y parvenir, vous devez :
- déclarer les variables/attributs de classe comme
private
- fournir des méthodes publiques get
et set
private
pour accéder et mettre à jour la valeur d'une variable
Obtenir et définir
Vous avez appris du chapitre précédent que private
les variables ne sont accessibles qu'au sein d'une même classe (une classe extérieure n'y a pas accès). Cependant, il est possible d'y accéder si nous fournissons des méthodes get et set publiques.
La get
méthode renvoie la valeur de la variable et la set
méthode définit la valeur.
La syntaxe pour les deux est qu'ils commencent par get
ou set
, suivi du nom de la variable, avec la première lettre en majuscule :
Exemple
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Exemple expliqué
La get
méthode renvoie la valeur de la variable name
.
La set
méthode prend un paramètre ( newName
) et l'affecte à la
name
variable. Le this
mot clé est utilisé pour faire référence à l'objet courant.
Cependant, comme la name
variable est déclarée en tant que private
, nous
ne pouvons pas y accéder depuis l'extérieur de cette classe :
Exemple
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Si la variable était déclarée en tant que public
, nous attendrions la sortie suivante :
John
Cependant, lorsque nous essayons d'accéder à une private
variable, nous obtenons une erreur :
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
Au lieu de cela, nous utilisons les méthodes getName()
et setName()
pour accéder et mettre à jour la variable :
Exemple
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
Pourquoi l'encapsulation ?
- Meilleur contrôle des attributs de classe et des méthodes
- Les attributs de classe peuvent être rendus en lecture seule (si vous n'utilisez que la
get
méthode) ou en écriture seule (si vous n'utilisez que laset
méthode) - Flexible : le programmeur peut modifier une partie du code sans affecter les autres parties
- Sécurité accrue des données