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 getmetodo restituisce il valore della variabile e il setmetodo imposta il valore.

La sintassi per entrambi è che iniziano con o geto 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 getmetodo restituisce il valore della variabile name.

Il setmetodo prende un parametro ( newName) e lo assegna alla namevariabile. La thisparola chiave viene utilizzata per fare riferimento all'oggetto corrente.

Tuttavia, poiché la namevariabile è 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 privatevariabile, 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 getmetodo) o di sola scrittura (se si utilizza solo il setmetodo)
  • Flessibile: il programmatore può modificare una parte del codice senza influire su altre parti
  • Maggiore sicurezza dei dati