The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee of the document. The information is
closely linked to the oral comments accompanying the same, and may be used only by those attending the presentation. Copying,
publishing or divulging the material contained in this document is forbidden and may be illegal.
Introduzione a Java
ITIS A. Monaco
Cosenza, 25 Marzo 2014
© Copyright NTT DATA Italia – All Rights Reserved
M052 - 04
Sommario
►
Nascita di Java
►
Caratteristiche principali
►
Differenze tra C# e Java
© Copyright NTT DATA Italia – All Rights Reserved
1
M052 - 04
Nascita di Java
Nel 1991 un gruppo di Primo
Sunmese
MicroSystems,
guidato ……………
da James Gosling
e Patrick
Secondo mese
……………
Naughton, iniziò a lavorare ad un progetto per un nuovo linguaggio.
L’idea di base era quella di creare un linguaggio semplice e neutrale rispetto
all’architettura, in modo da poter essere eseguito su hardware diversi.
La prima implementazione (Alpha) vide la luce nel 1995 per poi essere pubblicata, in
versione stabile, nel 1996 come Java 1.
© Copyright NTT DATA Italia – All Rights Reserved
2
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
•
•
•
•
•
……………
……………
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
3
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
……………
……………
Sintassi simile a C e C++
•
•
•
•
•
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
Eliminati i costrutti più "pericolosi" di C e C++
aritmetica dei puntatori
preprocessore (#define)
(de)allocazione esplicita della memoria
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
4
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
•
•
•
•
•
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
……………
……………
Rilevamento errori e typechecking a tempo di
compilazione e di esecuzione
Mascheramento dei puntatori all'utente
Controllo automatico degli indici degli array
Gestione delle eccezioni da parte dell'utente
Gestione della memoria (allocazione & GC)
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
5
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
……………
……………
Tutto all’interno di Java è un oggetto
•
•
•
•
•
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
Fanno eccezione i tipi semplici (es. interi),
considerati come non-oggetti a prestazioni elevate
Incapsulamento, Ereditarietà, Polimorfismo
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
6
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
•
•
•
•
•
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
……………
……………
Lo stesso codice una volta compilato può essere
eseguito su diverse piattaforme
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
7
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
•
•
•
•
•
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
……………
……………
Possibilità di controllare e impedire l’esecuzione di
istruzioni pericolose
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
8
M052 - 04
Caratteristiche e Java Development Kit
Linguaggio di programmazione
ad alto livello
Primo mese
Secondo mese
•
•
•
•
•
Semplice e robusto
Orientato agli oggetti
Indipendente dalla piattaforma
Affidabile e sicuro
Multithread
……………
……………
??
Da allora Java è cresciuto a ritmo fenomenale: i programmatori lo hanno adottato per la
sua elevata semplicità rispetto al rivale/progenitore (il C++).
Inoltre la Sun rilasciava con Java, una libreria enormemente ricca, JDK – Java
Development Kit, che forniva agli sviluppatori una innumerevole quantità di classi per i
problemi più diversi.
© Copyright NTT DATA Italia – All Rights Reserved
9
M052 - 04
Bytecode e Java Virtual Machine
Una caratteristica che ha Primo
resomese
popolare Java
è quella
indipendente
dal
Secondo
mese di essere
……………
……………
Sistema Operativo su cui un programma viene scritto e compilato.
Ma come è resa possibile questa cosa?
Il compilatore Java produce un codice che non è il codice binario finale, ma un codice
binario intermedio, indipendente dall’architettura, chiamato Bytecode.
Questo codice intermedio è interpretato da una “macchina virtuale” che lo traduce in
istruzioni macchina: la Java Virtual Machine (JVM).
La JVM ha bisogno di conoscere il SO su cui sta girando. Per questo motivo la Sun mise
a disposizione JVM per tutti i principali sistemi operativi: Windows, Linux, Unix, Mac
ecc...
© Copyright NTT DATA Italia – All Rights Reserved
10
M052 - 04
Write Once, Run Anywhere
Primo mese
© Copyright NTT DATA Italia – All Rights Reserved
Secondo mese
……………
……………
11
M052 - 04
javac.exe e java.exe
Semplificando, un programma
Java è un file
di testo
del codice……………
Java:
Primo mese
Secondo
mese contenente
……………
class HelloWorld {
public static main(String[] args) {
System.out.println(“Hello World !!”);
}
}
Il file così creato ha estensione .java e deve essere passato al compilatore:
C:\>javac HelloWorld.java
questo software crea un file .class con lo stesso nome dell’originario:
HelloWorld.class
il file .class contiene il bytecode per la JVM. Il comando:
C:\>java HelloWorld
avvia l’esecuzione del metodo «main» della classe HelloWorld.class
© Copyright NTT DATA Italia – All Rights Reserved
12
M052 - 04
javac.exe e java.exe
Primo mese
© Copyright NTT DATA Italia – All Rights Reserved
Secondo mese
……………
……………
13
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
}
© Copyright NTT DATA Italia – All Rights Reserved
14
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
Commenti
}
© Copyright NTT DATA Italia – All Rights Reserved
15
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
Parole chiave
}
© Copyright NTT DATA Italia – All Rights Reserved
16
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
Letterali
}
© Copyright NTT DATA Italia – All Rights Reserved
17
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
Identificatori
}
© Copyright NTT DATA Italia – All Rights Reserved
18
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
Operatori
}
© Copyright NTT DATA Italia – All Rights Reserved
19
M052 - 04
Sintassi e costrutti di base
/** Esempio di classe */
public class VotiEsame { Primo mese
Secondo mese
……………
……………
private int voti[]; // variabile di tipo vettore di interi
public VotiEsame(int n) {
voti = new int[n]; /* inizializza un vettore di lunghezza n */
}
// genera un vettore contenente interi pseudo-casuali compresi tra 0 e 10
public void generaVoti() {
Random r = new Random();
for (int i=0; i<voti.length; i++) {
voti[i] = r.nextInt(11);
}
}
// stampa vettore
public double calcolaMedia() {
int somma = 0;
for (int i=0; i<voti.length; i++) {
somma += voti[i];
}
return somma / voti.length;
}
Separatori
}
© Copyright NTT DATA Italia – All Rights Reserved
20
M052 - 04
Sintassi e costrutti di base
Primo mese
© Copyright NTT DATA Italia – All Rights Reserved
Secondo mese
……………
……………
21
M052 - 04
Sintassi e costrutti di base
Primo mese
© Copyright NTT DATA Italia – All Rights Reserved
Secondo mese
……………
……………
22
M052 - 04
Sintassi e costrutti di base
Primo mese
© Copyright NTT DATA Italia – All Rights Reserved
Secondo mese
……………
……………
23
M052 - 04
Differenze tra C# e Java
.
Primo mese
© Copyright NTT DATA Italia – All Rights Reserved
Secondo mese
……………
……………
24
M052 - 04
Differenze tra C# e Java
C# permette di avere più Primo
classimese
nello stesso
file. mese
Secondo
……………
……………
Java richiede che il nome di un file sorgente corrisponda al nome della unica classe
public contenuta al suo interno.
© Copyright NTT DATA Italia – All Rights Reserved
25
M052 - 04
Differenze tra C# e Java
In C# il codice viene “raggruppato”
Primo mese in namespaces:
Secondo mese
……………
……………
namespace il.mio.namespace;
using System.IO;
class MiaClasse {
public static void Main(string[] args) {
…
}
}
In Java il codice viene “raggruppato” in packages:
package il.mio.package;
import java.io.*;
class MiaClasse {
public static void Main(string[] args) {
…
}
}
© Copyright NTT DATA Italia – All Rights Reserved
26
M052 - 04
Differenze tra C# e Java
Package e Namespace
Primo mese
Secondo mese
……………
……………
In C# i namespace NON devono riflettere la struttura delle directory.
In Java la struttura gerarchica dei package DEVE riflettere la struttura gerarchica delle
directory.
Es:
I file del package:
com.mionamespace.miopackage.*
dovranno obbligatoriamente risiedere nella cartella:
.\com\mionamespace\miopackage\*.*
© Copyright NTT DATA Italia – All Rights Reserved
27
M052 - 04
Differenze tra C# e Java
Standard output
Primo mese
Secondo mese
……………
……………
C#:
Console.WriteLine(“testo !!!");
Java:
System.out.println("testo !!!");
Riferimento alla classe parent
C#:
base.*
Java:
super.*
© Copyright NTT DATA Italia – All Rights Reserved
28
M052 - 04
Differenze tra C# e Java
Il “constructor chaining” inPrimo
C#,mese
viene inserito
nellamese
signature
del metodo:
Secondo
……………
……………
public MyConstructor(int i) : this(i, -1)
{
...
}
public MyConstructor(int i, int j)
{
...
}
In Java, può essere usato all’interno del costruttore:
public MyConstructor(int i)
{
this(i, -1);
...
}
© Copyright NTT DATA Italia – All Rights Reserved
29
M052 - 04
Differenze tra C# e Java
In C#, la distinzione tra implementazione
di
una interfaccia
ed estensione di……………
una classe
Primo mese
Secondo
mese
……………
non esiste:
public class MyClass : MyParentClass, MyInterface
{
...
}
In Java, i due casi sono gestiti separatamente con due apposite keyword:
public class MyClass1 extends MyParentClass implements MyInterface
{
...
}
public class MyClass2 implements MyInterface
{
...
}
© Copyright NTT DATA Italia – All Rights Reserved
30
M052 - 04
Differenze tra C# e Java
Override
Primo mese
Secondo mese
……………
……………
In C#, il metodo di base sottoposto a override deve essere virtual, abstract o override.
class MyParentClass
{
public virtual void MyMethod() { ... }
}
Nella classe figlia è, poi, necessario usare la keyword override:
class MyChildClass : MyParentClass
{
public override void MyMethod() { ... }
}
In Java, tutti I metodi sono virtual di default virtual e se ne può fare sempre l’override.
© Copyright NTT DATA Italia – All Rights Reserved
31
M052 - 04
Differenze tra C# e Java
Riferimenti:
Primo mese
Secondo mese
……………
http://www.codeproject.com/Articles/22854/Main-Differences-between-C-and-Java
http://msdn.microsoft.com/en-us/library/ms836794.aspx
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java
© Copyright NTT DATA Italia – All Rights Reserved
32
M052 - 04
[email protected]
© Copyright NTT DATA Italia – All Rights Reserved
33