qui - Dipartimento di Matematica e Informatica

Transcript

qui - Dipartimento di Matematica e Informatica
UNIVERSITÀ DEGLI STUDI DI CATANIA
FACOLTÀ DI INGEGNERIA
Laurea Specialistica in Ingegneria Informatica
14/11/06 – Ingegneria del Software 2 – Esercitazione in itinere
1. Implementare una classe Lista che realizza una lista doppiamente concatenata, con null objects all’inizio ed alla
fine. Per cui una lista vuota conterra’ due null objects. Si consideri che la lista contenga numeri interi, ma non
porla come restrizione. Non usare librerie per liste gia’ esistenti: dovete implementarla.
2. implementare metodi per aggiungere elementi in testa e in coda.
3. implementare un metodo booleano per determinare se un certo elemento e’ nella lista.
4. implementare un iteratore che attraversi la lista dalla testa alla coda (ovviamente, senza usare collezioni e relativi iteratori gia’ esistenti).
5. implementare un visitor che attraversi la lista dalla testa alla coda e produca una lista di tutti i numeri dispari in
essa contenuti.
6. implementare un visitor che costruisca una rappresentazione su stringa dei numeri contenuti nella lista. La
stringa comincia per “(“, seguita dai numeri interi nella lista, separati da “-”, ed infine termina per “)”. Esempio: lista vuota= “()”, lista con 3,6,0= “(3-6-0)” .
7. Implementare una classe ListaOrdinata, del tutto simile alla Lista precedente salvo il fatto che puo’ essere specificato un ordine variabile per i suoi elementi. Per questa classe implementare i metodi:
- add(anInteger) che aggiunge un intero nella posizione corretta
- addAll(aCollection) che aggiunge in ordine alla lista tutti gli elementi nella collezione
- get(index) restituisce l’elemento in posizione index nella lista
- toString() stampa una stringa con il contenuto della lista, in modo simile a prima.
- indexOf(anObject) restituisce la locazione di anObject nella lista, -1 se non c’e’.
- order(anAlgorithm) che setta l’algoritmo da usare per ordinare la lista. Implementare ordinamento crescente,
decrescente e casuale.
8. creare i seguenti tre decoratori per la classe ListaOrdinata:
-
FancyString, in cui il metodo toString() restituisce [a,b,c] anziche’ (a-b-c)
-
Reverse, in cui il metodo toString() restituisce [c,b,a]
-
SubList, che aggiunge un metodo subList(int from, int to) che restituisce gli elementi compresi tra la posizione from (inclusa) e to (esclusa).
9. implementare dei client per lo unit testing delle classi realizzate