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 (ennario)
di n espressioni; (iv) or di due espressioni. Si
richiede che le espressioni booleane 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(Espressione 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 verifica di
uguaglianza profonda su oggetti di tipo EsprBooleana.