|
Java Tutorial - Parte 1 0.1
Un tutorial per esempi
|
Ora che abbiamo acquisita una discreta panoramica del linguaggio possiamo cominciare a scrivere un programma. Gli argomenti affrontati finora sono una piccola parte del linguaggio Java, diciamo il minimo indispensabile per creare un programma stupido; c'è molta altra carne al fuoco ma andremo con calma, quando dovremmo affrontare problemi più complessi verranno spiegati le caratteristiche più complesse del linguaggio.
In questa sezione saranno descritti gli strumenti necessari alla creazione di un programma Java. Saranno anche fornite istruzioni su come installare i tools facoltativi come il compilatore GCC e l'interprete Perl: essi non sono strumenti indispensabili per apprendere il linguaggio Java ma vengono usati nel corso di questo tutorial per i confronti tra i linguaggi e per l'interfacciamento di Java con i linguaggi nativi.
Gli strumenti necessari allo sviluppo di una applicazione Java sono:
Gli strumenti facoltativi sono:
Ci sono tools che integrano in un unico ambiente tutti gli strumenti necessari e si chiamano Integrated Development Environment (IDE) ( = ambienti integrati di sviluppo) come per esempio Eclipse. Questi IDE sono strumenti davvero potenti in grado di automatizzare diversi aspetti dello sviluppo ma hanno anche alcuni aspetti a mio avviso negativi:
Secondo il mio modesto punto di vista, è meglio cominciare imparando tutte le varie fasi dello sviluppo di una applicazione e poi imparare ad usare al meglio un IDE che può facilitarci davvero la vita. Pertanto, nello sviluppo delle applicazioni di questo tutorial verrà insegnato l'uso degli strumenti a basso livello, quasi tutti a linea di comando conosciuti col nome di applicazioni CLI (Command Line Interface = interfaccia a riga di comando) in netto contrasto con gli IDE che sono tutti strumenti GUI (Graphic User Interface = interfaccia utente grafica).
Per installare i tools sulla macchina del lettore ci sono due strade, saranno descritte nelle prossime sotto-sezioni:
I tools usati in questo tutorial sono liberamente e gratuitamente scaricabili da Internet. Normalmente il progetto che si occupa di distribuire e mantenere questi tools forniscono uno strumento per la installazione automatica nel proprio sistema in particolar modo per piattaforme Windows™ Di seguito riporto i links da cui è possibile procedere:
L'installer automatico è davvero semplice da usare ma, poichè io personalmente non lo uso mai (se posso evitarlo) non so darvi ulteriori informazioni su questo aspetto. Il vantaggio di usare questo approccio è che, oltre alla semplicità della operazione, avrete uno strumento aggiornato, probabilmente ad una versione successiva a quella che ho usato io stesso.
L'unico svantaggio degli installer automatici è che normalmente essi richiedono i privilegi di amministratore sulla macchina dove si intende installare il tool.
Se non avete i privilegi di amminstratore o se preferite avere il pieno controllo di ciò che viene installato sul computer e senza inquinare il registry di Windows™ allora potete scaricare un archivio compresso (solitamente ZIP o 7-Zip) e decomprimerlo in una sotto-cartella della vostra cartella personale: in questo modo, il tool resta confinato nella cartella che voi avete scelto.
Lo svantaggio di questa soluzione è che si renderà necessario procedere ad alcune manovre post-installazione per modificare le impostazioni di sistema; manovre che, invece, vengono eseguite in autonomia dagli installer automatici.
Nella tabella seguente trovate i link ai portali da dove scaricare gli archivi compressi. Scegliete l'archivio specifico per il vostra piattaforma e scaricate il file compresso nella vostra cartella documenti (o quella che più vi aggrada).
| Tool | Portale |
|---|---|
| editor | Notepad++ |
| JDK | OpenJDK |
| GCC | MinGW-64 |
| Perl | Strawberry Perl |
Dopo il download, decomprimete l'archio compresso in una sottocartella a vostro piacere ma io vi consiglio di usare la sotto-cartella javatutor/tools in modo che, alla fine delle operazioni, avrete un albero che somiglia a questo:
javatutor | -> tools | | | -> jdk | -> notepad | -> mingw | -> perl
Non è sufficiente avere un programma o una applicazione residente sul disco fisso per poterla utilizzare a meno di non conoscerne ed indicarne il percorso completo sulla riga di comando; una operazione tediosa da compiere. La soluzione a questo inconveniente è quella di informare il sistema operativo in quali cartelle sono disponibili programmi ed applicazioni. Questa manovra si esegue impostando una speciale variabile di ambiente conosciuta con il nome di Path.
Dal menù Impostazioni di Windows™ digitate nel riquadro di ricerca la parola Path. Otterrete una scelta se applicare le modifiche per il solo vostro account oppure per l'intero sistema: questa è una scelta vostra personale. Se il vostro sistema Windows™ è troppo datato e non è disponibile un riquadro di ricerca, seguite il seguente percorso dal menù Impostazioni:
Sistema e sicurezza -> Sistema -> Impostazioni di sistema avanzate -> Variabili di ambiente
dovrebbe apparire una schermata simile a questa:
Dall'elenco delle variabili scegliete la riga in corrispondenza della variabile Path e clikkate il bottone "Modifica". Si aprirà la seguente schermata:
che contiene un elenco di percorsi nel vostro harddisk in cui il sistema operativo cerca un comando, un programma o una applicazione digitati sulla riga dei comandi del Prompt di MS-DOS. Clikkando sul bottone Nuovo aggiungete i seguenti percorsi:
%USERPROFILE%\javatutor\tools\jdk\jdk-22.0.2\bin %USERPROFILE%\javatutor\tools\mingw\mingw64\bin %USERPROFILE%\javatutor\tools\perl\perl\bin
I valori suesposti sono corretti se avete optato per usare gli stessi strumenti che ho usato io e che avete trovato già pronti nel archivio di questo tutorial e che avete decompresso a èartire dalla vostra cartella personale. Se avete scaricato i tools in versione aggiornata e/o li avete decompressi in cartelle diverse, allora dovete cercare il percorso in quelle cartelle tenendo a mente che, per tutti questi strumenti, i programmi sono inseriti nella sotto-cartella bin del pacchetto.
Se il vostro sistema Windows™ è piuttosto datato, è probabile che la variabile di ambiente Path non venga visualizzata in nuova finestra come quella vista poc'anzi ma che, invece, venga visualizzata come una stringa di caratteri contenente i percorsi di ricerca separati da un carattere punto-e-virgola, come riportato di seguito:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32 \WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\lucca\AppData \Local\Microsoft\WindowsApps;C:\Users\lucca\mingw\mingw64\bin;C:\Users\lucca \jdk\jdk-22.0.2\bin;
In questo caso per inserire i nuovi percorsi nella variabile Path dobbiamo modificare la stringa ed aggiungervi tutti i percorsi avendo cura di separare ognuno di essi con un carattere punto-e-virgola.
Path del pannello di controllo. I percorsi dei comandi relativi agli strumenti installati seguendo questa guida vanno AGGIUNTI a quelli già esistenti; la modifica dei percorsi già esistenti potrebbe pregiudicare il funzionamento di alcuni programmi. Per testare la corretta installazione dei tools, aprite il Prompt dei comandi (cercate "Prompt dei comandi" nella scheda di ricerca di Windows) e digitate il seguente comando:
> java --version
il sistema dovrebbe rispondere con un testo simile a questo:
openjdk 22.0.2 2024-07-16 OpenJDK Runtime Environment (build 22.0.2+9-70) OpenJDK 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing)
Se il sistema risponde invece con il messaggio:
"java" non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.
allora avete commesso un errore nella impostazione della variabile Path. Ricontrollate le impostazioni delle variabili di ambiente e correggete l'errore.
Allo stesso modo, provate la installazione del compilatore GCC e del Perl:
>gcc --version gcc (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders, r3) 14.1.0 Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. >perl --version This is perl 5, version 40, subversion 2 (v5.40.2) built for MSWin32-x64-multi-thread Copyright 1987-2025, Larry Wall
La disinstallazione di questo tutorial è una manovra piuttosto semplice: è sufficente cancellare la cartella che lo contiene, che dovrebbe essere javatutor se avete seguito i miei consigli, ed il gioco è fatto. Rimangono da rimuovere dal sistema gli strumenti di sviluppo installati come descritto in Strumenti necessari allo sviluppo.
La disinstallazione dei tools dipende da quale modalità di installazione avete scelto: automatica o manuale.
Questa modalità è disponibile solo se avete optato per la installazione automatica degli strumenti, ossia quella tramite installer automatico. Per disinstallare lo strumento dovrebbe essere sufficente procedere con la disinstallazione dal pannello di controllo del sistema: il software di disinstallazione si prenderà carico di tutte le manovre da eseguire e cancellerà i files installati dal disco fisso.
Alcune applicazioni prevedono anche la possibilità di disinstallare se stesse attraverso un eseguibile che si trova nella cartella dove risiede la applicazione stessa.
Se avete scelto la installazione manuale, dovrete provvedere manualmente anche alla disinstallazione. Se avete decompresso i files degli strumenti in una sottocartella di javatutor (per esempio javatutor/tools, come da me suggerito) allora la cancellazione del tutorial stesso avrà cancellato anche le cartelle contenenti gli strumenti.
In caso contrario, è sufficente cancellare le cartelle dove avete decompresso gli archivi scaricati. Successivamente, cancellate i percorsi che fanno riferimento a questi strumenti dalla variabile di sistema Path di Windows™ operando allo stesso modo decritto in Impostare il PATH ma, anzichè aggiungere i percorsi, li dovrete togliere.
E' arrivato il momento di scrivere il primo (inutile) programma, come in tutti i tutorial che si rispettano ma non disperate: già a partire dal secondo programma che scriveremo, sarà qualcosa di utile. Aprite il vostro editor di testo preferito (forse il Notepad++ ) e digitate, o copiate-e-incollate, il seguente testo:
Lo stesso listato sorgente è disponibile nella sotto-cartella javatutor1/projects/hellow che potete semplicemente aprire nel vostro editor. Le prime tre righe del sorgente contengono un commento, una serie di caratteri che il compilatore ignora completamente. Nel commento iniziale si è soliti indicare almeno i seguenti dati:
Quello che segue è un tipico esempio di commento iniziale per un sorgente rilasciato sotto la licenza GNU GPL (cosidetta licenza open source).
/************************************************************* * HelloWorld.java * Author: L. Cattani * Date: april 2024 * Copyright (C) 2024 L.Cattani * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA * *************************************************************/
Subito dopo le due righe di commento, vi è la definizione di una classe Java. le classi sono la essenza della programmazione orientata agli oggetti. Anche se per questo primo e stupido programma non sarebbe affatto necessario definire un oggetto, Java non ci lascia altra scelta dal momento che tutto, in Java, deve essere definito all'interno di una classe (vedi Gli oggetti Java):
Una classe viene definita con la parola chiave class seguita dal identificativo (vedi Gli identificatori). Dopo l'identificativo della classe deve essere definito il corpo della classe; esso contiene i membri dati ed i metodi racchiusi tra una coppia di parentesi graffe.
Nel corpo della classe viene definito un unico metodo che ha le seguenti caratteristiche:
public e static void (non ritorna nulla) main String il cui identificativo è argv.Abbiamo imparato che l'identificativo dei metodi è a scelta del programmatore il quale può decidere autonomamente quello che più gli piace sempre tenendo presente i limiti imposti dal compilatore (vedi Gli identificatori). Vi è però una eccezione: il metodo main, che è obbligatorio. Esso rappresenta l' entry point della applicazione cioè il suo punto di ingresso; in altre parole, la intera applicazione inizia dal metodo main.
Al metodo main il sistema operativo passa un argomento: una array di stringhe che rappresenta gli argomenti alla command line cioè tutto ciò che l'utente digita dopo il nome del programma. Torneremo sugli argomenti alla command line più avanti (vedi La riga di comando).
Per quanto riguarda i due attributi:
main; per il momento non commenterò ulteriormente questo attributo ma sarà affrontato in dettaglio nei prossimi capitoliIl codice del main contiene una sola istruzione:
La istruzione richiama il metodo println attraverso la variabile out della classe System. La classe System fà parte della libreria standard di Java e contiene solo metodi statici e membri dati statici. Di questi ultimi, due sono particolarmente utili in ogni programma:
System.out che rappresenta la periferica di output standard: il terminale System.in: che rappresenta la periferica di input standard: la tastieraIl metodo println viene usato per stampare sullo schermo del terminale tutto ciò che appare nel suo argomento che può essere:
Nel nostro caso, l'argomento al metodo println è la costante stringa "Hello World" la quale, pertanto, sarà stampata a terminale. Dal momento che questa è l'unica istruzione del metodo main il programma termina.
Ora che abbiamo scritto il sorgente non ci resta che salvare il file su disco (verificate il formato di encoding che sia Unicode/UTF-8). Questa operazione non è necessaria dal momento che il listato sorgente è già disponibile nella cvartella javatutor1/projects/hellow/.
Il nome del file sorgente è a piacere del programmatore, almeno in questa prima fase. Imparerete in seguito e precisamente in Il nome delle classi che il nome del file sorgente dovrebbe sempre essere uguale a quello della classe che vi è definita. Ma per il momento non è importante, chiamate il file hellow.java.
Aprite il Prompt di MS-DOS e spostatevi nella cartella che contiene il sorgente:
>cd javatutor1\projects\hellow
e compilate, digitando il seguente comando:
>javac hellow.java
Il compilatore terminerà la operazione in brevissimo tempo senza dare alcun messaggio di riscontro. Questo significa che il processo di compilazione è andato a buon fine; se il compilatore avesse riscontrato problemi o errori avrebbe emesso dei messaggi di errore.
Quando il compilatore emette messaggi di errore significa che la sintassi del sorgente non è corretta: controllate che le parentesi graffe siano bilanciate (una aperta e una chiusa) che le parole riservate siano state digitate correttamente e che ogni istruzione nel corpo del metodo main termini con un punto-e-virgola.
Anche se non abbiamo avuto alcun messaggio di riscontro dal compilatore possiamo verificare se la operazione di compilazione è andata a buon fine semplicemente digitando il comando dir a terminale:
> dir
Questo è l'output del comando dir:
31/03/2022 14:01 <DIR> . 31/03/2022 14:01 <DIR> .. 17/12/2020 18:09 431 HelloWorld.class 15/08/2024 16:59 154 hellow.java
Notate la presenza di un secondo file, oltre a quello che abbiamo salvato noi dal editor di testi. Il file HelloWorld.class è il file contenente il bytecode cioè è il risultato del processo di compilazione. Questo è il file che deve essere eseguito dalla Java Virtual Machine (JVM).
L'esecuzione di un programma Java è piuttosto semplice. Il comando per caricare la JVM è il java (notate l'assenza della c finale che abbiamo usato per la compilazione). La JVM viene eseguita con un argomento: il file .class che contiene il metodo main. L'argomento deve essere indicato senza il suffisso .class. Questo è il comando per eseguire il programma:
> java HelloWorld
L'output del programma, come prevedibile, è:
HelloWorld
Argomento precedente - Argomento successivo - Indice Generale