|
Programmazione e Livelli di Astrazione
La gerarchia di macchine astratte di un sistema di calcolo non
termina necessariamente con l'implementazione di un linguaggio
di programmazione HLL L. Infatti un qualunque programma
in L aggiunge un ulteriore livello alla gerarchia estendendo la
macchiana astratta associata a L (o nel caso L non sia interpretato,
la macchina intermedia di L) in alcuni dei suoi componenti,
simulando generalmente nuove operazioni e nuovi tipi di dato.
Da questo punto di vista quindi qualunque attività di
programmazione può essere considerata come una attività
di definizione e di realizzazione di macchine astratte.
Vedere la programmazione in un certo linguaggio come estensione
della macchina astratta ad esso associata evidenzia il fatto
che la potenza e la flessibilità di un linguaggio di programmazione
dipendono dai meccanismi di astrazione che il linguaggio stesso offre.
Praticamente tutti i linguaggi forniscono un meccanismo di astrazione
(sia esso procedura, funzione o subroutine), che permette di definire
nuove operazioni.
Solo alcuni linguaggi (tipicamente quelli object-oriented)
possiedono meccanismi soddisfacenti per la definizione di nuovi tipi
di dato astratti.
Infine la possibilità di estendere le atre componenti della macchina
astratta (contollo di sequenza, controllo sul traserimento dati,
gestione della memoria), non è stata ancora realizzata in nessuno dei
linguaggi di programmazione maggiormente in uso.
Si potrebbe pensare che, anche se il linguaggio non fornisce un particolare
meccanismo di astrazione, sia comunque possibile simulare in esso un
qualunque costrutto; tuttavia in questo caso l'estensione risulterà
di più complessa realizzazione per il programmatore e di più
difficile utilizzo da parte dell'utente rispetto alla corrispondente estensione
ottenuta con un linguaggio di programmazione che possiede meccanismi di astrazione
adeguati.
|