Esempio prova di programmazione
Si vuole realizzare un programma per la gestione dell’elenco degli studenti iscritti al primo anno di Ingegneria dell’Informazione. Gli iscritti verranno suddivisi in canali, in funzione dei loro cognomi (ad es. 4 canali per studiare la distribuzione alfabetica dei cognomi degli studenti, al fine di trovare una suddivisione equilibrata tra i diversi canali).
Gli studenti i cui cognomi hanno iniziali comprese nei range A-D, E-H, I-Q, R-Z.
Il programma consente di utilizzare un elenco di studenti rappresentato tramite un oggetto della classe StudentSet, che realizza il tipo di dati astratto SortedSet. Un contenitore di tipo StudentSet conterrà oggetti di tipo Student, ciascuno dei quali rappresenta le informazioni relative ad un singolo studente (cognome, nome, n. di matricola).
Il candidato ha a disposizione il file StudentSetTester.java, il quale contiene classi ed interfacce da utilizzare e/o completare secondo quanto qui indicato:
- SortedSet. Interfaccia che rappresenta il tipo di dati astratto “insieme di dati ordinabili”. Leggere con attenzione i commenti all’interfaccia ed ai suoi metodi. Non modificare.
- Student. Classe che rappresenta le informazioni relative ad un singolo studente. La classe realizza l’interfaccia Comparable. La classe sovrascrive i metodi toString e equals di Object. Leggere con attenzione in particolare i commenti ai metodi Student.compareTo e equals per capire il criterio di ordinamento usato nella classe. Non modificare.
- StudentSet. Classe che implementa l’interfaccia SortedSet. Completare la classe scrivendone la parte privata e realizzandone i metodi pubblici. Verranno considerate ottime le soluzioni per cui il metodo contains ha prestazioni O(log n) e il metodo subSet ha prestazioni O(n). La classe deve inoltre sovrascrivere il metodo toString, che restituisca una stringa contenente gli elementi secondo il seguente formato: (1) i dati di ogni studente vengono scritti su una riga diversa, e (2) all’interno di ogni riga i dati Student vengono scritti seguendo il formato specificato dal metodo toString della classe (si veda il corpo di tale metodo).
- StudentSetTester. Classe che collauda l’insieme di studenti. Completare la classe in modo che il suo metodo main realizzi il seguente comportamento:
- Riceve un nome di file di testo, file, come argomento sulla riga di comando;
- Crea un oggetto matricole di tipo StudentSet e vi inserisce coppie lette dal file file nello stesso formato specificato più sopra per il metodo toString di StudentSet;
- Al termine dell’inserimento stampa a standard output il contenuto dell’insieme matricole;
- Accetta una