Incapsulamento Java
Incapsulamento
Il significato di Encapsulation è assicurarsi che i dati "sensibili" siano nascosti agli utenti. Per raggiungere questo obiettivo, devi:
- dichiarare variabili/attributi di classe come
private
- fornire metodi get
e set pubblici per accedere e aggiornare il valore di una
private
variabile
Ottieni e imposta
Hai imparato dal capitolo precedente che private
è possibile accedere alle variabili solo all'interno della stessa classe (una classe esterna non ha accesso ad essa). Tuttavia, è possibile accedervi se forniamo metodi di get e set pubblici.
Il get
metodo restituisce il valore della variabile e il set
metodo imposta il valore.
La sintassi per entrambi è che iniziano con o get
o set
, seguito dal nome della variabile, con la prima lettera maiuscola:
Esempio
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Esempio spiegato
Il get
metodo restituisce il valore della variabile name
.
Il set
metodo prende un parametro ( newName
) e lo assegna alla
name
variabile. La this
parola chiave viene utilizzata per fare riferimento all'oggetto corrente.
Tuttavia, poiché la name
variabile è dichiarata come private
, non
possiamo accedervi dall'esterno di questa classe:
Esempio
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Se la variabile fosse dichiarata come public
, ci aspetteremmo il seguente output:
John
Tuttavia, mentre proviamo ad accedere a una private
variabile, otteniamo un errore:
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
Invece, utilizziamo i metodi getName()
e setName()
per accedere e aggiornare la variabile:
Esempio
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"
Perché incapsulamento?
- Migliore controllo degli attributi e dei metodi di classe
- Gli attributi di classe possono essere resi di sola lettura (se si utilizza solo il
get
metodo) o di sola scrittura (se si utilizza solo ilset
metodo) - Flessibile: il programmatore può modificare una parte del codice senza influire su altre parti
- Maggiore sicurezza dei dati