Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione di interi organizzati \\ per ordine di inserimento con una politica LIFO. \\ E’ modificabile. public IntStack () { \\ EFFECTS: costruisce uno Stack vuoto } public int top() throws EmptyException {\\ EFFECTS: se this è vuoto solleva EmptyException, \\ altrimenti restituisce l’ultimo elemento inserito. } public void pop() throws EmptyException { \\ MODIFIES: this \\ EFFECTS: se this non è vuoto rimuove l’ultimo elemento \\ inserito, altrimenti solleva EmptyException. } public void push (int i) { \\ MODIFIES: this \\ EFFECTS: inserisce i nella pila} } Si dia: - rappresentazione - si implementino tutti i metodi
Ex.2 - Funzione di Astrazione e Invariante a) Fornire Funzione di Astrazione e Invariante per IntStack b) Fornire Funzione di Astrazione e Invariante per IntSet e per Poly, introdotte a lezione (vedi testo del corso). c) Fornire Funzione di Astrazione e Invariante per ImmutableIntStack, variante non modificabile (modificatori diventano produttori) di IntStack
Ex.3 - Implementazione dati AF ed I a) Utilizzando AF ed I, di Ex.2a, implementare i metodi: costruttori, push, top, e pop di IntStack. b) Utilizzando AF ed I, di Ex.2b, implementare i metodi: costruttori, remove, insert di IntSet. c) Utilizzando AF ed I, di Ex.2b, implementare i metodi: costruttori, degree, subtract.
Ex.4 - Additionals: Equals a) Definire il corretto equals per IntStack, provve-dendo all’overriding, secondo i casi. b) Definire il corretto equals per IntSet, provvedendo all’overriding, secondo i casi. c) Definire il corretto equals per Poly, provvedendo all’overriding, secondo i casi. d) Definire il corretto equals per ImmutableIntStack, provvedendo all’overriding, secondo i casi.
Ex.5 - Additionals: Clone a) Definire il corretto clone per IntStack, provve-dendo all’overriding, secondo i casi. b) Definire il corretto clone per IntSet, provvedendo all’overriding, secondo i casi. c) Definire il corretto clone per Poly, provvedendo all’overriding, secondo i casi. d) Definire il corretto clone per ImmutableIntStack, provvedendo all’overriding, secondo i casi.
Ex.6 - Invariante di Rappresentazione a) Si dimostri che l’invariante I, introdotto in Ex.2a, è preservato dall’implementazione: 1) costruttore; 2) Push; 3) Top; 4) Pop; b) Si dimostri che l’invariante I, introdotto in Ex.2b, è preservato dall’implementazione: 1) costruttore; 2) Remove; 3) Insert c) Si dimostri che l’invariante I, introdotto in Ex.2b, è preservato dall’implementazione: 1) costruttore; 2) degree
Ex.7 - Funzione di Astrazione a)Utilizzando opportunamente AF, si dimostri che l’implementazione dei seguenti metodi, di Ex 2.a, soddisfa la specifica: 1)costruttore; 2)Push; 3)Top; 4)Pop; b)Si dimostri che l’implementazione dei seguenti metodi, di Ex 2.b, soddisfa la specifica: 1)costruttore; 2)Remove; 3)Insert c)Si dimostri che l’implementazione dei seguenti meodi, di Ex 2.b, soddisfa la specifica: 1)costruttore; 2)degree
Ex.8 - Overloading a)Utilizzando opportunamente AF, ed I, di ex.2c, si implementino i metodi top, pop, push e gli additionals equals, clone, toString. b)Si aggiunga un ulteriore metodo equals che calcola true se e solo se i due immutableIntStack sono lo stesso oggetto. 1) Per il nuovo metodo si utilizzi lo stesso nome equals in modo tale che:R.equals(S) sia, per R ed S dichiarati ImmutableIntStack, un invocazione dello equals-by-reference 2) Per il nuovo metodo si utilizzi lo stesso nome equals in modo tale che:R.equals(S) sia, per R ed S dichiarati ImmutableIntStack, un invocazione dello equals-by-value, definito in (a), che calcola true se i due oggetti esprimono lo stesso valore. 3) Per il nuovo metodo si utilizzi il nome equalsByRef, commentando vantaggi e svantaggi della scelta in (b3) rispetto a b1 e/o b2. c)Si scriva un metodo main che introduca due ImmutableIntStack R ed S, tali che applicando ad essi il primo dei due equals otteniamo false, mentre applicando il secondo otteniamo true.