Salta ai contenuti
Manuale LogoManuale Logo

Incapsulamento

Finora abbiamo modificato i campi direttamente:

persona.eta = -5;

Java lo permette se il campo è accessibile, ma questo valore non ha senso.

L’incapsulamento protegge i dati di un oggetto e controlla come vengono letti o modificati.

Con private, un campo può essere usato solo dentro la classe.

public class Persona {
private String nome;
private int eta;
}

Da fuori non puoi più fare:

persona.eta = 20; // errore se eta è private

Serve un modo controllato per leggere e modificare il valore.

Un getter restituisce il valore di un campo.

public String getNome() {
return nome;
}

Esempio:

public class Persona {
private String nome;
public String getNome() {
return nome;
}
}

getNome permette di leggere nome senza rendere il campo pubblico.

Un setter modifica il valore di un campo.

public void setNome(String nome) {
this.nome = nome;
}

Il vantaggio è poter controllare il valore prima di salvarlo.

public void setEta(int eta) {
if (eta >= 0) {
this.eta = eta;
}
}

Se qualcuno prova a impostare -5, il valore non viene accettato.

public class Persona {
private String nome;
private int eta;
public Persona(String nome, int eta) {
this.nome = nome;
setEta(eta);
}
public String getNome() {
return nome;
}
public int getEta() {
return eta;
}
public void setEta(int eta) {
if (eta >= 0) {
this.eta = eta;
}
}
}

Uso:

public class Esempio {
public static void main(String[] args) {
Persona persona = new Persona("Luca", 20);
System.out.println(persona.getNome());
System.out.println(persona.getEta());
persona.setEta(21);
System.out.println(persona.getEta());
}
}

Output:

Luca
20
21

public significa accessibile dall’esterno.

private significa accessibile solo dentro la classe.

Una regola molto comune in Java è:

  • campi private
  • metodi pubblici solo quando servono

L’incapsulamento aiuta a:

  • evitare valori non validi
  • cambiare l’interno della classe senza rompere tutto il programma
  • rendere chiaro quali azioni sono permesse

All’inizio sembra più lungo. Nei programmi reali rende il codice più sicuro e ordinato.