Il principio di astrazione consiste nell’identificare le proprietà importanti di ciò che si vuole descrivere, per potersi concentrare solo sulle cose importanti (quali esse siano, dipende dal progetto).
I linguaggi di programmazione stessi sono astrazione del calcolatore sottostante e forniscono al programmatore strumenti per implementare il modello astratto creato. Più sono di alto livello i linguaggi e maggiore è l’astrazione.
L’astrazione del controllo viene realizzata tramite le funzioni, i blocchi e i parametri. Essa fornisce un’astrazione funzionale al progetto in cui ogni componente fornisce servizi solo al suo ambiente, mentre la sua astrazione descrive il comportamento esterno (il solito “non devo sapere com’è implementata una funzione, mi basta sapere quali parametri vuole e quale output genera”) e ne nasconte i dettagli interni. La comunicazione avviene attraverso i parametri passati e l’ambiente globale (che però così facendo distrugge l’astrazione).
L’astrazione dei dati sarebbe la definizione di come rappresentare e quali operazioni sono possibili sui dati (ad esempio sugli interi posso svolgere le operazioni matematiche). Questa astrazione è inaccessibile all’utente poiché è protetta da una capsula che la isola ed è impossibile da applicare nei linguaggi più vecchi (ad esempio il C).
Il dato che viene dichiarato in una definizione di funzione è detto parametro formale, mentre quello che viene passato a run-time è detto parametro attuale.
Come sappiamo i parametri possono essere passati per valore o per riferimento.
Nel passaggio per valore:
Nel passaggio per riferimento:
L’altra grande differenza fra passaggio per valore e per riferimento è il costo: nel caso del passaggio per valore viene effettuata un’operazione di copia, che diventa costosa quando si vanno a copiare molti dati; al contrario il passaggio per riferimento non copia nulla, ma chiaramente va a modificare la variabile anche nello scope da cui proviene.
Il passaggio per costante permette di passare parametri senza il rischio che si vada a modificare il valore che ha la variabile nel chiamante. In questo modo si può lasciare al compilatore la decisione di quando passare per valore e quando per riferimento (in genere si passano per valore i parametri “piccoli”, tutti gli altri per riferimento).