|
Article on other languages:
|
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 del compilatore Java e della macchina virtuale sotto licenza GPL[1]. L'8 maggio 2007 SUN ha rilasciato anche le librerie (tranne alcune componenti non di sua proprietà) sotto licenza GPL rendendo Java un linguaggio di programmazione la cui implementazione di riferimento è libera. [2]
PanoramicaJava venne creato per soddisfare quattro scopi:
Per facilitare il passaggio a questo linguaggio per i programmatori old-fashioned legati in particolare a linguaggi come il C la sintassi di base (strutture di controllo, operatori e così via) è stata mantenuta pressoché identica. Orientamento agli oggettiLa prima caratteristica, l'orientamento agli oggetti, si riferisce a un moderno metodo di programmazione e progettazione, la programmazione orientata agli oggetti (OOP). L'idea alla base della OOP è di rappresentare, nella progettazione del software, le entità reali o astratte che compongono il problema sotto forma di oggetti. Gli oggetti sono caratterizzati da delle proprietà (definite variabili o campi di istanza o di esemplare) e di metodi applicabili sugli oggetti stessi, che possono ad esempio modificarne lo stato o estrarne informazioni. I programmi scritti in Java possono essere unicamente orientati agli oggetti, di conseguenza tutto il codice deve essere necessariamente incluso in una classe. Sebbene Java possa operare sia su oggetti che su tipi di dati primitivi, è considerato un linguaggio ad oggetti puro, ovvero nel quale gli oggetti sono le entità di base del linguaggio, anziché essere costruiti partendo da costrutti ad un inferiore livello di astrazione. EreditarietàL'ereditarietà in java è implementata mediante la parola chiave extends, applicata nella dichiarazione di una classe public class Quadrato extends Quadrilatero Una classe estende sempre una e una sola altra classe (ovvero non esiste ereditarietà multipla), ma può a sua volta essere estesa da un numero arbitrario di classi. Se non si utilizza la clausola Questo sistema rende disponibile un modo per creare gerarchie di classi ben definite, ad esempio una classe L'overriding si attua semplicemente scrivendo all'interno della classe che estende (in questo caso la classe Java adotta un modello di ereditarietà basato sull'ereditarietà singola; in altre parole, una classe può estendere una sola superclasse. Su questo punto Java si differenzia dal C++, basato sul modello dell'ereditarietà multipla. Dopo l'avvento di Java, l'ereditarietà singola si è gradualmente affermata come modello standard di ereditarietà nelle tecnologie object-oriented, ed è stata abbracciata, per esempio, anche dai linguaggi del framework .NET Microsoft. InterfacceL'utilizzo di una interfaccia in java consente di trattare in modo omogeneo tutti gli oggetti che forniscono un dato insieme di servizi, a prescindere dalla loro implementazione (e quindi dalla loro particolare classe di appartenenza). Dal punto di vista sintattico, una interfaccia Java consiste principalmente di una lista di dichiarazioni di metodi che tutte le classi che implementano l'interfaccia devono fornire. public class Quadrato implements FiguraGeometrica dove l'interfaccia FiguraGeometrica potrebbe essere dichiarata come segue: public interface FiguraGeometrica { public int calcolaPerimetro(); public int calcolaArea(); } (Notare che nella dichiarazione di un metodo in un'interfaccia le parole-chiave "public" e "abstract" sono sempre implicite e, dunque, facoltative.) Con l'implementazione dell'interfaccia la classe Quadrato deve contenere al suo interno i metodi calcolaPerimetro e calcolaArea propri (o possono essere ereditati dalla classe padre). L'utilizzo delle interfacce viene usato quando si hanno delle gerarchie di oggetti, o oggetti semplici che possiedono delle operazioni comuni (metodi), ma l'implementazione di queste sono differenti una dall'altra. Indipendenza dalla piattaformaLa 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. Il bytecode verrà quindi eseguito da una macchina virtuale. 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" ("write once, debug anywhere"). Compilazione Just-In-TimeLe prime implementazioni del linguaggio usavano una virtual machine che interpretava 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 collector, 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. Esecuzione sicura del codice remotoLa 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). Altri aspetti di interesseRispetto 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 utilizzando i package java.awt e javax.swing (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:
LinguaggioHello, world!Il seguente esempio stampa il testo "Hello world". public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } } Segue l'analisi riga per riga del frammento di codice:
La classe porta il nome HelloWorld e, poiché è dichiarata "public", significa che anche il nome del file nel quale verra' scritto il programma dovra' chiamarsi HelloWorld.java. Quindi il nome del file .java e il nome della classe "pubblica" devono coincidere!
La classe HelloWorld contiene un unico metodo, che si chiama "main". È un nome particolare. In effetti, al caricamento della classe, l'interprete java cerchera' il metodo che portera' questo nome.
Il parametro args si riferisce all'array di stringhe passato all'interprete al momento del suo avvio. Se viene eseguito questo comando: $ java HelloWorld par1 par2 la stringa par1 sarà caricata nella variabile args[0] mentre par2 sarà caricata nella variabile args[1].
Questa operazione stampa sullo schermo la scritta "Hello world". Entrando più nel dettaglio, il metodo println() viene invocato su un oggetto statico di tipo PrintStream chiamato "out", il quale, a sua volta si trova all'interno della classe System. Strutture di controllo
Cicliwhile (boolean expression) { statement(s) } do { statement(s) } while (boolean expression); for (initialisation; termination condition; incrementing expr) { statement(s) } Alternativeif (boolean expression) { statement(s) } if (boolean expression) { statement(s) } else { statement(s) } if (boolean expression) { statement(s) } else if (boolean expression) { statement(s) } else if (boolean expression) { statement(s) } else { statement(s) } switch (integer expression) { case constant integer expr: statement(s) break; ... default: statement(s) break; } (boolean expression) ? (statement on true condition) : (statement on false condition) Gestione delle eccezioni
try { statement(s) } catch (exception type) { statement(s) } catch (exception type) { statement(s) } finally { statement(s) } SaltiÈ possibile inserire un'etichetta prima di ogni dichiarazione myLabel: aJavaStatement; Il comando
break;
termina il ciclo corrente. Nel caso di cicli annidati, il break con label può essere usato per terminare uno qualsiasi di tali cicli:
break cicloEsterno;
Un'espressione continue termina l'iterazione corrente e inizia quella successiva
continue;
Il continue con una label può essere usato per passare alla prossima iterazione di uno qualsiasi di un insieme di cicli annidati:
continue cicloEsterno;
Tipi Primitivi
I caratteri usano la codifica a 16 bit Unicode. Contiene tutti i caratteri usuali, oltre a tutti i set di caratteri di molte lingue come Greco, Cirillico, Cinese, Arabo, ecc. In Java si possono usare tutti questi caratteri, anche se molti editor non hanno il supporto per i set di caratteri diversi dal ASCII. Gli Array e le stringhe non sono tipi primitivi ma oggetti. Versioni
Java fu inizialmente rilasciato come Java Development Kit 1.0 (JDK 1.0). Questo comprende Java Runtime (la virtual machine e le librerie di classi), e gli strumenti di sviluppo (es. il compilatore Java). Successivamente, Sun fornì un pacchetto che comprendeva solo Java runtime, chiamato Java RunTime Environment (JRE). Normalmente le persone si riferiscono ad una particolare versione di Java attraverso la versione del JDK (es. JDK 1.4) Le versioni JDK 1.2 e successive sono spesso chiamate Java 2. Per esempio, il nome ufficiale del JDK 1.4 è Java(TM) 2 Platform, Standard Edition 1.4. Il linguaggio è rimasto stabile dal JDK 1.0; la libreria di classi che viene fornita con JDK è stata progressivamente ampliata e modificata in alcune parti.
Sebbene il linguaggio sia molto semplice da imparare, l'utilizzo delle architetture e delle specifiche richiede un tempo di apprendimento molto lungo. Come programmare in JavaLa programmazione in Java è una specializzazione della programmazione con linguaggi orientati agli oggetti. Il linguaggio Java è un linguaggio orientato agli oggetti con una sintassi simile al linguaggio C e al linguaggio C++. Allo sviluppatore già esperto di programmazione OOP, alcuni punti dovrebbero essere evidenziati:
L'apprendimento del linguaggio non è difficile. La vastità delle "librerie" (o più correttamente package) standard del linguaggio è tale da renderne praticamente impossibile la "padronanza"; per programmare in Java è dunque necessario avere a disposizione la documentazione delle API del linguaggio, disponibile in linea sul sito ufficiale. Un buon punto di partenza per imparare Java è il tutorial di Sun. Per sviluppare programmi in Java è teoricamente sufficiente un qualsiasi editor di testo; in pratica, se si vuole scrivere qualcosa di più del classico hello world, occorre un ambiente di sviluppo integrato. Esistono diversi IDE (Integrated Development Environment, ambiente di sviluppo integrato), alcuni gratuiti ed altri a pagamento. Fra questi quello più premiato è IntelliJ IDEA vincitore fra l'altro del premio Best Java IDE 2005 rilasciato da JDJ. Si tratta di un IDE completo, molto funzionale ed in grado di garantire una padronanza completa del codice che si sta sviluppando. Un ambiente di sviluppo per Java gratuito e soprattutto leggero è BlueJ, di chiara impostazione didattica, e disponibile per tutti i sistemi operativi al sito gratuito http://www.bluej.org/. Un altro ambiente per lo sviluppo in Java (e non solo) è Eclipse, donato alla comunità di sviluppatori da IBM e scaricabile dalla pagina http://www.eclipse.org. Eclipse è più avanzato e potente, è libero e disponibile per molti sistemi operativi; da notare che quest'ultimo è strutturato con un'architettura a plugin che permette l'aggiunta di ulteriori funzionalità semplicemente scaricando ed installando il relativo plugin (si veda ad esempio eclipse plugins). La Sun stessa ha promosso lo sviluppo di un ambiente di sviluppo gratuito e open source chiamato NetBeans e lo mette a disposizione gratuitamente insieme a Sun Java Studio. Questi due ambienti sono scritti in Java e NetBeans è distribuito (opzionalmente) insieme alla macchina virtuale [1]. Come entità separata, NetBeans è scaricabile da netbeans.org. Uno degli IDE commerciali più diffusi è JBuilder prodotto dalla Borland. Curiosità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). Note
Voci correlateAltri progetti
Collegamenti esterni
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net