Java

Guida Java @ Html.it
Guida Java @ Latoserver.it
Corso Java @ SoftwarePlanet.net
Manuale Java @ Ciaburro.it
Guida Java Rapida
Servlet Java
Il linguaggio Java è un linguaggio di programmazione orientato agli oggetti, derivato dal C++ (e quindi indirettamente dal C) e creato da James Gosling e altri ingegneri di Sun Microsystems. Il gruppo iniziò a lavorare nel 1991, il linguaggio inizialmente si chiamava Oak. Il nome fu successivamente cambiato in Java a causa di un problema di copyright (il linguaggio di programmazione Oak esisteva già nel 1991). Java fu annunciato ufficialmente il 23 maggio 1995 a SunWorld. La piattaforma di programmazione Java è fondata sul linguaggio stesso, sulla Java Virtual Machine (JVM) e sulle API. Java è un marchio registrato di Sun Microsystems. Il 13 novembre 2006 la Sun Microsystems ha rilasciato la sua implementazione di Java sotto licenza GPL: Java è diventato così un linguaggio di programmazione la cui implementazione di riferimento è libera.
Java venne creato per soddisfare quattro scopi:
1. essere orientato agli oggetti
2. essere indipendente dalla piattaforma
3. contenere strumenti e librerie per il networking
4. essere progettato per eseguire codice da sorgenti remote in modo sicuro
Per facilitare il passaggio a questo linguaggio per i programmatori old-fashioned legati in particolare a linguaggi come il C la sintassi di base (cicli, operatori, ...) è stata mantenuta pressoché identica..
La prima caratteristica, l'orientamento agli oggetti, si riferisce a un moderno metodo di programmazione e progettazione. L'idea principale della programmazione ad oggetti consiste nel rendere il software la rappresentazione di entità reali o astratte ma ben definite (oggetti). Questi oggetti, come nella vita pratica, hanno proprietà rappresentate da valori, e qualità o meglio metodi: ciò che sanno fare questi oggetti. Si pensi ad una automobile: ha delle proprietà come il colore o il numero di porte, e dei metodi, per esempio può girare a destra o sinistra, andare avanti o indietro, accelerare, decelerare ecc. Riportando la programmazione in questi termini è facile capire come questo renda più facile la gestione di grandi progetti, migliorarne la qualità e la mantenibilità.
La seconda caratteristica, l'indipendenza dalla piattaforma, significa che l'esecuzione di programmi scritti in Java deve avere un comportamento simile su hardware diverso. Si dovrebbe essere in grado di scrivere il programma una volta e farlo eseguire dovunque. Questo è possibile con la compilazione del codice di Java in un linguaggio intermedio bytecode, basato su istruzioni semplificate che ricalcano il linguaggio macchina. Esso viene eseguito da una virtual machine, cioè da un interprete: Java è quindi, in linea di massima, un linguaggio interpretato. Inoltre, vengono fornite librerie standardizzate per permettere l'accesso alle caratteristiche della macchina (come grafica e networking) in modo unificato. Il linguaggio Java include anche il supporto per i programmi con multithread, necessario per molte applicazioni che usano la rete.
La portabilità è un obiettivo tecnicamente difficile da raggiungere, e il successo di Java in questo ambito è materia di alcune controversie. Sebbene sia in effetti possibile scrivere in Java programmi che si comportano in modo consistente attraverso molte piattaforme diverse, bisogna tenere presente che questi poi dipendono dalle virtual machine, che sono programmi a sé e che hanno inevitabilmente i loro bug, diversi dall'una all'altra: per questo è nata una parodia dello slogan di Sun "Scrivi una volta, esegui dovunque" ("write once, run everywhere"), che è diventato "Scrivi una volta, fai il debug ovunque".
Le prime implementazioni del linguaggio usavano una virtual machine che intepretava il bytecode per ottenere la massima portabilità, definita Architecture Neutral. Questa soluzione si è però rivelata poco efficiente, in quanto i programmi interpretati erano molto lenti. Per questo, tutte le implementazioni recenti di macchine virtuali Java hanno incorporato un JIT compiler, cioè un compilatore interno, che al momento del lancio traduce al volo il programma bytecode Java in un normale programma nel linguaggio macchina del computer ospite. Inoltre, questa ricompilazione è dinamica, cioè la virtual machine analizza costantemente il modello di esecuzione del codice (profiling), e ottimizza ulteriormente le parti più frequentemente eseguite, mentre il programma è in esecuzione. Questi accorgimenti, a prezzo di una piccola attesa in fase di lancio del programma, permettono di avere delle applicazioni Java decisamente più veloci e leggere. Tuttavia, anche così Java resta un linguaggio meno efficiente dei linguaggi compilati come il C++, scontando il fatto di possedere degli strati di astrazione in più, e di implementare una serie di automatismi, come il garbage collection, che se da un lato fanno risparmiare tempo ed errori in fase di sviluppo dei programmi, dall'altro consumano memoria e tempo di CPU in fase di esecuzione del programma finito.
La piattaforma Java fu uno dei primi sistemi a fornire un largo supporto per l'esecuzione del codice da sorgenti remote. Un Java applet è un particolare tipo di applicazione che può essere avviata all'interno del browser dell'utente, eseguendo codice scaricato da un server web remoto. Questo codice viene eseguito in un'area (sandbox) altamente ristretta, che protegge l'utente dalla possibilità che il codice sia malevolo o abbia un comportamento non desiderato; chi pubblica il codice può applicare un certificato che usa per firmare digitalmente le applet dichiarandole "sicure", dando loro il permesso di uscire dall'area ristretta e accedere al filesystem e al network, presumibilmente con l'approvazione e sotto il controllo dell'utente. In realtà gli applet non hanno avuto molta fortuna. Infatti presuppone che il client in cui essi vengono eseguiti abbia installata la JRE (deve eseguire il codice dell'applet). Hanno avuto fortuna le applicazioni che prevedono il cosiddetto thin-client, cioè un client 'leggero' che non ha bisogno di particolari strumenti per eseguire il codice remoto (a volte è necessario solo il browser).
Rispetto alla tradizione dei linguaggi a oggetti da cui deriva (e in particolare rispetto al suo diretto progenitore, il C++), Java ha introdotto una serie di notevoli novità rispetto all'estensione della sua semantica. Fra le più significative si possono citare probabilmente la possibilità di costruire GUI (interfacce grafiche) con strumenti standard e non proprietari (per il C++ e altri linguaggi analoghi solitamente le GUI non fanno parte del linguaggio, ma sono delegate a librerie esterne), la possibilità di creare applicazioni multi-thread, ovvero che svolgono in modo concorrente molteplici attività, e il supporto per la riflessione, ovvero la capacità di un programma di agire sulla propria struttura e di utilizzare classi caricate dinamicamente dall'esterno.
Fra gli argomenti che depongono spesso a favore di Java nella scelta del linguaggio di implementazione di un progetto software moderno, inoltre, si deve certamente contare la vastità delle librerie standard di cui il linguaggio è dotato, e che in particolare contribuiscono a renderlo altamente integrabile con le altre tecnologie.
Alcuni esempi di funzionalità di libreria di Java sono:
* accesso ai database tramite JDBC e ai DBMS con driver ODBC tramite il bridge JDBC-ODBC
* manipolazione documenti XML
* dialogo con piattaforme CORBA
* potenti strumenti per la programmazione lato server nel contesto Web
* supporto nativo per gran parte dei protocolli della famiglia IP, vedi ad esempio il Socket Java
* supporto per le applicazioni multimediali, streaming audio e video
Le estensioni e architetture legate al linguaggio Java comprendono:
* GeoTools Libreria per il trattamento di dati geografici
* J2SE Java 2 Platform Standard Edition;
* J2EE Java 2 Platform Enterprise Edition;
* J2ME Java 2 Platform Micro Edition;
* Servlet;
* EJB Enterprise JavaBeans;
* JSP JavaServer Pages;
* JSF Java Server Faces
* JDO Java Data Objects;
* JMS Java Message Service;
* JAF JavaBeans Activation Framework;
* Java Mail;
* JNI Java Native Interface;
* JNDI Java Naming and Directory Interface;
* JSML Java Speech Grammar Specification;
* JDBC Java Database Connectivity;
* JAIN Java Integrated Networks;
* JDMK Java Dynamic Management Kit;
* Jini Java Intelligent Network Infrastructure;
* Jiro Java Interface for Regular Objects;
* JXTA sigla che sta per "juxtapose" (porre accanto);
* JavaSpaces;
* JMI Java Metadata Interface;
* JMX Java Management Extensions.
* JAXB Java Architecture for XML Binding
* JAXP Java API for XML Processing
* SAAJ SOAP with Attachments API for Java
* JAX-RPC Java API for XML-based RPC
* JAXR Java API for XML Registries
* Java 3D Java 3D API
Sebbene il linguaggio sia molto semplice da imparare, l'utilizzo delle architetture e delle specifiche richiede un tempo di apprendimento molto lungo.
J. Gosling e A. Van Hoof (considerati gli autori del linguaggio Java) si trovavano spesso ad un caffè presso il quale discutevano del linguaggio stesso. E così il linguaggio prese il nome da tale abitudine (Java è una qualità di caffè dell'omonima isola dell'Indonesia), tanto che il magic number che identifica un file .class (byte code ottenuto dalla compilazione di un file .java) è 0xCAFEBABE (probabilmente riferendosi alla cameriera che li serviva).