© Copyright NTT DATA Italia – All Rights Reserved 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. ITIS A. Monaco Cosenza, 25 Marzo 2014 Introduzione a Java
© Copyright NTT DATA Italia – All Rights Reserved1 M ► Nascita di Java ► Caratteristiche principali ► Differenze tra C# e Java Sommario
© Copyright NTT DATA Italia – All Rights Reserved2 M Primo meseSecondo mese…………… Nascita di Java Nel 1991 un gruppo di Sun MicroSystems, guidato da James Gosling e Patrick 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 Reserved3 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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 Reserved4 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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. Sintassi simile a C e C++ Eliminati i costrutti più "pericolosi" di C e C++ aritmetica dei puntatori preprocessore (#define) (de)allocazione esplicita della memoria Sintassi simile a C e C++ Eliminati i costrutti più "pericolosi" di C e C++ aritmetica dei puntatori preprocessore (#define) (de)allocazione esplicita della memoria
© Copyright NTT DATA Italia – All Rights Reserved5 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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. 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) 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)
© Copyright NTT DATA Italia – All Rights Reserved6 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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. Tutto all’interno di Java è un oggetto Fanno eccezione i tipi semplici (es. interi), considerati come non-oggetti a prestazioni elevate Incapsulamento, Ereditarietà, Polimorfismo Tutto all’interno di Java è un oggetto Fanno eccezione i tipi semplici (es. interi), considerati come non-oggetti a prestazioni elevate Incapsulamento, Ereditarietà, Polimorfismo
© Copyright NTT DATA Italia – All Rights Reserved7 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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. Lo stesso codice una volta compilato può essere eseguito su diverse piattaforme
© Copyright NTT DATA Italia – All Rights Reserved8 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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. Possibilità di controllare e impedire l’esecuzione di istruzioni pericolose
© Copyright NTT DATA Italia – All Rights Reserved9 M Primo meseSecondo mese…………… Caratteristiche e Java Development Kit Linguaggio di programmazione ad alto livello 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 Reserved10 M Primo meseSecondo mese…………… Bytecode e Java Virtual Machine Una caratteristica che ha reso popolare Java è quella di essere indipendente dal 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 Reserved11 M Primo meseSecondo mese…………… Write Once, Run Anywhere
© Copyright NTT DATA Italia – All Rights Reserved12 M Primo meseSecondo mese…………… javac.exe e java.exe Semplificando, un programma Java è un file di testo contenente del codice Java: 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 Reserved13 M Primo meseSecondo mese…………… javac.exe e java.exe
© Copyright NTT DATA Italia – All Rights Reserved14 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved15 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved16 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved17 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved18 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved19 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved20 M Primo meseSecondo mese…………… Sintassi e costrutti di base /** Esempio di classe */ public class VotiEsame { 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 Reserved21 M Primo meseSecondo mese…………… Sintassi e costrutti di base
© Copyright NTT DATA Italia – All Rights Reserved22 M Primo meseSecondo mese…………… Sintassi e costrutti di base
© Copyright NTT DATA Italia – All Rights Reserved23 M Primo meseSecondo mese…………… Sintassi e costrutti di base
© Copyright NTT DATA Italia – All Rights Reserved24 M Primo meseSecondo mese…………… Differenze tra C# e Java.
© Copyright NTT DATA Italia – All Rights Reserved25 M Primo meseSecondo mese…………… Differenze tra C# e Java C# permette di avere più classi nello stesso file. 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 Reserved26 M Primo meseSecondo mese…………… Differenze tra C# e Java In C# il codice viene “raggruppato” in namespaces: 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 Reserved27 M Primo meseSecondo mese…………… Differenze tra C# e Java Package e Namespace 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 Reserved28 M Primo meseSecondo mese…………… Differenze tra C# e Java Standard output C#: Console.WriteLine(“testo !!!"); Java: System.out.println("testo !!!"); Riferimento alla classe parent C#: base.* Java: super.*
© Copyright NTT DATA Italia – All Rights Reserved29 M Primo meseSecondo mese…………… Differenze tra C# e Java Il “constructor chaining” in C#, viene inserito nella signature del metodo: 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 Reserved30 M Primo meseSecondo mese…………… Differenze tra C# e Java In C#, la distinzione tra implementazione di una interfaccia ed estensione di una classe 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 Reserved31 M Primo meseSecondo mese…………… Differenze tra C# e Java Override 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 Reserved32 M Primo meseSecondo mese…………… Differenze tra C# e Java Riferimenti:
33© Copyright NTT DATA Italia – All Rights Reserved M