Compito esame 05/04/2005

Laboratorio di programmazione,
AA 2004/2005
Terzo appello
Compito A

Descrizione

Si vogliono realizzare delle classi per rappresentare un semplice linguaggio di programmazione in cui esistono solo variabili, istruzioni di stampa, sequenze di istruzioni e condizionali. Un programma in questo linguaggio è composto da una istruzione. Ogni istruzione può però essere composto da una singola istruzione di stampa, da una sequenza di altre istruzioni, oppure da un condizionale.

Parte I

Si realizzino le classi che rappresentano le variabili e le istruzioni. Si noti che viene richiesta una sola classe per la variabili, mentre deve esistere una classe per l'istruzione genererica e tre per le istruzioni specifiche.

variabile
un oggetto variabile è caratterizzato da una stringa (il nome della variabile)
istruzione
una istruzione può essere esclusivamente di uno dei seguenti tre tipi:
istruzioneStampa
una istruzione di stampa è caratterizzata da una stringa, che è la stringa che viene stampata quando si "esegue" una istruzione (vedi sotto);
istruzioneSequenza
una istruzioneSequenza è una sequenza di altre istruzioni
istruzioneIf
questa istruzione è composta da una variabile a da due istruzioni

Oggetti di queste classi rappresentano sintatticamente dei programmi scritti in un linguaggio di programmazione in cui esistono solo variabili, istruzioni di stampa, sequenze di istruzioni e condizionali. La stampa di un tale programma si può effettuare a partire da questi oggetti in questo modo:

OggettoCosa stampare
variabile si stampa la stringa che rappresenta il nome della variabile
istruzione di stampa si stampa print(stringa), dove la stringa è quella che si trova nell'oggetto che rappresenta l'istruzione
istruzione condizionale si stampa if(var,istr,istr) dove var è l'oggetto variabile e istr sono le due istruzioni che si trovano nell'oggetto
istruzione sequenza si stampa (istr,istr,...,istr), ossia si stampa la sequenza delle istruzioni precedute e seguite da parentesi e intervallate da virgole

Le classi devono essere incapsulate e avere i seguenti metodi:

Parte II

Realizzare una classe ServiziProgrammi che contiene due metodi:

stampa
questo metodo ha come argomento una istruzione, e la stampa
esegui
questo metodo ha come argomento una istruzione e un oggetto Map che rappresenta una valutazione booleana delle variabili; in altre parole, le chiavi di questo oggetto sono le variabili del programma e i valori sono oggetti Boolean; il valore boolean è il valore che viene dato alla variabile; eseguire il programma significa eseguire la sue istruzioni; in particolare, quando si esegue if(var,istr,istr) viene eseguita la prima istruzione se la variabile è vera e la seconda se è falsa