Ingegneria del Software - Esercitazione 3
Prima parte
Implementare una classe generica (o template) chiamata SimpleQueue<T>
che rappresenti una coda di tipo FIFO, ovvero una coda First In First Out.
La classe deve implementare i tre seguenti metodi pubblici:
+ Enqueue(element : T) : void
+ Dequeue() : T
+ Clear() : void
ove il primo permette di inserire un elemento nella coda, mentre il secondo estrae e restituisce il primo
elemento inserito nella coda tra quelli non ancora estratti.
Il terzo metodo, Clear(), consente di svuotare immediatamente la coda senza dover
estrarre gli elementi uno alla volta.
Inoltre la classe implementa anche una proprietà a sola lettura - ovvero dotata del solo selettore
get e priva del modificatore set - chiamata
Count che restituisce il numero degli elementi attualmente presenti in coda.
Nota 1: per l'implementazione interna della coda, usare un array di elementi di tipo generico
T la cui dimensione viene definita mediante un parametro intero, chiamato
capacity, passato al costruttore della classe. Se il numero degli elementi inseriti
supera la capacità della coda (ovvero la dimensione dell'array interno), il metodo
Enqueue() deve generare una eccezione. Altresì, il metodo Dequeue()
deve generare una eccezione qualora si provi ad estrarre un elemento quando la coda è vuota.
Si consiglia anche di aggiungere una seconda proprietà a sola lettura chiamata Capacity
(con iniziale maiuscola), che restituisce la dimensione del suddetto array interno.
Realizzare inoltre una classe di test distinta, su un file differente rispetto a quello della suddetta classe,
per verificare il corretto funzionamento della coda.
Nota 2: può essere conveniente usare l'array interno come se fosse circolare, sfruttando adeguatamente
l'operazione di modulo (%) e un attributo che tenga conto della attuale posizione del primo
elemento che sarà estratto dalla lista, oltre all'attributo usato come contatore del numero degli elementi
presenti nella coda.
Seconda parte
Modificare la precedente classe facendo in modo che nel momento in cui viene raggiunta la capacità massima
(attraverso il metodo Enqueue()), non venga più propagata una eccezione, ma venga
creato un nuovo array interno, più capiente, nel quale verranno copiati i dati precedentemente memorizzati
nel vecchio array.
Finalità dell'esercizio
Gestione delle eccezioni
Generics
Strutturazione di collezioni personalizzate