Java Tutorial - Parte 1 0.1
Un tutorial per esempi
Caricamento in corso...
Ricerca in corso...
Nessun risultato
Introduzione

A chi è rivolta questa guida

Questo corso di programmazione parte da ZERO ed insegna al lettore, oltre alla sintassi del linguaggio di programmazione Java, anche altre tecniche altrettanto importanti quali:

  • l'architettura dei calcolatori
  • il sistema binario
  • il reperimento di documentazione ed algoritmi già scritti
  • il debug del programma
  • documentare la applicazione ed il listato sorgente

Essendo un corso che parte da ZERO non è richiesta alcuna preparazione specifica. Ovvio che la conoscenza di un altro linguaggio di programmazione può aiutare il lettore a comprendere meglio gli aspetti comuni della programmazione quali la progettazione, la scrittura del codice, la struttura dei calcolatori. Tuttavia, questi argomenti sono discussi in modo approfondito nella guida che state leggendo.

Alcuni di voi potrebbero restare sorpresi per la scelta di usare Java, un linguaggio potente e per così dire difficile, per iniziare la programmazione: molto probabilmente avrete sentito parlare di altri linguaggi più adatti ai principianti come BASIC oppure i linguaggi di scripting come il perl o il PHP.
Ebbene, la comprensione di un linguaggio di programmazione non è, di per sè, un compito particolarmente difficile in quanto ogni linguaggio è composto da regole, parole chiave e da una sintassi rigida. Queste regole e parole chiave sono poche, anzi pochissime in alcuni linguaggi, e decisamente di più in altri. Dopo che il neo-programmatore ha imparato la sintassi del linguaggio ed i risultati che si ottengono usando le istruzioni disponibili, si può affermare che egli conosca la programmazione di quel linguaggio. Tutt'altra cosa, però, è padroneggiarlo completamente: per ottenere questo risultato non c'è altro che l'esperienza.

La complessità di un linguaggio dipende molto dal numero di istruzioni e costrutti che il linguaggio mette a disposizione per ottenere un certo risultato; i linguaggi più semplici sono perciò quelli che possiedono pochissime istruzioni ed il linguaggio C è sicuramente tra questi. Decisamente più potente è il suo fratello maggiore, il C++, per il quale la curva di apprendimento è sicuramente più lunga rispetto al C ma che offre al programmatore strumenti che, una volta assimilati, lo aiutano a non commettere errori. Ben difficilmente un programmatore che conosce linguaggi potenti come C++, Java o C# userebbe un linguaggio di categoria inferiore per sviluppare una applicazione a meno che non vi sia costretto dalle circostanze.

Una breve panoramica

Premesso che questo tutorial si rivolge ai neofiti, esso affronta argomenti che possono essere considerati avanzati. La particolarità di questo tutorial rispetto a molti altri disponibili è che tutti gli esempi presentati qui sono programmi reali, che hanno una utilità, anche se marginale: questo tutorial segue la filosofia di apprendimento learn by examples (=impara dagli esempi). Di seguito vengono elencati gli argomenti trattati nei vari capitoli di questo tutorial:

  • nel captitolo L'elaborazione elettronica viene affrontato il tema della elaborazione elettronica in generale, senza specifico riferimento al lingaggio Java
  • nei due capitoli seguenti (Il linguaggio Java e Il primo (inutile) programma) viene presentato il linguaggio vero e proprio, la sua sintassi ed il formalismo di base
  • nel capitolo Un programma utile (MCM / MCD) viene presentato un piccolo programma utile ma utilizza Java come fosse un linguaggio procedurale, al pari del linguaggio "C" senza sfruttarne le caratteristiche più potenti; in questo capitolo si affronta anche un argomento spesso trascurato dagli altri tutorials: la documentazione
  • nel capitolo Gli oggetti Java viene presentata la prima caratteristica che rende Java un linguaggio orientato agli oggetti: la astrazione dei dati; usando un esempio reale il lettore imparerà che il dato interno di un oggetto Java può essere di tipo totalmente diverso da quanto presentato all'utente
  • nel capitolo La programmazione ad oggetti il lettore affronterà le altre due caratteristiche della programmazione ad oggetti: la ereditarietà ed il polimorfismo; ancora una volta, sviluppando una applicazione reale il lettore imparerà queste caratteristiche sperimentandole sul campo
  • nel capitolo Il disegno dei poligoni verranno presentate al lettore le primitive grafiche che consentono di "disegnare" sullo schermo del computer; non si tratta affatto di programmazione di tipo GUI (Graphic User Interface = interfaccia utente grafica) ma i concetti esposti in questo capitolo sono alla basa della GUI
  • nel capitolo Java è un linguaggio veloce? viene affrontato il dilemma di tutti i neo-programmatori: imparare a programmare in un linguaggio veloce o un linguaggio potente? E' proprio vero che uno esclude l'altro? In questo capitolo saranno messi a cronfronto tre linguaggi di programmazione, tra i quali Java, che, attraverso un test di velocità reale ci daranno le risposte
  • nei due capitoli seguenti (Organizziamo i packages e Il crivello di Eratostene) sarà presentata una caratteristica di Java molto specifica: i packages che consentono al linguaggio di estendersi praticamente all'infinito
  • infine, nei due capitoli conclusivi (Java Native Interface e Foreign Function and Memory) sarà affrontato un argomento avanzato: l'interfacciamento tra Java ed i linguaggi nativi; una caratteristica che consente a Java di superare tutti i limiti imposti da un linguaggio ad alto livello, quale Java sicuramente è, e di scendere in basso, al livello del codice macchina

Requisiti hardware,software e conoscenze richieste

Nonostante questo tutorial sia rivolto anche ai neofiti, gli autori presuppongono che il lettore di questa guida non sia totalmente a digiuno di alcuni concetti fondamentali che riguardano l'utilizzo del computer.

E' altresì necessario possedere un computer adeguato in quanto a potenza elaborativa se si intende provare sul campo i programmi presentati nella guida. Oggigiorno, qualunque moderno computer è in grado di compilare ed eseguire un semplice programma ma, tuttavia, alcuni degli strumenti usati in questa guida hanno requisiti di sistema specifici. In particolare, l'ambiente usato per la compilazione dei programmi che scriveremo nelle prossime sezioni può funzionare solo su sistemi a 32 o 64 bits.

La guida si rivolge sopratutto a utenti di sistemi Windows™ in quanto gli strumenti usati e da installare nel sistema sono specifici per tale piattaforma. Tuttavia, anche gli utenti di sistemi unix o unix-like come per esempio GNU/Linux possono usare questa guida ma l'installazione degli strumenti necessari alla scrittura, compilazione ed esecuzione delle applicazioni presentate in questa opera potrebbe non essere banale. Considerato l'elevato numero di sistemi e distribuzioni unix-like, ognuno con le sue caratteristiche peculiari, non è possibile scrivere le istruzioni passo-passo per l'installazione dell'ambiente di sviluppo in modo tale che possano essere usate su tutti i sistemi.

Prerequisiti per sistemi windows ™

Per poter installare il JDK (Java Development Kit) è necessario disporre di un sistema win32 non troppo datato. Questa opera è stata scritta utilizzando un sistema Windows 11 ma dovrebbe essere supportato anche Windows 8 e superiori.
Si presuppone inoltre che il lettore abbia familiarità con i seguenti concetti:

  • l'uso dei principali strumenti per scrivere testi (notepad)
  • l'uso del prompt dei comandi di MS-DOS o della shell di Windows
  • l'installazione di nuovi programmi
  • l'uso di compressori / decompressori quali WinZip (non raccomandato) o 7-Zip (raccomandato)
  • la creazione, modifica e navigazione nelle cartelle e sottocartelle

Nel caso il lettore sia totalmente a digiuno nell'uso del Prompt dei comandi MS-DOS (caso che, purtroppo, al giorno d'oggi si verifica sempre più frequentemente) egli troverà al seguente link: I principali comandi del Prompt di MS-DOS una breve guida ai comandi usati più frequentemente.

Prerequisiti per sistemi Linux o unix-like

Poichè questi sistemi sono esclusivamente a 32 bit (o superiori), i requisiti hardware e software di un sistema GNU/Linux o unix sono sicuramente soddisfatti se nel computer è installato uno di questi sistemi. Per quanto riguarda gli strumenti di sviluppo quali il compilatore GCC, tutti questi sistemi sono già normalmente equipaggiati con essi.

Alcune distribuzioni GNU/Linux, tuttavia, non installano automaticamente gli strumenti di sviluppo Java e sarà necessario, in questo caso, usare gli strumenti di amministrazione per provvedervi. Di solito, nelle distribuzioni moderne, si tratta di strumenti grafici che facilitano enormemente il compito all'amministratore del sistema.

Si presuppone inoltre che l'utente abbia familiarità con i seguenti concetti:

  • l'uso della shell unix (terminale)
  • l'esecuzione di programmi a riga di comando
  • l'installazione di nuovi programmi
  • l'uso di compressori / decompressori quali gzip o tar
  • l'uso dei comandi per la creazione, modifica e navigazione nelle cartelle e sottocartelle

Prerequisiti per sistemi Apple

Da fare
non possedendo un sistema Apple, non sono in grado di dare info su questo

Convenzioni stilistiche e sintattiche

In questa sezione verranno descritte le convenzioni sintattiche e di stile applicate in tutte le pagine di questo tutorial. Il tutorial è suddiviso in capitoli i quali corrispondono, nella versione HTML, ad una pagina; in ogni capitolo verrà trattato un argomento specifico.
Il capitolo è a sua volta suddiviso in sezioni mentre queste ultime possono contenere una o più sotto-sezioni. Il paragrafo è la unità più piccola; i paragrafi sono divisi l'un l'altro da una riga vuota. Per esempio, il testo che state leggendo fà parte del capitolo Introduzione, sezione Convenzioni.
Nel mondo dei computer e dell'informatica in generale, la lingua usata sin dagli inizi è l'inglese e, ancora oggi, l'inglese è, e si suppone rimarrà ancora per molto tempo, la lingua più diffusa. Per quanto possibile gli autori cercheranno sempre di trovare la parola corrispondente in italiano ma, a volte, non è possibile oppure il vocabolo inglese è divenuto di uso comune anche in Italia. Se prendiamo, ad esempio, le memorie di massa, il termine inglese harddisk è molto più conosciuto in Italia del corrispondente termine italiano disco rigido oppure anche disco fisso.

In questo tutorial alcune parole saranno scritte con uno stile diverso dal testo normale:

  • le sigle sono scritte in lettere maiuscole; se il loro significato non è ampiamente conosciuto, saranno riportate fra parentesi tonde le parole in lingua originale che le costituiscono oltre alla eventuale traduzione in italiano come per esempio: CPU (Central Processing Unit = Unità Centrale di Elaborazione)
  • le parole inglesi saranno scritte in corsivo come per esempio harddisk e la eventuale traduzione in lingua italiana sarà riportata tra parentesi tonde preceduta dal segno di uguale: harddisk (=disco rigido)
  • i nomi di società, prodotti, di marchi commerciali o brevetti ed i nomi ampiamente conosciuti sono scritti in grassetto come per esempio Linux, Firefox e Fedora a meno che essi non siano link a risorse esterne od interne alla guida.
  • sono scritti in un font monospaced le parole riservate del linguaggio oppure le funzioni di libreria come per esempio switch (parola riservata), e println (metodo della libreria di base di Java).
  • i link a pagine esterne o interne alla guida sono scritte con il classico stile del link del web riconoscibile anche dal fatto che il cursore cambia forma quando vi si trova sopra. Esempio: http://www.acme.com

Oltre allo stile applicato alle singole parole, nella guida vengono usati stili particolari applicati ad interi paragrafi per evidenziarne l'importanza oppure la pericolosità nel caso si commettano errori. Di seguito sono riportati i principali stili di paragrafo usati:

Lo stile warning

Un paragrafo con un bordo rosso sulla sinistra indica che le operazioni descritte e da compiere sul proprio computer sono potenzialmente pericolose per l'integrità del sistema. Porre particolare attenzione e seguire scrupolosamente le istruzioni.

Lo stile important

Un paragrafo con un bordo blu sulla sinistra indica che i concetti esposti sono particolarmente importanti per la corretta comprensione dei capitoli e sezioni successivi. Il lettore è invitato a soffermarsi sul paragrafo e controllare se il concetto è stato assimilato; in caso negativo, è opportuno rileggere l'intero capitolo.

Lo stile codice

Lo stile codice indica un paragrafo di codice sorgente che deve essere copiato dal lettore nel proprio editor di fiducia come per esempio il seguente:

int main()
{
printf( "Hello" );
}

Lo stile verbatim

Questo stile è caratterizzato da un font mono-spaced ed in cui il browser mantiene la formattazione originaria ed è usato per evidenziare calcoli, algoritmi ed, in genere, tutte quelle operazioni in cui è necessaria una formattazione rigida.

 Questo stile è caratterizzato da un font mono-spaced e da una formattazione rigida

I termini della licenza di questa guida

Questa guida è rilasciata sotto la GNU Free Documentation License (GNU FDL) versione 1.3 che potete trovare nella sua forma originale in lingua inglese nella cartella principale di questo tutorial oppure clikkando questo link. Una traduzione non ufficiale in italiano della GNU FDL 1.3 è disponibile su Wikipedia

Siccome la licenza è scritta in legalese che, sappiamo bene, è di difficile comprensione anche in italiano (figuriamoci in inglese), riporto più sotto i punti essenziali sui quali si fonda la licenza GNU FDL:

  • è possibile copiare e ridistribuire l'opera in tutto o in parte con qualsiasi mezzo sia elettronico che di altro tipo purchè essa venga accompagnata dalla licenza GNU FDL
  • se viene distribuita una copia non modificata dell'opera allora è necessario preservare il titolo, il copyright dell'autore nonchè il nome dell'editore, che nel caso di questa opera è galdom.net.
  • è possibile modificare in tutto o in parte l'opera e distribuire l'opera modificata purchè essa venga rilasciata sotto licenza GNU FDL versione 1.3 o successiva
  • è possibile modificare in tutto o in parte l'opera e distribuire l'opera modificata purchè non venga in alcun modo modificata la Sezione Non Modificabile che appare all'inizio di questa opera
  • ogni lavoro derivato dall'originale dovrebbe avere un titolo diverso dall'originale a meno che l'autore dell'originale non disponga diversamente per iscritto; a questo proposito l'autore della presente opera solleva il modificatore da questo obbligo: è possibile usare lo stesso titolo
  • il lavoro derivato dovrà contenere il nome di chi ha eseguito le modifiche come editore dell'opera ma deve comunque preservare il copyright del documento originale
  • è possibile stampare l'opera (sia in originale che un lavoro derivato) in un libro e venderne le copie a patto che il libro sia rilasciato con licenza GNU FDL versione 1.3 o successiva e che rispetti tutti i vincoli imposti per le copie senza modifiche; tuttavia, è possibile aggiungere del testo sia in copertina che in retro-copertina.
  • è possibile tradurre l'opera in tutto o in parte in qualsiasi altra lingua; la traduzione è da considerarsi come opera derivata e quindi soggiace a tutte le regole e limitazioni viste sopra per i lavori derivati
  • ogni lavoro derivato dovrà preservare il testo del capitolo Crediti (eventualmente sarà possibile aggiungere ulteriori crediti) ed il testo della Sezione non modificabile. dovrà anche aggiungere nel capitolo Changelog le modifiche eseguite e da chi sono state fatte seguendo lo stesso schema di versioning
AVVERTENZA: le note scritte qui sopra dall'autore sono una interpretazione che potrebbe essere soggetta a errori o imprecisioni; queste note non possono sostituirsi a quanto stabilito dalla LICENZA ORIGINALE IN LINGUA INGLESE.

Crediti e ringraziamenti

Questa guida è stata scritta da Luciano Cattani a partire dal agosto 2024 e rilasciata in Internet nel dicembre 2025. L'opera è stata scritta in originale, nessun capitolo o paragrafo è stato copiato da altre opere o guide nè elettroniche nè cartacee, anche se è possibile che alcune parti di questa opera siano simili a parti di altri lavori che trattano lo stesso argomento. Nel confermare che queste eventuali similitudini sono comunque frutto del caso, l'autore è disponibile, dietro semplice segnalazione, a modificare questa guida in modo che non ci possano essere contestazioni riguardo a copyright di altre opere.
Alcune sezioni di questa guida contengono la traduzione in italiano di articoli, pagine o manuali scritti in altre lingue (nello specifico in inglese); in questi casi l'autore di questa opera segnala il nome dell'autore originale, la data di pubblicazione in Internet ed un link col quale è possibile leggere l'opera originale.

Nonostante questa sia una opera unica, l'autore deve ringraziare alcune persone ed organizzazioni dalle quali ha avuto suggerimenti, idee, linee guida e strumenti usati per creare questa guida. In particolare, desidero ringraziare:

  • il progetto OpenJDK che rilascia gli aggiornamenti del ambiente di sviluppo Java gratuitamente
  • il portale HTML.it dal quale ho tratto gli spunti per la sequenza dei capitoli e lo stile della guida
  • la famosissima enciclopedia online Wikipedia che è stata la fonte di tutti gli algoritmi usati nei programmi di esempio e delle notizie e citazioni riportate nella guida
  • il progetto MinGW per aver scritto il porting del compilatore GCC in ambiente windows ed usato in questa guida
  • il progetto Twilight Dragon Media per aver creato un facile tool di installazione dell'ambiente MinGW usato in questa guida
  • il progetto Doxygen per aver creato un tool di documentazione flessibile e facile da usare, col quale è stata realizzata questa guida
  • la guida Java Programming Tutorial per la sezione sulla JNI
  • il progetto Strawberry Perl che ha rilasciato un interprete Perl gratuito e portabile per Windows™

L'autore invita tutti i lettori di questa guida a contribuire a mantenerla aggiornata. La sotto-cartella dox di questo tutorial contiene questa opera in formato trasparente, cioè i sorgenti doxygen che è lo strumento col quale sono state generate queste pagine in formato HTML.

Il log delle modifiche

Questa guida è stata scritta usando strumenti software specifici e gli esempi proposti fanno riferimento a costrutti dei linguaggi disponibili da quella versione in poi. Gli strumenti usati e le loro versioni sono:

  • il Java Development Kit (OpenJDK) versione 22
  • il GNU Compiler Collection (GCC) versione 14
  • l'interprete Perl 5, versione 40

Lo schema di versioning di questa guida si allinea allo schema usato da quasi tutto il software e la documentazione open source. Il numero di versione è composto di tre cifre decimali separate da un punto

     x.y.z

il cui significato, partendo dalla cifra a sinistra è:

  • x: major version il numero di versione maggiore cambia se e quando nella guida verranno introdotti costrutti del linguaggio Java incompatibili con la versione 22 del JDK
  • y: minor version il numero di versione minore cambia se e quando vengono introdotti nuovi argomenti che richiedono, generalmente, una o più nuove sezioni.
  • x: bug-fix la terza cifra cambia quando vengono corretti errori o imprecisioni

Autori ed editori

Come stabilito dal Preambolo della licenza GNU FDL la licenza prevede per autori ed editori il modo per ottenere il giusto riconoscimento del proprio lavoro, preservandoli dall'essere considerati responsabili per modifiche apportate da altri.
Si rende necessario quindi elencare in questa sezione gli autori e/o gli editori di eventuali copie modificate di questa opera. Accanto al nome dell'autore ed editore, dovranno essere indicate anche le versioni rilasciate da ciascuno, secondo lo schema descritto in Il log delle modifiche.

  • Luciano Cattani, Bolzano, Italy: versione 0.1

Argomento successivo - Indice Generale