Cosa è Java - Prof. Colombara | Un nuovo sito targato WordPress

Parte I
“Le basi del linguaggio”
Cosa è Java (what)
Secondo alcune statistiche, attualmente Java è il linguaggio di programmazione con il più alto
numero di sviluppatori nel mondo. Il successo crescente ed inarrestabile presso la comunità dei
programmatori ha fatto sì che Sun Microsystems, società che ha sviluppato il linguaggio, negli anni
investisse molto su esso. In poco tempo infatti, si sono evolute ed affermate tecnologie (JSP, EJB,
Applet, Midlet etc.), basate sul linguaggio, che si sono diffuse in molti ambiti del mondo della
programmazione.
Oggigiorno esistono miliardi di congegni elettronici che utilizzano tecnologia Java:SCADA,
telefoni cellulari, decoder, smart card, robot che passeggiano su Marte etc…
Con il termine "Java", quindi, ci si riferisce sia al linguaggio sia alla tecnologia che include tutte le
tecnologie di cui sopra.
Java è un linguaggio orientato agli oggetti (object oriented), ovvero supporta i paradigmi
dell’incapsulamento, dell’ereditarietà e del polimorfismo (verranno spiegati più avanti). Ciò ne
rende l’apprendimento ostico per chi ha esperienze radicate di programmazione procedurale. Inoltre
si tratta di un linguaggio in continua evoluzione e gli sviluppatori devono continuamente
aggiornarsi per restare al passo. Dalla versione 1.0 alla versione 1.5 (detta anche versione 5), i
cambiamenti sono stati veramente tanti e importanti.
Breve storia di Java (who, where & when)
Java ha visto la luce a partire da ricerche effettuate alla Stanford University all’inizio degli anni
Novanta.
Nel 1992 nasce il linguaggio Oak (in italiano “quercia”), prodotto da Sun Microsystems e realizzato
da un gruppo di esperti sviluppatori, che formavano il cosiddetto "Green Team". Erano capitanati da
James Gosling, oggigiorno uno tra i più famosi e stimati "guru" informatici del pianeta, nonché
vicepresidente di Sun. Sembra che il nome Oak derivi dal fatto che Gosling e i suoi colleghi, nel
periodo in cui svilupparono questo nuovo linguaggio, avessero avuto come unica compagnia quella
di una quercia che si trovava proprio fuori la finestra dell’ufficio in cui lavoravano.
In un primo momento Sun decise di destinare questo nuovo prodotto alla creazione di applicazioni
complesse per piccoli dispositivi elettronici. In particolare, sembrava che i campi strategici da
conquistare in quegli anni fossero la domotica (scienza interdisciplinare che si occupa dello studio e
delle tecnologie atte a migliorare la qualità della vita nella casa) e la TV via cavo. In realtà i tempi
non erano ancora maturi per argomenti quali il "video on demand" e gli "elettrodomestici
intelligenti". Solo dopo qualche anno, infatti, si è iniziato a richiedere video tramite Internet o TV
via cavo. E ancora oggi l’idea di avere un "robot" che svolga le faccende domestiche rimane solo un
sogno per le casalinghe.
Nel 1993, con l’esplosione di Internet (negli Stati Uniti), nacque l’idea di trasmettere codice
eseguibile attraverso pagine HTML. La nascita delle applicazioni che utilizzano la tecnologia CGI
(Common Gateway Interface) rivoluzionò il World Wide Web.
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
1
Il mercato che sembrò più appetibile allora, divenne ben presto proprio Internet. Nel 1994 viene
quindi prontamente realizzato un browser che fu chiamato per breve tempo "Web Runner" (dal film
"Blade Runner", il preferito di Gosling) e poi, in via definitiva, "HotJava". Per la verità non si
trattava di uno strumento molto performante, ma la sua nascita dimostrò al mondo che con Java si
poteva iniziare a programmare per Internet.
Il 23 maggio del 1995 Oak, dopo una importante rivisitazione, viene ribattezzato ufficialmente col
nome "Java".
Il nome questa volta sembra derivi da una tipologia indonesiana di caffè molto
famosa negli Stati Uniti, che pare fosse la preferita di Gosling. Per quanto Gosling
sia un grande genio, non si può dire che abbia molta fantasia nello scegliere nomi!
Contemporaneamente Netscape Corporation annuncia la scelta di dotare il suo allora omonimo e
celeberrimo browser della Java Virtual Machine (JVM). Si tratta del software che permette di
eseguire programmi scritti in Java su qualsiasi piattaforma. Questo significava una nuova
rivoluzione nel mondo Internet: grazie alla tecnologia Applet, le pagine Web diventavano
interattive a livello client (ovvero le applicazioni vengono eseguite direttamente sulla macchina
dell’utente di Internet, e non su un server remoto). Gli utenti potevano per esempio utilizzare giochi
direttamente sulle pagine Web ed usufruire di chat dinamiche e interattive. In breve tempo, inoltre,
Sun Microsystems mette a disposizione gratuitamente il kit di sviluppo JDK (Java Development
Kit) scaricabile dal sito http://java.sun.com.
Nel giro di pochi mesi i download del JDK 1.02a diventarono migliaia e Java iniziò ad essere sulla
bocca di tutti. La maggior parte della pubblicità di cui usufruì Java nei primi tempi era direttamente
dipendente dalla possibilità di scrivere piccole applicazioni in rete, sicure, interattive ed
indipendenti dalla piattaforma, chiamate proprio "applet" (in italiano si potrebbe tradurre
“applicazioncina”). Nei primi tempi, quindi, sembrava che Java fosse il linguaggio giusto per creare
siti Web spettacolari. In realtà, Java era molto più che un semplice strumento per rendere piacevole
alla vista la navigazione. Inoltre ben presto furono realizzati strumenti per ottenere certi risultati con
minor sforzo (vedi Flash di Macromedia). Tuttavia, la pubblicità che a Java hanno fornito Netscape
(nel 1995 un colosso che combatteva alla pari con Microsoft la “guerra dei browser”…) e
successivamente altre grandi società quali IBM, Oracle etc. ha dato i suoi frutti. Negli anni Java è
diventato sempre più la soluzione ideale a problemi (come la sicurezza) che accomunano aziende
operanti in settori diversi come banche, software house e compagnie d’assicurazioni.
Inoltre, nel nuovo millennio la tecnologia Java ha conquistato nuove nicchie di mercato come le
smart card, i telefoni cellulari e il digitale terrestre. Queste conquiste sono sicuramente state un
successo. Java ha infatti dato un grosso impulso alla diffusione di questi beni di consumo negli
ultimi anni.
Infine, grazie alla sua filosofia “write once, run everywhere” (“scritto una volta gira dappertutto”),
la tecnologia Java è potenzialmente eseguibile anche su congegni che non hanno ancora visto la
luce. Oggi Java è quindi un potente e affermatissimo linguaggio di programmazione. Conta il più
alto numero di sviluppatori attivi nel mondo. La tecnologia Java ha invaso la nostra vita quotidiana
essendo presente, per esempio, nei nostri telefoni cellulari. Probabilmente si tratta del primo
linguaggio di programmazione il cui nome è entrato nel vocabolario di chi di programmazione non
ne sa nulla. Infatti, spesso si sente parlare di Java Chat, giochi Java, Java card, etc…
Perché Java (why)
Nei mesi che precedettero la nascita di Oak, nel mondo informatico circolavano statistiche alquanto
inquietanti. Una di esse calcolava che, in una prima release di un’applicazione scritta in C++, fosse
presente in media un bug ogni cinquanta righe di codice! Considerando anche che il C++ era
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
2
all’epoca il linguaggio più utilizzato nella programmazione, la statistica risultava ancora più
allarmante.
A partire da queste ed altre statistiche, Java è stato creato proprio per superare i limiti esistenti negli
altri linguaggi. In generale si andò nella direzione di un linguaggio potente, moderno, chiaro, ma
soprattutto robusto e "funzionante".
Caratteristiche di Java
Java ha alcune importanti caratteristiche che permetteranno a chiunque di apprezzarne i vantaggi.
Sintassi: è simile a quella del C e del C++, e questo non può far altro che facilitare la migrazione
dei programmatori da due tra i più importanti ed utilizzati linguaggi esistenti.
Chi non ha familiarità con questo tipo di sintassi può inizialmente sentirsi disorientato e confuso,
ma ne apprezzerà presto l’eleganza e la praticità.
Gratuito: per scrivere applicazioni commerciali non bisogna pagare licenze a nessuno.
Infatti il codice Java si può scrivere anche utilizzando editor di testo come il Blocco Note, e non per
forza un complicato IDE con una costosa licenza. Ovviamente esistono anche tanti strumenti di
sviluppo a pagamento, che possono accelerare lo sviluppo delle applicazioni Java. Ma esistono
anche eccellenti prodotti gratuiti ed open source come Eclipse (http://www.eclipse.org) e Bluej, che
non hanno nulla da invidiare a nessun altro tool.
Robustezza: questa è soprattutto una conseguenza di una gestione delle eccezioni chiara
e funzionale, e di un meccanismo automatico della gestione della memoria (Garbage Collection.
Inoltre il compilatore Java è molto "severo". Il programmatore è infatti costretto a risolvere tutte
le situazioni "poco chiare", garantendo al programma maggiori chance di corretto funzionamento. È
molto meglio ottenere un errore in compilazione che in esecuzione…
Libreria e standardizzazione: Java possiede un’enorme libreria di classi standard,
ottimamente documentate. Ciò rende Java un linguaggio di alto livello e permette anche ai neofiti di
creare applicazioni complesse in breve tempo. Per esempio, è piuttosto semplice gestire finestre di
sistema (interfacce grafiche utente), collegamenti a database e connessioni di rete. E questo
indipendentemente dalla piattaforma su cui si sviluppa.
Indipendenza dall’architettura: grazie al concetto di macchina virtuale ogni applicazione, una
volta compilata, potrà essere eseguita su una qualsiasi piattaforma (per esempio un PC con sistema
operativo Windows o una workstation Unix).
Questa è sicuramente la caratteristica più importante di Java. Infatti, nel caso in cui si debba
implementare un programma destinato a diverse piattaforme, non ci sarà la necessità di doverlo
convertire radicalmente da questa a quella. E’ evidente quindi che la diffusione di Internet ha
favorito e favorirà sempre di più la diffusione di Java.
Java Virtual Machine: ciò che rende di fatto possibile l’indipendenza dalla piattaforma è la
Java Virtual Machine (da ora in poi JVM), un software che svolge un ruolo da interprete ( esegue il
programma compilato) per le applicazioni Java. Più precisamente: dopo aver scritto il nostro
programma Java, bisogna compilarlo. Otterremo così non un file eseguibile (ovvero la traduzione
in linguaggio macchina del file sorgente che abbiamo scritto in Java), ma un file che contiene la
traduzione del nostro listato in un linguaggio molto vicino al linguaggio macchina, detto bytecode".
Una volta ottenuto questo file dobbiamo interpretarlo. A questo punto la JVM interpreterà il
bytecode ed il nostro programma andrà finalmente in esecuzione. Quindi, se una piattaforma
qualsiasi possiede una Java Virtual Machine, ciò sarà sufficiente per renderla potenziale esecutrice
di bytecode. Infatti, da quando ha visto la luce Java, i browser più diffusi implementano al loro
interno una versione della JVM, capace di mandare in esecuzione le applet Java. Ecco quindi
svelato il segreto dell’indipendenza della piattaforma: se una macchina possiede una JVM, può
eseguire codice Java.
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
3
Un browser mette a disposizione una JVM solamente per le applet, non per le
applicazioni standard. Spesso però le applicazioni scritte in Java vengono
distribuite con una installazione di JVM incorporata.
Si parla di "macchina virtuale" perché in pratica questo software è stato implementato per simulare
un hardware. Si potrebbe affermare che “il linguaggio macchina sta ad un computer come il
bytecode sta ad una Java Virtual Machine”.
Oltre che permettere l’indipendenza dalla piattaforma, la JVM permette a Java di essere un
linguaggio multithreaded (caratteristica di solito tipica dei sistemi operativi), ovvero capace di
mandare in esecuzione più processi in maniera parallela.
Orientato agli oggetti: Java fornisce strumenti che praticamente ci "obbligano" a programmare
ad oggetti. Java è più chiaro e schematico di qualsiasi altro linguaggio orientato agli oggetti.
Sicuramente chi impara Java potrà in un secondo momento accedere in modo più naturale alla
conoscenza di altri linguaggi orientati agli oggetti.
Programmazione strutturata
Problema complesso
Scomposizione in procedure
Programmazione ad oggetti
Sistema complesso
Scomposizione in entità
interagenti (oggetti)
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
4
Per capire cosa si intende con oggetto, si può partire prendendo spunto dalle cose della vita comune
: per esempio un’automobile è un oggetto, un televisore è un oggetto e così via.
Semplice: qui bisogna fare una precisazione. Java è un linguaggio molto complesso,
considerandone la potenza e tenendo presente che ci obbliga ad imparare la programmazione ad
oggetti. In compenso si possono ottenere risultati insperati in un tempo relativamente breve.
Provocatoriamente Bill Joy, vicepresidente di Sun Microsystems negli anni in cui nacque il
linguaggio, nonché creatore di software storici come il sistema operativo Solaris , propose come
nome alternativo a Java "C++--". Questo per sottolineare con ironia che il nuovo linguaggio voleva
essere un nuovo C++, ma senza le sue caratteristiche peggiori (o, se vogliamo, senza le
caratteristiche più difficili da utilizzare e quindi più pericolose).
Sun ha inoltre pubblicizzato Java dalla versione 5 in poi, sostituendo il termine “Simplicity” con
“ease of development” (in italiano “facilità di sviluppo”). Infatti, con l’introduzione nella versione 5
il linguaggio è diventato più difficile da imparare, ma i programmi dovrebbero però essere più
semplici da scrivere. Insomma, imparare Java, non sarà una passeggiata!!!
Sicurezza: ovviamente, avendo la possibilità di scrivere applicazioni interattive in rete, Java
possiede anche caratteristiche di sicurezza molto efficienti. Come c’insegna però la vita quotidiana,
nulla è certo al 100%. Intanto, oggi come oggi, Java è semplicemente il linguaggio “più sicuro” in
circolazione
Ambiente di sviluppo
Per scrivere un programma Java, abbiamo bisogno di:
1. Un programma che permetta di scrivere il codice. Per iniziare può andar bene un
semplice Text Editor, come ad esempio Notepad (Blocco Note) di Windows, Edit del Dos o Vi di
Unix (sconsigliamo WordPad…).
È anche possibile eseguire il download gratuito dell’editor Java open source Bluej, all’indirizzo
http://www.bluej.com/. Si tratta di un editor Java di semplice utilizzo, che offre alcune comodità
rispetto ad un editor di testo generico. Tra le sue caratteristiche ricordiamo la colorazione della
sintassi di Java, e il completamento del testo di alcune espressioni. Soprattutto è possibile compilare
e mandare in esecuzione file, tramite la pressione di semplici pulsanti.
2. Il Java Development Kit versione Standard Edition (da ora in poi JDK). E'
scaricabile gratuitamente sul sito di riferimento dello sviluppatore Java: http://java.sun.com, con le
relative note d’installazione e documentazione.
Il JDK offre tutto l'occorrente per lavorare in modo completo.
Passi dello sviluppatore
Dopo aver installato correttamente il JDK, saremo pronti per scrivere la nostra prima applicazione
In generale dovremo eseguire i seguenti passi:
1. Scrittura del codice: scriveremo il codice sorgente della nostra applicazione utilizzando un
editor. Come già detto precedentemente useremo Bluej.
2. Salvataggio: salveremo il nostro file con suffisso .java (automatico con Bluej).
3. Compilazione: Se la compilazione ha esito positivo, verrà creato un file chiamato
“nomeFile.class”. In questo file, come abbiamo già detto, ci sarà la traduzione in bytecode del file
sorgente.
4. Esecuzione: a questo punto potremo mandare in esecuzione il programma invocando
l’interpretazione della Java Virtual Machine. L’applicazione, a meno di errori di codice, verrà
eseguita dalla JVM.
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
5
Classi, oggetti, attributi e metodi.
E’ da sottolineare subito che tutto il codice scritto in applicazioni Java, a parte poche eccezioni, è
sempre incluso all’interno della definizione di qualche classe
La classe rappresenta un modello per descrivere un insieme di oggetti. Una classe specifica gli
attributi e i metodi che devono avere gli oggetti che appartengono alla classe. Un oggetto non può
esistere se prima non viene creata una classe a cui l’oggetto deve appartenere.
La classe può essere immaginata come uno stampo del quale vengono creati più oggetti, tutti con gli
stessi attributi e metodo.
Gli oggetti creati a partire da una classe vengono chiamati istanze della classe:
OGGETTO = istanza della CLASSE
Nello sviluppo di un programma orientato ad oggetti, prima vengono definite le classe, poi possono
essere creati più oggetti come istanze di quelle classi.
Se per esempio indichiamo con Automobile la classe che modella un’automobile, da questa
possiamo creare due oggetti chiamati auto1 e auto2, come istanze della classe Automobile.
Due istanze della stessa classe sono distinguibili solo per il valore dei loro attributi, mentre il
comportamento (metodi) è lo stesso.
Gli oggetti auto1 e auto2 possono avere quindi un valore della velocità o del livello del carburante
(attributi), ma possono usare gli stessi metodi (comportamenti) visto che appartengono alla stessa
classe. Si può per esempio inviare il messaggio fermati o accelera ad entrambi gli oggetti.
Definire una classe significa elencare gli attributi e i metodi. Durante la fase di creazione della
classe si specificano gli attributi e si codificano i metodi.
<nome classe>
<attributo1>
<attributo2>
……
<metodo1>
<metodo2>
….
Con riferimento all’esempio dell’automobile, la classe Automobile è rappresentata con il seguente
diagramma della classe:
<Automobile>
<velocità>
<Colore>
<numero di porte>
<livello del carburante>
<avviati>
<accelera>
<fermati>
<gira>
<cambia marcia>
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
6
Usando questa classe possiamo creare gli oggetti auto1 e auto2.
Dopo aver creato gli oggetti, possiamo interagire con essi, per esempio possiamo impostare alcuni
attributi:
auto1.colore = blu
oppure possiamo usare i metodi dell’oggetto
auto2.avviati()
Primo approccio al codice
Diamo subito uno sguardo alla classica applicazione "Hello World". Trattasi del tipico primo
programma che rappresenta il punto di partenza dell'apprendimento di ogni linguaggio di
programmazione.
In questo modo inizieremo a familiarizzare con la sintassi e con qualche concetto fondamentale
come quello di classe e di metodo.
Vi avverto che qualche punto rimarrà oscuro, e che bisognerà dare per scontate alcuni parti di
codice.
Vedremo anche come compilare e come mandare in esecuzione il nostro “miniprogramma”. Il fine
è stampare a video il messaggio "Hello World!"
Segue il listato:
1 public class HelloWorld
2 {
3
public static void main(String args[])
4
{
5
System.out.println("Hello World!");
6
}
7 }
Questo programma deve essere salvato esattamente col nome della classe,
prestando attenzione anche alle lettere maiuscole o minuscole.
Tale condizione è necessaria per mandare in esecuzione l’applicazione.
Il file che conterrà il listato appena presentato dovrà quindi chiamarsi
“HelloWorld.java”.
Attenzione: i numeri non fanno parte del codice ma ci saranno utili per la sua
analisi (non bisogna scriverli).
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
7
Analisi del programma "HelloWorld"
Riga 1:
public class HelloWorld
Dichiarazione della classe HelloWorld. Come vedremo, ogni applicazione Java è costituita da
classi.
E’ da sottolineare subito che tutto il codice scritto in applicazioni Java, a parte poche
eccezioni (le importazioni di librerie e le dichiarazioni d’appartenenza ad un
package), è sempre incluso all’interno della definizione di qualche classe .
Abituiamoci anche ad anteporre la parola chiave public alla dichiarazione delle
nostre classi; più avanti capiremo il perché.
Riga 2:
{
Questa parentesi graffa aperta indica l’inizio della classe HelloWorld, che si chiuderà alla riga 7 con
una corrispondenteparentesi graffa chiusa. Il blocco di codice compreso da queste due parentesi
definisce la classe HelloWorld.
Sulle tastiere italiane non esiste un tasto per stampare le parentesi graffe. Possiamo
però ottenerne la scrittura in diversi modi, di seguito i più utilizzati:
- tenendo premuto il tasto ALT e scrivendo 123 con i tasti numerici che si trovano
sulla destra della vostra tastiera, per poi rilasciare l’ALT; - tenendo premuti i tasti
CONTROL - SHIFT - ALT, e poi il tasto con il simbolo della parentesi quadra
aperta "[".
Riga 3:
public static void main(String args[])
Questa riga è bene memorizzarla da subito, poiché deve essere definita in ogni applicazione Java.
Trattasi della dichiarazione del metodo main(). In Java, il termine “metodo” è sinonimo di “azione”
o comportamento. In particolare il metodo main() definisce il punto di partenza dell’esecuzione di
ogni programma. La prima istruzione che verrà quindi eseguita in fase di esecuzione, sarà quella
che la JVM troverà subito dopo l’apertura del blocco di codice che definisce questo metodo.
Oltre alla parola "main", la riga 3 contiene altre parole di cui studieremo in dettaglio il significato
più avanti. Purtroppo, come già anticipato, quando si inizia a studiare un linguaggio ad oggetti come
Java, è impossibile toccare un argomento senza toccarne tanti altri.
Riga 4:
{
Questa parentesi graffa indica l’inizio del metodo main(), che si chiuderà alla riga 6 con una
parentesi graffa chiusa. Il blocco di codice compreso tra queste due parentesi definisce il metodo.
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
8
Riga 5:
System.out.println("Hello World!");
Questo comando stamperà a video la stringa "Hello World!". Anche in questo caso, giacché
dovremmo introdurre argomenti per i quali non siete ancora pronti, preferisco rimandare la
spiegazione dettagliata di questo comando nelle prossime lezioni.
Per ora ci basterà sapere che stiamo invocando un metodo appartenente alla libreria standard di Java
che si chiama println(), passandogli come parametro la stringa che dovrà essere stampata.
Riga 6:
}
Questa parentesi graffa chiusa bilancia l’ultima che è stata aperta, ovvero chiude il blocco di codice
che definisce il metodo main().
Sulle tastiere italiane non esiste un tasto per stampare le parentesi graffe. Possiamo
però ottenerne la scrittura in diversi modi, di seguito i più utilizzati:
- tenendo premuto il tasto ALT e scrivendo 125 con i tasti numerici che si trovano
sulla destra della vostra tastiera, per poi rilasciare l’ALT; - tenendo premuti i tasti
Control - Shift - Alt, e poi il tasto con il simbolo della parentesi quadra chiusa "]".
Riga 7:
}
Questa parentesi graffa invece chiude il blocco di codice che definisce la classe HelloWorld.
Compilazione ed esecuzione del programma HelloWorld
Una volta riscritto il listato sfruttando un text editor dobbiamo compilarlo.
Se al termine della compilazione non ci viene fornito nessun messaggio d’errore, vuol dire che la
compilazione ha avuto successo.
A questo punto possiamo notare che nella nostra cartella di lavoro è stato creato un file di nome
HelloWorld.class. Questo è appunto il file sorgente tradotto in bytecode, pronto per essere
interpretato dalla JVM.
Se quindi lanciamo il comando di esecuzione del nostro programma verrà stampato il tanto
sospirato messaggio.
Riepilogo
In questo modulo abbiamo definito Java come linguaggio e come tecnologia, ed abbiamo descritto
il linguaggio mediante le sue caratteristiche. Abbiamo inoltre descritto l’ambiente di sviluppo ed
abbiamo imparato a compilare e mandare in esecuzione una semplice applicazione Java. INfie
abbiamo approcciato un piccolo programma, per avere un’idea di alcuni concetti fondamentali.
Prof.ssa Colombara Rosamaria --- Java – http://www.profcolombara.it
9