Libro 1 – Capitolo 2 – Le basi del linguaggio Java

Gestione dell’Input / Output da Console in Java


Nel capitolo precedente abbiamo esposto un esempio di prima classe in Java che visualizzava a video un semplice messaggio di testo. In questo paragrafo, mi voglio occupare di spiegare in modo esauriente come funziona la gestione dell’Input/Output in Java. E’ utile sottolineare in questa circostanza che in Java così come altri linguaggi di programmazione equivalenti è possibile progettare diverse tipologie di applicazioni. Una distinzione precisa intercorre fra le applicazioni che lavorano in Console ovvero nella shell di sistema o nel prompt dei comandi, e le applicazioni GUI (Graphical User Interface) che sono applicazioni che utilizzano delle interfacce grafiche per la gestione dell’applicazione. In questa prima parte del libro, mi soffermerà sull’uso dell’Input / Output su Console. Ricordo che il dispositivo di Input predefinito è la tastiera che Java suole indicare come System.in, mentre il dispositvo predefinito per l’output è il monitor che Java come abbiamo visto nel capitolo precedente indica con System.out. La gestione dell’Input o/o Output può essere svolta in vari modi, io utilizzerà una clsse disponibile nel linguaggio di programmazione Java che la classe “Scanner” per la gestione dell’input.
La classe Scanner fa parte di una raccolta di classi molto amplia che si indica con package, in questo caso il package che utilizzeremo è java.util. In particolare quando parlerà delle classi e dei fondamenti della programmazione ad oggetti utilizzerò questo package per mostrare a titolo di esempio la gerarchia delle classi.
La classe Scanner prevede per l’inserimento dati da tastiera o da altro dispositivo di input come ad esempio un file di dati esterno l’apertura di un canale di comunicazione che avviene mediante l’istanziamento di un oggetto della classe secondo la sintassi:

Scanner nome oggetto = new Scanner (System.in);

Questa operazione di istanziamento che spiegheremo nel dettaglio apre un canale di input collegato al dispositivo di input predefinito che nel nostro caso è la tastiera. In questa istruzione sono state utilizzate due operazioni contemporaneamente la dichiarazione del nome dell’oggetto di tipo Scanner a sinistra dell’uguale e l’istanziamento immediato del nuovo oggetto al momento della sua stessa dichiarazione. Questa operazione è stata svolta in questo modo per consentire sin dalla riga di codice successivo il suo utilizzo. Questo aspetto è importante poichè un oggetto non è altro che un contenitore di dati allocato in un’area di memoria costituito da un insieme di attributi e da metodi. Orbene, in realtà l’istruzione sopra esposta poteva anche essere spezzata in due istruzioni:


1 // dichiaraizone dell'oggetto
6 Scanner tastiera;
5// istanziamento dell'oggetto della classe Scanner
4 tastiera= ndw Scanner (System.in);

A questo punto la differenza appare chiara, nella prima riga di codice è stato deinito un commento a singola riga infatti il commento si apre con il doppio “//” slash. A riga 2 è stata dichiarata una variabile di nome tastiera di tipo Scanner la quale non è riferita a nessun oggetto, vedremo che nei prossimi capitoli che in questo caso la variabile oggetto assume predefinitamente un valore a seconda del tipo di dato.
In tutti i linguaggi di programmazione moderni possiamo di dstinguere i tipi valore e i tipi riferimento. Senza entrare troppo nel dettagli, un tipo valore è un tipo di dato che assume un valore scalare come un numero, un carattere, mentre un tipo riferimento è un tipo di dato che contiene un indirizzo di riferimento ove trovare una qualunque aggregazione di dati. I tipi riferimento più importanti sono gli oggetti ottenuti come istanza di classe. Quando viene definito un oggetto la sua variabile è un tipo riferimento ovvero l’indirizzo di memoria ove trovare tutte le caratteristiche concrete di quell’oggetto.
Un tipo riferimento può assumere un valore null, che è un’indicazione che la variabile non è nulla ma non ha riferimento.
Finalmente a riga 4 avviene l’istanziamento della variabile oggetto “tastiera” con l’uso dell’istruzione new, che associa un indirizzo di memoria di partenza dell’area di memoria dove poi dovrà essere allocato fisicamente l’oggetto con i valori reali o se volete concreti.
Vedremo nei prossimi capitoli che non sempre è necessaria l’utilizzo della clausola new, ma ci sono operazioni di istanziamento che avvengono in modo diverso. IN particolare abbiamo viso un esempio nel capitolo 1 nella prima classe quando andiamo ad invocare il metodo “println” senza utilizzare la parola chiave new.
La classe Scanner possiede numerosi metodi per essere utilizzata in questo capitolo, introduco solo i seguenti metodi con le relative descrizioni delle loro funzioni:

Metodo
Descrizione
Esempio
nextInt()
legge l’input da tastiera e lo assume intero e lo memorizza in una variabile
int x;
x=tastiera.nextInt():
nextDouble()
legge l’input da tastiera e lo assume come numeor reale in precisione doppia e lo memorizza in una variabile
double x;
x = tasteira.nextDouble()
nextLIne()
legge l’input da tasteira e lo assume come stringa e lo memorizza in una variabile
Stromg x;
x = tastiera.nextLine()

A questo punto il significato dei metodi assumendo che a titolo di esempio l’oggetto della classe Scanner si chiama “tasteira”, nella tabella sono illustrati solo alcuni dei metodi utilizzati. Molti altri metodi er la classe Scanner sarnno esaminati nei prossimi capitoli, ma comunque sono consultabili all’indirizzo web https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html.
Ora dobbiamo soffermarci su una questione, ma in Java come faccio ad utilizzare altre classi che non ho progettato io ?
La riposta in parte è stata già data quando nella parte iniziale di questo capitolo ho parlato del package, e del java.util che è il package che include molte classi fra cui la classe Scanner con tutti i suoi membri associati.
Per poter utilizzare una qualunque classe nel nostro codice è obbligatorio dichiarare mediante la clausola import il nome del package da utilizzare prima della dichiarazione della classe.
Per citare un esempio:

1 import java.util.Scanner;
2 public class Test
3 {
4    // attributi e metodi
5 }

Mi sono volutamente mantenuto sul generico poichè nel prossimo esempio vedremo nei dettagli come utilizzare la classe Scanner per ricevere un input da Console. Come si vede nella prima riga del file sorgente java è inserita la direttiva di importazione. Nel caso di più package differenti o di classi diffeenti dello stesso package ovvero una direttiva per ognuna di esse.

Espressioni aritmetiche in Java



In questo paragrafo parliamo delle espressioni aritmetiche e del loro uso in java, gli operatori fondamentali sono riportati nella tabella sottostante con i relativi esempi:

Per continuare a leggere questo articolo devi sottoscrivere un abbonamento
Puoi abbonarti al link al menù principale o cliccando sul link Abbonati Ora!