Prev   Top   Next 

L'architettura di una Macchina Astratta Object-Oriented: Overview

In generale una Macchina Astratta è un insieme di strutture dati e algoritmi, che ad esse danno dinamicità, atti ad eseguire programmi. L'architettura della macchina condiziona il paradigma di programmazione con il quale possono essere realizzati i programmi che essa è in grado di eseguire. Pertanto una Macchina Astratta Object-Oriented deve essere progettata in modo da avere componenti adatte a supportare le caratteristiche principali del paradigma in questione.
La Macchina Astratta qui presentata consente di manipolare oggetti e classi in maniera primitiva, e realizza il DISPATCHING DINAMICO per le invocazioni dei metodi.

Architettura di una Macchina Astratta Object-Oriented.
( Immaggine a mappa )

La componente centrale di ogni Macchina Astratta è il suo Interprete; esso è il cuore della macchina e procede prelevando di volta in volta un'istruzione del programma e coordinando le operazioni delle altre componenti per completare l'azione associata all'istruzione.

Allo start-up, alla macchina viene specificata una classe principale a partire dalla quale avrà inizio l'esecuzione del programma. Tale classe viene indicata all'interno di un Class Repository, il quale contiene tutte le classi di sistema e che nella pratica può essere realizzata con un disco fisso ( DISK ) o con una connessione di rete locale ( LAN ) o globale ( WEB ).
La componente che si occupa di caricare la suddetta classe nella Macchina Astratta è il Class Manager, e la zona di memoria gestita da tale modulo dove questa classe viene memorizzata e dove risiede il codice delle varie classi prende il nome di Method Area

Non appena la classe è stata caricata, l'interprete ne inizia l'esecuzione del metodo main. A tal fine, tramite lo Stack Manager, viene allocata nello Stack una Frame per tale metodo e l'interprete passa ad interpretarne il primo bytecode.
Per ogni bytecode, nell'Instruction set è presente una entry che descrive il comportamento della macchina al fine di realizzare l'operazione denotata dal bytecode corrente.

Un'altra struttura fondamentale presente nella macchina è l'Heap, che è gestito da un apposito modulo detto Heap Manager. Tale area di memoria è destinata a contenere gli oggetti che vengono via via creati e modificati durante l'esecuzione del programma. La gestione di questa memoria è totalmente a carico dello Heap Manager, che si preoccuperà di eliminare gli oggetti ormai inutili e di mantenere tale area in ordine.
Questa gestione automatica è tipica dei linguaggi Object-Oriented e ne costituisce una delle caratteristiche più interessanti per il programmatore, poiché consente la stesura di programmi più chiari senza rischio di errori di allocazione/deallocazione di oggetti in memoria.

La macchina astratta proposta è del tipo Stack-Based, ( piuttosto che Register-Based, come la maggioranza delle macchine realizzate in hardware, quali gli x86), il che in altri termini significa che per eseguire i calcoli sui dati necessita di un apposito Stack degli Operandi, dal quale prelevare gli argomenti, eventualmente consumandoli, e sul quale lasciare il risultato dell'operazione. Tale stack degli operandi non va confuso con lo Stack citato prima: ogni invocazione di metodo ha un suo stack di operandi che è ricavato all'interno dello Stack Frame associato a quel metodo. Ciò verrà chiarito quando si analizzerà lo Stack e lo Stack Frame.

 Prev   Top   Next