next up previous contents index
Next: Protezione dei membri di Up: Introduzione alle classi Previous: Introduzione alle classi   Indice   Indice analitico

Introduzione agli oggetti

Fin dall'inizio abbiamo utilizzato la parola oggetto, indicando con tale termine un'entità che fornisse ad un dato una astrazione software avente lo scopo di rendere più semplice l'utilizzo di esso. Sappiamo che quando definiamo una variabile essa costituisce l'astrazione di una cella di memoria principale; quando compiamo delle operazioni in C++ su tale variabile, il compilatore pensa poi a tradurre tali operazioni astratte in operazioni in un linguaggio abbastanza semplice da potere essere compreso dalla macchina. Per gli oggetti il discorso è il medesimo: noi ``descriviamo'' un oggetto, il quale può essere modificato con delle operazioni ad alto livello di astrazione, ed il compilatore si occupa della sua implementazione a livello hardware. Tale procedimento è efficiente in quanto il compilatore riesce a tradurre molto bene i nostri programmi, i quali risultano d'altronde semplici per il programmatore.

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.


next up previous contents index
Next: Protezione dei membri di Up: Introduzione alle classi Previous: Introduzione alle classi   Indice   Indice analitico
Claudio Cicconetti
2000-09-06