Fondamenti di Java
Lezione n. 1
Java,
il linguaggio della Rete
Che cos'è Java?
Java è un linguaggio di programmazione orientato agli oggetti, in gergo
Object-Oriented Language (OOL), sviluppato nel 1991 da un gruppo di
ricercatori della multinazionale californiana Sun Microsystems, già leader
mondiale nella costruzione di elaboratori basati sul sistema operativo UNIX
(workstation). Java, che si ispira al C++, è stato creato forse per un
divertimento intellettuale tipico dei ricercatori, tuttavia con lo scopo concreto di
realizzare un prodotto gratuito disponibile per tutta per la comunità dei
programmatori, con una serie di caratteristiche specifiche, cioè di essere di
piccole dimensioni, più semplice rispetto al suo parente più stretto C++, veloce
in maniera ragionevole, e soprattutto utilizzabile senza dovere riscrivere il
codice su ciascuna delle diverse piattaforma hardware dotate di diversi sistemi
operativi. Pertanto, è il linguaggio ideale per sviluppare applicazioni sia
tradizionali che soprattutto per il World Wide Web e quindi la Rete.
È evidente che il progetto di Sun sia stato realizzato in un’epoca in cui si
andava ormai affermando in maniera irreversibile la supremazia monopolistica,
nel campo degli elaboratori e dei sistemi operativi, di un grande concorrente
anch’esso americano (scommettiamo che avete indovinato chi?). Ancora oggi,
lo “stile” Sun e la “filosofia” Java restano contrapposte a quelle altre, e tale
disputa a volte assume toni anche di aspra contesa tecnologica e di mercato.
Java è portabile
A parte il fatto che è possibile procurarsi direttamente dalla Sun un ambiente di
sviluppo gratuito e totalmente efficiente, uno dei fattori tecnologici del grande
successo di Java è sicuramente quello della sua totale portabilità, o
indipendenza dalla piattaforma: un programma scritto e opportunamente
compilato in Java può essere utilizzato su qualsiasi macchina con qualsiasi
sistema operativo, sul quale sia installata una cosiddetta macchina virtuale
Java, in gergo Java Virtual Machine (JVM). Negli altri linguaggi di
programmazione, invece, l'operazione di compilazione traduce il codice
sorgente scritto dal programmatore in codice macchina, cioè una serie di
Francesco Marzano - Manuali.Net © 2002 Tutti i diritti riservati
1
Lezione n. 1
Fondamenti di Java
istruzioni che vengono interpretate dal microprocessore: queste istruzioni
variano da processore a processore (e quindi da piattaforma a piattaforma e da
sistema operativo a sistema operativo) quindi il programmatore si trova
costretto a compilare il file sorgente più volte su diversi sistemi operativi.
Linguaggi tradizionali
Codice sorgente
Compilatore per UNIX
Piattaforma UNIX
Compilatore per PC
Piattaforma PC
Java invece adotta un meccanismo diverso: compilando il file sorgente non
viene generato il codice macchina bensì un codice semi-compilato detto
bytecode, un codice universale che contiene operazioni puramente logiche che
poi vengono interpretate dalla JVM. La JVM è diversa per ogni sistema e fa
parte del pacchetto standard di sviluppo di Java, detto JDK (Java Development
Kit).
Java
Codice sorgente
Compilatore Java
Piattaforma UNIX
Piattaforma PC
Durante la creazione dei programmi si avrà pertanto a che fare con due tipi
diversi di file: i file .java che contengono il codice sorgente con la sintassi Java
che apprenderete durante questo corso, e quelli .class, i file bytecode
generati dalla la compilazione.
Java e il Web
Pur essendo un linguaggio general purpose (cioè adatto a qualsiasi scopo), è
nella programmazione per la rete che Java vede le sue caratteristiche meglio
adattarsi. Per questo motivo è spesso descritto come “il linguaggio della Rete”.
Infatti una delle modalità (non l’unica) per usare Java in rete è quella di far
eseguire i programmi direttamente dal browser dotato al suo interno di una
JVM in grado appunto di eseguirli.
Francesco Marzano - Manuali.Net © 2002 Tutti i diritti riservati
2
Fondamenti di Java
Lezione n. 1
Prima di Java, accadeva che nel momento in cui il browser si trovava a dover
gestire un documento non HTML, doveva fare riferimento a un’applicazione
esterna o utilizzare una “integrazione” (plug-in) preventivamente installata.
In ogni caso si trattava non già di un’esecuzione diretta del codice, ma di un
reindirizzamento ad altre applicazioni. La conseguenza era che, in queste
condizioni, era impossibile realizzare una vera e propria programmazione
distribuita che fosse interattiva.
Con Java le cose sono cambiate: adesso è direttamente il browser, attraverso
la JVM che ne fa parte integrante, ad eseguire direttamente le applicazioni,
scritte con Java, inserite nelle pagine HTML, e scaricate dalla rete sul proprio
PC. Vedremo in dettaglio che queste particolari applicazioni Java vengono
definite applet.
La Rete diventa pertanto un canale di trasmissione dal quale prelevare non solo
informazioni statiche ma anche software eseguibile da certi server, e il PC col
browser il client in grado di eseguire un programma in locale. Questo è il vero
networking!
Java è un linguaggio ad oggetti
La programmazione ad oggetti rappresenta la nuova frontiera della
programmazione. Questo nuovo modo di programmare permette di creare
programmi molto complessi compilando poche righe di file sorgente. Java
occupa un posto in prima fila tra gli OOL (Object Oriented Languages) insieme
al C++, Visual Basic, Delphi per citare i più noti.
Programmare per oggetti significa definire oggetti stabilendone proprietà e
comportamenti, così come avviene nella realtà. Ogni oggetto ha delle
caratteristiche fisiche e dei comportamenti: un automobile, per esempio, avrà
certe proprietà (la cilindrata del motore, il colore della carrozzeria, la
lunghezza), comportamenti caratteristici (velocità massima, accelerazione,
chilometraggio), apparterrà alla categoria dei veicoli a motore. È proprio così
che si definisce un “oggetto” Java. Avete infatti definito delle proprietà
(cilindrata, colore carrozzeria, lunghezza) e dei comportamenti (velocità,
accelerazione), apparterrà ad una classe padre (veicoli a motore).
In Java è la stessa cosa: al posto delle proprietà troveremo gli attributi e al
posto dei comportamenti i metodi. Quando programmiamo in Java creiamo
una classe astratta di oggetti con proprietà (attributi)e comportamenti
(metodi), che in seguito darà luogo ad un oggetto concreto. Quando pensate
ad un’auto voi non pensate alla vostra vettura, ma all’idea di automobile che si
realizza in una classe di automobili. Quando però definite alcune
caratteristiche (cilindrata, colore) ed alcuni comportamenti (accelera) definite
un oggetto concreto o, come si dice nei linguaggi OO, una “istanza” della
classe.
Francesco Marzano - Manuali.Net © 2002 Tutti i diritti riservati
3
Fondamenti di Java
Lezione n. 1
Le altre caratteristiche di Java
L’indipendenza dalla piattaforma e la natura ad oggetti
caratteristiche principali e più note di Java, ma non le sole.
sono
le
due
La gestione della memoria viene fatta in automatico dalla JVM e garantisce
sicurezza e semplicità di programmazione, senza le complicazioni e complessità
tipiche del C.
Java rende poi disponibile un meccanismo molto evoluto con cui è possibile,
all’interno della stessa applicazione, eseguire contemporaneamente più
processi (task). Questo meccanismo è detto di multithreading.
Java è stato progettato con il preciso fine di garantire la massima sicurezza,
sia dell’applicazione in sé che del client che esgue l’applicazione scaricata dalla
rete, esigenza di primaria importanza in Internet.
Infine la semplicità che ne rende l’apprendimento alquanto semplice: la
sintassi è molto simile a quella del C ma sono stati eliminati costrutti complessi
senza pregiudicare la correttezza formale. Il solo fatto di avere eliminato i
famigerati puntatori del C rende il codice molto più semplice, sicuro e meno
soggetto all’insorgere di bug.
Le prestazioni
Il problema delle performance è forse l’unico punto debole di Java: poiché esso
utilizza uno strato di software interpretato e indipendente dalla piattaforma,
che come abbiamo visto è un vantaggio enorme, un’applicazione Java risulta,
se non lenta, non altrettanto veloce e competitiva quanto una scritta in C++.
Tuttavia questa affermazione, se pur vera nel caso di applicazioni tradizionali, è
sminuita nel caso di applicazioni distribuite o orientate all’uso della rete (netoriented). Infatti, l’estrema adattabilità di Java a soluzioni distribuite e netoriented, consente di superare e in parte risolvere la cronica ristrettezza di
banda tipica di Internet.
In ogni caso, le considerazioni sulla presunta lentezza di Java perdono la loro
valenza a fronte di fattori ben più importanti quali la versatilità, la robustezza,
la sicurezza, la portabilità.
Gli strumenti
Oltre ad aver creato questo nuovo linguaggio e la tecnologia ad esso connessa,
Sun ha creato un insieme completo di librerie (API) già pronte e strumenti per
sviluppare applicazioni Java. Il tutto in un ambiente integrato liberamente
scaricabile da Internet, noto come “Kit di Sviluppo per Java” (JDK).
Francesco Marzano - Manuali.Net © 2002 Tutti i diritti riservati
4
Fondamenti di Java
Lezione n. 1
Essendo Java ad oggetti, anche il JDK non poteva che essere organizzato allo
stesso modo. Le classi contenute nel JDK coprono tutte le casistiche tipiche
delle programmazione: grafica, rete, database, multithreading, ecc.
L’organizzazione logica delle classi nel JDK è fatta in modo molto preciso, per
cosiddetti package (il package Java è un concetto molto importante che
riprenderemo nella Lezione 4). Una volta che si comincia a programmare in
Java, è fondamentale ricordare almeno quelli più utilizzati, cioè quelli descritti
nella seguente tabella.
Nome del package
java.lang
java.util
java.io
java.net
java.awt
java.applet
Contenuto
Classi base per sviluppare un’applicazione, costrutti
principali del linguaggio
Classi di pubblica utilità (funzioni matematiche, stringhe,
vettori, ecc.)
Classi di supporto per l’Input/Output
Classi di supporto per la programmazione di rete
Insieme di oggetti grafici per la creazione di interfacce
grafiche (GUI)
Classi necessarie alla creazione di applet
Il primo programma
Per concludere, creiamo il classico primo programma “Ciao Mondo!” in modo da
cominciare vedere per la prima volta la sintassi di Java.
Apriamo il Notepad di Windows, o un qualsiasi editor (anche Word), ricordando
però di salvare il file in formato testo, e scriviamo:
public class CiaoMondo {
public static void main (String[] args) {
System.out.println(“Ciao mondo!”);
}
}
Salviamo il file col nome CiaoMondo.java, in una cartella qualsiasi. Chi conosce
il C avrà già notato la somiglianza delle istruzioni fra i due linguaggi. Il
programma stamperà nella finestra dei comandi (la vecchia finestra DOS) il
messaggio scritto all’interno di println.
Supponiamo di avere predisposto la nostra macchina all’utilizzo del JDK (lo
vediamo nella lezione successiva). Aprendo una finestra DOS, ci posizioniamo
nella cartella in cui abbiamo salvato il file, dopo di che eseguiamo i comandi:
javac CiaoMondo.java
Francesco Marzano - Manuali.Net © 2002 Tutti i diritti riservati
5
Fondamenti di Java
Lezione n. 1
con cui creiamo il bytecode, e:
java CiaoMondo
con cui interpretiamo il bytecode. Vedremo il messaggio Ciao mondo! stampato
sul video.
In conclusione, soffermiamoci sulle osservazioni significative che è già possibile
fare con questo primo esempio elementare:
abbiamo dato al file .java lo stesso nome della classe che stiamo creando,
ovvero CiaoMondo; anche se ciò non è obbligatorio, è bene fare sempre così
anche se il programma effettua solo una stampa, abbiamo creato comunque
una “classe” con l’istruzione public class nome_classe
con l’istruzione public static void main (String[] args) abbiamo
creato un programma che siamo stati in grado di compilare ed eseguire. La
presenza della parola chiave main (come nel C) identifica il codice sorgente
del programma come una “applicazione”
System.out.println denota la struttura gerarchica del linguaggio: il
“comando” println fa parte del pacchetto out che a sua volta fa parte di
System.
Francesco Marzano - Manuali.Net © 2002 Tutti i diritti riservati
6