Laboratorio di Programmazione - A.A. 2004/05
Parte 1
Si rappresentino attraverso opportune classi Java, definite all'interno di
un package esprbooleane,
espressioni booleane
formate da: (i) variabili caratterizzate da un nome
formato da una stringa; (ii) costanti caratterizzate
da un valore di tipo boolean
; (iii) and di
due espressioni; (iv) or (ennario) di n espressioni.
Si richiede che le espressioni intere supportino l'uguaglianza (sintattica)
profonda attraverso l'overriding di equals()
e
la redifinizione di hashCode()
, la copia profonda
attraverso l'overriding di clone()
, e una rappresentazione
testuale attraverso l'overriding di toString()
.
Per quest'ultima si faccia riferimento alla seguente sintassi:
EB := costante | variabile | (EB && EB) | (EB
|| EB || ... || EB)
Parte 2
Si definisca una classe ServiziEsprBooleane
,
all'interno di un package serviziesprbooleane
,
contenente il seguenti metodo:
public static boolean valuta(EsprBooleana e, Map a)
:
che data una espressione e
ed un Map
a,
che rappresenta una assegnazione di variabili,
valuta e
assegnando alle sue variabili
il valore previsto nella assegnazione a
. Si
assuma che il Map a,
che rappresenta una assegnazione,
associ a chiavi di tipo String
(il nome della
variabile) valori di tipo Boolean
(il
valore della variabile), e che tutte le variabili in e
siano incluse in a
.Parte 3
Calcolare inoltre la complessità della generazione
della copia profonda di oggetti di tipo EsprBooleana
.