Esempio prova di programmazione
Si vuole realizzare un codificatore, ovvero un dizionario che contiene coppie di tipo “parola codice”, in cui il campo “parola” è una stringa che ha la funzione di chiave per il dizionario ed il campo “codice” è anch’esso una stringa che rappresenta una parola cifrata associata alla parola di partenza. Si assume che entrambe le stringhe, parola e codice, non contengano caratteri delimitatori.
Un codificatore può essere usato per cifrare un messaggio tramite la seguente procedura:
- Le parole del messaggio che sono contenute nel codificatore vengono sostituite dai relativi codici;
- Le parole che non sono contenute nel codificatore vengono lasciate inalterate.
Inoltre un codificatore può essere invertito, ovvero è possibile creare un decodificatore (codificatore inverso) ad esso associato, tramite cui un messaggio cifrato può essere decifrato, ovvero riconvertito nell’originale.
Esempio: dato un codificatore che contiene le due coppie (007 bimbo), (missione gita), e dato il messaggio “Inviare missione 007”, allora il messaggio cifrato è “Inviare gita bimbo”.
File CodificatoreTester.java
Il candidato ha a disposizione il file CodificatoreTester.java, il quale contiene classi e interfacce da utilizzare e/o completare secondo quanto qui indicato:
- InvertibleDictionary. Interfaccia che rappresenta il tipo di dato astratto “dizionario invertibile”. Leggere con attenzione i commenti all’interfaccia ed ai suoi metodi. Non modificare.
- DictionaryItemNotFoundException. Eccezione lanciata in caso di mancato ritrovamento di una coppia nel dizionario. Non modificare.
- Codificatore. Classe che implementa l’interfaccia InvertibleDictionary. Completare la classe scrivendone la parte privata e realizzandone i metodi pubblici. Un codificatore conterrà coppie di tipo “parola codice” appartenenti alla classe StringPair, realizzata come classe interna di Codificatore e il cui codice non va modificato. Si richiede inoltre di realizzare un metodo toString per la classe, che restituisca una stringa contenente gli elementi secondo il seguente formato: (1) ogni coppia viene scritta su una riga diversa, e (2) all’interno di ogni riga la coppia viene scritta seguendo il formato specificato dal metodo toString della classe StringPair (si veda il corpo di tale metodo).
- CodificatoreTester. Completare la classe in modo che il suo metodo main realizzi il seguente comportamento:
- Riceve un nome di file di testo, file1, come argomento sulla riga di comando;
- Crea un oggetto c1 di tipo Codificatore e vi inserisce coppie lette dal file file1 (scritto nello