Come facciamo però a ``descrivere'' un oggetto? Con le variabili di tipo
primitivo non è possibile: se noi, ad esempio, definiamo con la variabile
int n
il voto di uno studente, è ovvio che n
dovrà essere
positivo per avere un significato; tuttavia il compilatore sa che tale
variabile è di tipo intero e non si preoccuperà minimamente di controllare
eventuali controsensi, perché troppo astratti per una macchina. Oppure, se
sappiamo che con double x
stiamo indicando lo stipendio di un
impiegato, è per noi ovvio che non ha alcun significato calcolare il seno di
x
; tuttavia se proviamo ad eseguire tale operazione, il compilatore non
si lamenterà affatto. Descrivere un oggetto corrisponde in C++ invece a
creare una classe, cioè un nuovo tipo, descrivendo al suo interno i
dati che l'oggetto deve contenere e dichiarando le operazioni che è
possibile effettuare su tali dati. Si tratta di nascondere
l'implementazione, cioè fare in modo che l'utilizzatore di una classe
possa compiere solo determinare operazioni su oggetti di tale classe. Mentre
calcolare il seno di un double è sempre possibile, e non possiamo
agire in nessuna maniera sulle operazioni permesse sui tipi primitivi, se
creiamo un classe siamo noi a decidere quali operazioni sono permesse e quali
non lo sono.
C'è anche un altro vantaggio nel nascondere la rappresentazione interna di un dato. Immaginiamo di costruire una classe la quale rappresenti un certo dato; siccome tale dato risulta nascosto ad un utilizzatore di tale classe, possiamo un domani modificare liberamente l'implementazione interna della classe (per aggiornarla o ottimizzarla o per qualunque altro motivo) senza che i programmi che la utilizzano ne risentano minimamente. Mano a mano che proseguiremo nella nostra trattazione sulle classi, questo discorso introduttivo risulterà sempre più chiaro.