Scopo dell'esercizio è fornire un'implementazione alternativa della classe "FileSystem" vista
precedentemente, utilizzando una lista concatenata, invece che un array, di oggetti File Descriptor.
- Classe FileDescriptor - In linea di principio questa
classe non deve essere modificata.
- Classe FileSystem - La classe FileSystem
implementa il FileSystem vero e proprio. L'interfaccia rimane per la maggior parte identica a prima.
L'implementazione, però cambia quasi del tutto. Di seguito vengono descritti i
principali cambiamenti.
- Definire la classe privata interna FileElem nel modo seguente:
private class FileElem
{
public FileDescriptor file;
public FileElem next;
}
- La variabile di istanza principale si chiamerà firstFile e sarà un oggetto
della classe FileElem. Verrà inizializzata
a null nel costruttore e di seguito punterà sempre al primo elemento della lista di file.
- Quando un nuovo file viene inserito, deve essere mantenuto l'ordine lessicografico degli elementi.
Ad esempio, se abbiamo la seguente lista di file:

alla creazione del file con nome "pluto.txt", la directory diventa:
- Oltre al costruttore citato, la classe FileSystem devrà contenere i metodi pubblici visti nella
precedente implementazione (dir, create, delete, rename, search). Questi metodi, nel caso producano errori,
dovranno restituire un'eccezione. In particolare, il metodo search dovrà restituire un
oggetto FileDescriptor:
- public FileDescriptor search(String nome, String estensione) throws FileDoesNotEsist
- Possono essere implementati tutti i metodi privati (interni) voluti per percorrere la lista. Questi metodi
possono essere messi a supporto dei metodi pubblici utilizzando, in contesto locale,
oggetti della classe FileElem. In questo modo sarà possibile agire sui singoli elementi della lista
senza spostare il riferimento principale (oggetto firstFile).
- Classe Shell - In linea di principio la classe "Shell" non dovrebbe
essere modificata relativamente alle operazioni viste (stampa lista
file, help, quit, crea file, cancella file).
Probabilmente, l'unica modifica dovrà riguardare la chiamata del metodo search nella classe FileSystem, che ora restituisce
un oggetto FileDescriptor.
|