Compito esame 05/04/2005

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

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 due 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 due istruzioni
istruzioneSwitch
questa istruzione è composta da una variabile e da una sequenza di 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 switch(var,istr,istr,...,istr) dove var è l'oggetto variabile e istr sono le istruzioni che si trovano nell'oggetto
istruzione sequenza si stampa (istr,istr), ossia si stampano le due 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 delle variabili; in altre parole, le chiavi di questo oggetto sono le variabili del programma e i valori sono oggetti Integer; il valore intero è il valore che viene dato alla variabile; eseguire il programma significa eseguire la sue istruzioni; in particolare, quando si esegue switch(var,istr,...,istr) viene eseguita la prima istruzione se la variabile vale 0, la seconda se vale 1, ecc. Se la variabile non è in questo intervallo, si esegua l'ultima istruzione