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