Laboratorio di Programmazione - A.A. 2004/05
Parte 1
Si rappresentino attraverso opportune classi Java, definite all'interno di
un package esprintere, espressioni intere formate
da: (i) variabili caratterizzate da un nome formato
da una stringa; (ii) costanti caratterizzate da un
valore di tipo int; (iii) somma (ennaria)
di n espressioni; (iv) prodotto di due 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:
EI := costante | variabile | (EI + EI + ... +EI) |
(EI * EI)
Parte 2
Si definisca una classe ServiziEsprIntere, all'interno
di un package serviziesprintere, contenente il
seguenti metodo:
public static int valuta(EsprIntera 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 Integer (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 EsprIntera.