2. Semplice
Java è stato progettato partendo dal C++, omettendo
le funzioni poco utilizzate o fuorvianti.
Grazie alle numerose librerie preconfezionate è possibile realizzare
applicazioni complesse con poco codice.
Integrando le funzionalità GUI e tramite la tecnologia dei componenti
JavaBean è stato possibile realizzare software di sviluppo che si
avvicinano alla semplicità di VB.
Le applicazioni sono file di dimensioni molto piccole, il che consente di
sviluppare per computer di piccole dimensioni (palmari, cellulari, ecc)
3. Object Oriented
Java è un linguaggio veramente O.O., molto più del C++ che consente
uno sviluppo di tipo procedurale.
Una fondamentale differenza rispetto al C++ è la mancanza
dell’ereditarietà multipla, sostituita dalle ‘interfacce’.
I linguaggi O.O. permettono allo sviluppatore di vedere il progetto più ad
alto livello, occupandosi degli oggetti, della loro interfaccia, e trascurando i
loro dettagli implementativi.
Questo ha consentito, grazie al meccanismo dell’ereditarietà, lo sviluppo di
oggetti sempre più specializzati e complessi facilmente riutilizzabili in più
progetti.
Inoltre questo meccanismo di riutilizzo del codice rende il software
prodotto meno soggetto a errori.
4. Distribuito
Java dispone di una libreria per gestite i protocolli TCP/IP.
Le applicazioni Java possono utilizzare oggetti attraverso una rete.
Utilizzando java è possibile creare applicazioni server side che
consentono di sviluppare servizi Web dinamici (servlet, JSP).
Infine è possibile implementare un meccanismo di chiamata di metodi
remoti consentendo di far comunicare tra loro oggetti distribuiti in una
rete.
5. Robusto
I programmi Java per loro natura devo essere affidabili.
In primo luogo non esiste il meccanismo dei puntatori, tipici del C: quindi è
impossibile sovrascrivere per errore zone di memoria protette.
Il compilatore Java si accorge di alcune incongruenze e le segnala
immediatamente come errore o come warning: ad esempio il classico
errore che si commette in C: if (a=1)
Java dispone anche di un meccanismo potente per intercettare gli errori a
Run-Time evitando di far abortire le applicazioni.
In java non è necessario liberare la memoria manualmente. Infatti quando
un oggetto non viene più utilizzato la memoria viene liberata
automaticamente (garbage collector)
6. Sicuro
Java viene utilizzato spesso in ambienti di rete, quindi la sicurezza è un
punto fondamentale. Java è stato studiato tenendone conto fortemente,
anche se come tutti i sistemi è impossibile garantire la completa immunità
agli attacchi maligni. La Sun in ogni caso coinvolge l’intera comunità nel
compito della rilevazione dei bug di sicurezza in modo da poterli
correggere.
Certamente le Applet java rispetto agli ActiveX Microsoft hanno un
meccanismo di sicurezza molto più efficiente. Ad esempio è possibile
impedire l’accesso ai file locali anche alle classi che possiedono una firma
digitale autenticata.
7. Indipendente dall’architettura
Il compilatore java genera un codice intermedio (bytecode) non un
eseguibile. Tale byetecode non dipendono da alcuna architettura hardware
o software.
Il bytecode dovrà essere interpretato dalla macchina virtuale java su
qualsiasi piattaforma. Questo ha come conseguenza prestazioni molto
peggiori rispetto agli eseguibili nativi, ma nella maggior parte dei casi i
tempi sono comunque accettabili.
Il bytecode invece di essere interpretato può essere anche tradotto ‘al-
volo’ in codice nativo riducendo il problema delle basse prestazioni.
8. Portabile
Il C e in tutti i linguaggi precedenti non si sa mai con certezza la
dimensione di una variabile, ad esempio un int può essere a 16 o a 32 bit a
seconda dell’ambiente. Con java le dimensioni sono sempre le stesse 32
bit. Lo stesso vale per le stringhe che sono salvate sempre come Unicode.
Inoltre Java risolve, o fa il meglio per risolvere, il grosso problema delle
interfacce grafiche Windows. Infatti mette a disposizione un toolkit che
consente di scrivere un applicazione utilizzabile in modo soddisfacente su
Windows, su Macintosh e su una delle tante versioni di xWindows di Unix.
9. Multithread
In java è possibile sfruttare la potenzialità dei sistemi operativi in grado di
eseguire le operazioni con un certo grado di parallelismo.
E’ quindi possibile spezzare un applicazioni in più thread che vengono
eseguiti parallelamente.
Il vantaggio di tale implementazione è evidente sia nella gestione
dell’interfaccia grafica, sia nell’implementazione di server.
I server spesso sono in attesa di una richiesta e avviano un processo per
ogni richiesta proveniente da un client.
I server inoltre spesso sono sistemi multiprocessore: ciò rende ancora più
evidente il vantaggio.
10. Alte Prestazioni
Il bytecode java viene interpretato producendo applicazioni che in termini
di prestazioni sono da giudicare mediocri. Tuttavia sono prestazioni
paragonabili a quelle di VB4 quindi nella maggior parte dei casi accettabili.
Nel caso dovessero servire applicativi molto veloci sarà necessario
procedere all’uso di compilatori just-in-time (JIT) che producono codice
nativo al-volo a partire sempre dal bytecode. In tal caso le prestazioni
migliorano di 10-20 volte rimanendo sempre inferiori a un eseguibile veroe
proprio.
Oppure sarà possibile utilizzare compilatori che generano eseguibili nativi,
perdendo però i vantaggi della portabilità.
11. L’ambiente di sviluppo SUN
J2SE: Standard Edition
J2EE: Enterprise Edition
J2ME: Micro Edition
12. J2SE
Il Java Developement Kit (JDK) viene distribuito dalla SUN gratuitamente
e contiene tutti gli strumenti per sviluppare ed eseguire
un’applicazione.
Una volta installato vengono create le seguenti cartelle:
bin: contiene il compilatore e gli strumenti
demo: contiene alcuni esempi
jre: contiene le librerie standard in archivi .jar
13. Il compilatore javac
Installare il pacchetto.
Modificare le variabili d'ambiente PATH e CLASSPATH
SET CLASSPATH=.;c:programmijdk114libclasses.zip;
SET PATH=%PATH%c:programmijdk114bin;
In tal modo sarà possibile avviare java da qualsiasi directory
Il pacchetto standard JDK non contiene un Editor integrato,
si potrà tuttavia utilizzare un Editor qualsiasi.
La compilazione avviene tramite il comando:
javac Prova.java
(la compilazione genera il file Prova.class ovvero tanti file class
quante classi contenute nel file .java)
-Il comando javac prevede diverse opzioni, non usate di
frequente, che possono essere analizzate scrivendo dal prompt:
javac senza argomenti
14. L’interprete java
Un’applicazione java viene lanciata con:
java Prova
(Prova è il file .class che contiene il metodo main)
In alcuni casi si hanno applicazioni costituite da più file class inpacchettate
in archivi .jar. In questi casi è possibile lanciare l’applicazione con:
java –jar Archivio.jar
L’esecuzione di un’applicazione con java avvia sempre una finestra DOS
anche si si tratta di un’applicazione windows. Se si vuole evitare l’apertura
della finestra DOS si può usare il comando
javaw (con le stesse opzioni di java)
15. Primo esempio
public class Hello
{
public static void main(String args[])
{
if(args.length>0)
System.out.println("Hello " + args[0] +"!");
else
System.out.println("Hello !!");
}
}
Da compilare con: javac Hello.java
Ed eseguire con: java Hello Laura
16. Regola dei nomi
Le classi iniziano sempre con la lettera maiuscola
Hello
se il nome è composto da più parole si usa la seguente notazione
HelloWorld
metodi iniziano con la lettera minuscola
main
se il nome è composto da più parole si ha:
stampaElenco
le variabili usano la stessa notazione dei metodi
le costanti sono tutte in maiuscolo
17. L’archiviatore jar
Nel pacchetto JDK è presente un tool per creare archivi:
jar cvf bundle.jar *
(aggiunge tutti i file della cartella in un file bundle.jar)
jar cvf bundle.jar audio classes images
(aggiunge tutti i file delle sottocartelle audio,classes,images in un file
bundle.jar)
jar tf bundle.jar
(mostra il contenuto di un file jar)
jar xvf bundle.jar
(estrae i file dall’archivio)
Le opzioni complete possono essere analizzate nella documentazione.
18. Altre utility
javadoc
Serve per creare una documentazione HTML alle nostre classi.
appletviewer
Visualizzatore di applet senza l’utilizzo di browser particolari.
rmic
Permette di generare classi utili per l’invocazione di metodi remoti