Fondamentalmente con I/O (Input/Output) su file di testo ci riferiamo alla possibilità di accedere e manipolare il contenuto di un file in formato testuale. La lettura permette di acquisire dati salvati esternamente al programma, mentre la scrittura consente di memorizzare informazioni generate dal programma in modo permanente. Queste operazioni sono fondamentali per salvare dati tra diverse esecuzioni, registrare log (come nel nostro caso), configurazioni, o creare file di output utili all’utente o ad altri sistemi.
Ci sono due aspetti che rendono l'apprendimento di tali operazioni utile: uno logico-didattico e un altro più correlato al discorso della cosiddetta "Legacy" dei sistemi informatici.
Per quanto riguarda l'aspetto didattico, la lettura e scrittura su file di testo permette di familiarizzare con diversi concetti come ad esempio :
Persistenza dei Dati: Comprendere come i programmi possano salvare e recuperare informazioni tra diverse esecuzioni, introducendo il concetto di persistenza dei dati.
Gestione delle Risorse: Apprendere l'importanza di aprire, utilizzare e chiudere correttamente i file, sviluppando una consapevolezza nella gestione delle risorse di sistema.
Separazione dei Dati dalla Logica: Sviluppare la capacità di separare i dati dalla logica del programma, migliorando la modularità e la manutenibilità del codice.
In informatica, il termine "legacy" (letteralmente ereditato) si riferisce a sistemi, software, hardware o componenti tecnologici ormai obsoleti o datati, ma ancora in uso perché svolgono funzioni critiche o difficili da sostituire.
Ricollegandoci al nostro discorso però, molti sistemi Legacy sviluppati decenni fa non utilizzano database relazionali moderni, ma si affidano a file di testo o file binari per memorizzare i dati in maniera persistente; di conseguenza leggere e scrivere su file di testo risulta imprescindibile per interagire con questi sistemi.
In Java la lettura e scrittura su file di testo viene effettuata mediante l'utilizzo di un paio di classi in base al tipo di operazione da effettuare :
PrintWriter : la classe da cui si istanzia l'oggetto utilizzato per scrivere su file di testo (utilizzato per non sovrascrivere i contenuti).
FileWriter : la classe da cui si istanzia l'oggetto utilizzato : per scrivere su file di testo sovrascrivendo oppure d'ausilio all'oggetto PrintWriter per stampare su file senza sovrascrivere.
Scanner : la classe da cui si istanzia l'oggetto utilizzato per leggere dal file di testo.
Uno dei casi in cui viene adoperato l' I/O su file di testo all'interno del nostro lavoro è la cronologia delle partite: un elenco che mostra rispettivamente per ogni partita giocata i nickname dei due giocatori coinvolti e il nominativo del vincitore.
Come menzionato nell'introduzione del sito, il gioco mette a disposizione la possibilità di salvare, o eventualmente creare, un profilo identificato da un nickname.
L'implementazione della: creazione, dell'accesso e dell'aggiornamento dei dati di un profilo, ci ha permesso di affrontare e valutare gli aspetti legati alla sequenzialità nella gestione dei dati, considerato che tali file vengono letti dalla prima all'ultima riga (evidenziando la natura sequenziale dell'operazione).
Infine, oltre agli aspetti esterni alla didattica come il discorso della Legacy dei sistemi informatici, la gestione di questo flusso sequenziale contribuisc alla formazione di una logica procedurale e a comprendere l'importanza dell’ordine nel controllo del flusso di un programma, dove d'altra parte possiamo affermare che la simulazione di un sistema di profili simile a quello che può essere uno scenario reale, come il login e l'autenticazione, possa aumentare la motivazione degli studenti in fase di produzione.
Infine, tali operazioni anche se sottovalutate, possono portare a un rafforzamento delle competenze trasversali di un informatico quali :
ragionare in modo algoritmico nel prevedere le varie condizioni (profilo esistente, profilo da aggiungere...) ;
gestione dello stato di un applicazione (in questo caso l'aggiornamento dei profili);
applicare il pensiero computazionale nella progettazione delle soluzioni (come nella valutazione della gestione sequenziale dei dati).