L'incapsulamento è un meccanismo che consiste nel raccogliere i dati e i metodi all'interno di una struttura nascondendo l'implementazione dell'oggetto, cioè impedendo l'accesso ai dati con altri mezzi diversi dai servizi proposti. Esso permette di garantire l'integrità dei dati contenuti nell'oggetto.
L'utente di una classe non deve per forza conoscere in che modo sono strutturati i dati nell'oggetto, cioè non è tenuto a conoscere l'implementazione. Così, impedendo all'utente di modificare direttamente gli attributi, e obbligandolo ad usare le funzioni definite per modificarli (dette interfacce), si assicura l'integrità dei dati (si potrà ad esempio assicurare che il tipo di dati forniti sia conforme alle nostre attese, oppure che i dati si trovino effettivamente nell'intervallo atteso).
L'incapsulamento permette di definire dei livelli di visibilità degli elementi della classe. Questi livelli di visibilità definiscono i diritti di accesso ai dati a seconda che vi si acceda con un metodo della classe stessa, di una classe ereditaria, oppure di una classe qualsiasi. Esistono tre livelli di visibilità:
Pubblica, le funzioni di tutte le classi possono accedere ai dati o ai metodi di una classe definita con il livello di visibilità pubblica. Si tratta del più basso livello di protezione dei dati;
Protetta, l'accesso ai dati è riservato alle funzioni delle classi ereditarie, cioè dalle funzioni membri della classe invece che dalle classi derivate;
Privata: l'accesso ai dati è limitato ai metodi della classe stessa. Si tratta del livello più elevato di protezione.
Foto: © Maksim M - Shutterstock.com