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:
Oggetto | Cosa 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:
- metodi che permettono la creazione degli oggetti
- metodi che permettono di trovare i dati memorizzati nei
vari oggetti
- metodo toString che ritorna la stringa come
descritta nella tabella di sopra
- metodo equals che effettua il confronto
profondo
- corrispondente metodo hashCode
- metodo clone che effettua una clonazione
profonda
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