Java (linguaggio di programmazione): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Hce (discussione | contributi)
interwiki
Riga 10:
 
== Orientamento agli Oggetti ==
La prima caratteristica, l'orientamento agli oggetti, si riferisce a un moderno metodo di programmazione e progettazione. L'idea principale della [[Programmazione orientata agli oggetti|programmazione ad oggetti]] consiste nel rendere il software la rappresentazione di entità reali o astratte ma ben definite (oggetti). Il suo obiettivo è di rendere più facile la gestione di grandi progetti, migliorarne la qualità e la manutenibilità.
 
== Indipendenza dalla piattaforma ==
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 istruzioniun dettelinguaggio intermedio '''bytecode''', --basato su istruzioni semplificate conformiche ricalcano adil unolinguaggio standardmacchina. 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 [[multithreading|multithread]], necessario per molte applicazioni che usano la rete.
 
Le prime implementazioni del linguaggio usavano una virtual machine interpretata per ottenere la massima portabilità, ma questa è una soluzione poco efficiente e i programmi interpretati sono 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 sta girando. Questi accorgimenti, a prezzo di una piccola attesa in fase di lancio del programma, permette 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 la 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 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 [[Glossario_informatico#B|bug]], diversi dall'una all'altra: per questo è nata una parodia dello slogan di Sun "Scrivi una volta, esegui dovunque", che è diventato "Scrivi una volta, fai il [[Glossario_informatico#D|debug]] ovunque".
 
===Compilazione Just In Time===
Le prime implementazioni del linguaggio usavano una virtual machine interpretatache intepretava il bytecode per ottenere la massima portabilità,portabilità ma. questaQuesta soluzione si è unaperò soluzionerivelata poco efficiente, in quanto e i programmi interpretati sonoerano molto lenti:. perPer 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 sta girando. Questi accorgimenti, a prezzo di una piccola attesa in fase di lancio del programma, permette 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 la 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.
 
== Esecuzione sicura del codice remoto ==
La piattaforma Java fu uno dei primi sistemi a fornire un largo supporto per l'esecuzione del codice da sorgenti remote. Una [[applet|applet Java]] puòè un particolare tipo di applicazione che può essere avviata nelall'interno del [[browser]] dell'utente, eseguendo codice scaricato da un server HTTP[[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.
 
== Valutazione ==
Secondo molte persone, la tecnologia Java raggiunge ragionevolmente bene tutti questii suoi obiettivi. Il linguaggio comunque non è privo di incertezze. Java tende ad essere più ad alto livello di altri linguaggi simili (come il [[Linguaggio C Plus Plus|C++]]); questo comporta carenze in alcune caratteristiche come i tipi di dati specifici, puntatori alla memoria di basso livello e metodi di programmazione come il sovraccaricamento degli operatori.
 
Nonostante queste caratteristiche siano abusate frequentemente dai programmatori, esse sono anche strumenti potenti. Comunque, la tecnologia Java include Java Native Interface (JNI), un modo per chiamare codice nativo da codice Java. Con JNI è quindi possibile ugualmente usare queste caratteristiche.