TLDR
L’incapsulamento è un principio fondamentale della programmazione orientata agli oggetti (OOP), e si basa sull’idea di nascondere i dettagli interni dell’implementazione ed offrire un interfaccia publica attraverso la quale gli utenti possono interagire con l’oggetto.
Vantaggi:
- aiuta a migliorare la sicurezza del codice poiché evita accessi non autorizzati ai dati interni
- rende il codice più robusto, strutturato e facile da mantenere
- incapsulando i dettagli complessi e presentando ciò che è necessario per interagire con l’oggetto
Ottenuto: utilizzando
setters
,getters
e i modificatori di accessibilità
Come funziona l’incapsulamento
L’idea alla base dell’incapsulamento è quella di nascondere i dettagli di implementazione di un oggetto, rendendo accessibili solo le informazioni necessarie all’esterno. Questo viene ottenuto attraverso l’utilizzo di modificatori di accesso, come private
, protected
e public
, che consentono di controllare il livello di visibilità degli elementi all’interno della classe.
Funzionamento
1. Incapsulamento dei dati:
- Gli attributi di una classe vengono dichiarati come
private
, in modo che possano essere accessibili solo all’interno della classe stessa. Questo impedisce agli oggetti esterni di accedere direttamente ai dati dell’oggetto, evitando così manipolazioni indesiderate.2. Metodi di accesso (getter e setter):
- Per consentire l’accesso ai dati incapsulati, vengono definiti dei metodi pubblici, chiamati getter e setter. I getter permettono di leggere il valore di un attributo, mentre i setter permettono di modificarlo. Questi metodi agiscono come interfaccia tra l’oggetto e il mondo esterno, garantendo il controllo sull’accesso e la modifica dei dati.
3. Incapsulamento del comportamento:
- I metodi di una classe vengono dichiarati come
private
,protected
opublic
a seconda del livello di visibilità desiderato. I metodiprivate
sono accessibili solo all’interno della classe, mentre i metodipublic
possono essere chiamati da qualsiasi parte del codice. I metodiprotected
sono accessibili all’interno della classe e nelle sue sottoclassi.
Access Modifiers
private
,protected
epublic
sono parole chiave in Java che consentono di controllare il livello di visibilità e accessibilità degli elementi (classi, attributi e metodi) e sono chiamati Java - Access Modifier.
Vantaggi dell’incapsulamento
Vantaggi
1. Occultamento dell’implementazione:
- I dettagli di implementazione di un oggetto vengono nascosti, rendendo il codice più modulare e facile da mantenere.
2. Protezione dei dati:
- I dati dell’oggetto sono protetti da modifiche accidentali o non autorizzate, garantendo l’integrità dei dati.
3. Riusabilità del codice:
- L’incapsulamento facilita il riutilizzo del codice, in quanto gli oggetti possono essere utilizzati senza conoscere i dettagli di implementazione.
4. Flessibilità e estendibilità:
- È più semplice apportare modifiche all’implementazione di un oggetto senza influenzare il codice che lo utilizza.
Esempio
Supponiamo di voler creare una classe Persona
che rappresenta una persona. Vogliamo incapsulare i dati della persona, come il nome e l’età, in modo che possano essere accessibili e modificati in modo controllato.
public class Persona {
// Attributi privati
private String nome;
private int eta;
// Costruttore
public Persona(String nome, int eta) {
this.nome = nome;
this.eta = eta;
}
// Metodi getter e setter
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getEta() {
return this.eta;
}
public void setEta(int eta) {
if (eta >= 0) {this.eta = eta;}
else {System.out.println("L'età non può essere negativa.");}
}
// Metodo per stampare i dati della persona
public void stampaInfo() {
System.out.println("Nome: " + this.nome);
System.out.println("Età: " + this.eta);
}
}
Funzionamento
1. Incapsulamento dei dati:
- Gli attributi
nome
eeta
sono dichiarati comeprivate
, quindi sono accessibili solo all’interno della classePersona
.2. Metodi di accesso (getter e setter):
- Sono stati definiti i metodi
getNome()
,setNome()
,getEta()
esetEta()
per permettere l’accesso e la modifica dei dati incapsulati. Questi metodi agiscono come interfaccia tra l’oggettoPersona
e il codice esterno.3. Incapsulamento del comportamento:
- Il metodo
stampaInfo()
è dichiarato comepublic
, quindi può essere chiamato da qualsiasi parte del codice per stampare le informazioni sulla persona.
oss: In questo esempio, l’incapsulamento garantisce che i dati della persona siano protetti e possano essere modificati solo attraverso i metodi
setter
appropriati. Inoltre, il metodostampaInfo()
fornisce un’interfaccia pubblica per accedere alle informazioni sulla persona.