Concetto di portabilità tradizionale (p.e. linguaggio C/C++) Telematica II codice C/C++ Compilatore (Linux) Eseguibile (Linux) Linux Compilatore (Pentium) Eseguibile (Win32) Windows 32 2. Introduzione al JAVA Compilatore (Mac) Corso di Laurea in Ingegneria Informatica A.A. 2009-2010 2° Semestre Prof. Giovanni Pascoschi 2 Portabilità in JAVA Eseguibile (Mac) Telematica II – A.A. 2009-2010 Mac a cura di Pascoschi Giovanni Approccio tradizionale (p.e. C/C++) APPLICAZIONI codice JAVA Linux + JVM Compilatore (Linux) Le applicazioni sono costruite nel contesto del SISTEMA OPERATIVO che a sua volta è costruito su un particolare HARDWARE WRITE ONCE, RUN EVERYWHERE! Compilatore (Pentium) Compilatore (Mac) 3 Telematica II – A.A. 2009-2010 Bytecode (Platform independent) Windows 32 + JVM OS Mac + JVM COMPUTER a cura di Pascoschi Giovanni 4 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Approccio JAVA La JAVA Virtual Machine APPLICAZIONE JAVA il SOFTWARE LAYER è chiamato Java Virtual Machine JVM è un “interprete” intelligente di un linguaggio simil-assembly chiamato BYTECODE APPLICAZIONE JVM JAVA definisce un livello SOFTWARE (SOFTWARE LAYER) indipendente dal SO (JVM) sul quale girano le applicazioni JAVA OS COMPUTER 5 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 6 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni JAVA Æ una piattaforma software universale La JAVA Virtual Machine JAVA consiste quindi di: la JAVA Virtual Machine potrebbe essere un componente software del Sistema Operativo ¾ Linguaggio la JVM in linea di principio potrebbe essere anche inglobata nell’hardware!! Facile Non interessa al programmatore ¾ JAVA Virtual Machine Piu’ difficile ¾ Numerose librerie di classi a disposizione JAVA è la piattaforma ideale per Internet, independente dall’hardware, scalabile e aperta 7 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 8 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Confronto prestazioni C++ / JAVA Storia di JAVA Nasce nel 1992 con il nome di Oak (“quercia”) da un gruppo di programmatori capeggiato da James Gosling Æ obiettivo di applicarlo alla domotica e TV nel 1994 ÆHotJava Æobiettivo di programmare per internet (client side) nel 1995 JAVA (nome deriva da una tipologia di caffe’ famosa in USA) (network programming) Netscape introduce la JVM nel suo browser Æ obiettivo di rendere le pagine web interattive sul lato client con gli applet (letteralmente “applicazioncina”) costante e rapido sviluppo in altre aree come la sicurezza, i cellulari, ecc JAVA a run-time è essenzialmente interpretato ¾Prestazioni inferiori al C++… Vengono eliminate alcune problematiche del C++ (p.e. aritmetica dei puntatori) che possono creare problemi nel debugging ¾Tempo di sviluppo: Inferiore al C++ ... (JAVA denominato ((C++) - -)++) 9 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni JAVA diventa un linguaggio di programmazione general purpose (si stima maggior numero di programmatori attivi nel mondo) 10 Evoluzione di JAVA Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Versioni JAVA La storia delle versioni del linguaggio JAVA è stata molto rapida e in alcuni casi turbolenta J2SE – Java 2 Standard Edition ¾ Applicazioni desktop La release iniziale di JAVA (OAK) è JDK 1.0 (1996) (JDK è l’acronimo di JAVA Development Kit) Appena uscita la release 1.0 era già pronta la JDK 1.1 (1997) La release 1.3 viene denominata J2SE1.3 (da quel momento si parla di JAVA2 seconda generazione; J2SE è l’acronimo per JAVA 2 Platform Standard Edition) (1998) La release 1.5 è denominata J2SE5 (2004) La release 1.6 è denominata JAVA SE6 (2006) – Update 10-19 (eliminando il “2”) E’ in fase di sviluppo il progetto della release 1.7 denominata JAVA SE7 (durante il 2010?) 11 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni J2EE – Java 2 Enterprise Edition ¾ Applicazioni server J2ME – Java 2 Micro Edition ¾Applicazioni per Smartphone Smartphone/PDA 12 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Tipologia di applicazioni JAVA Per cosa è usato JAVA? Java può essere eseguito: come “stand-alone program” JAVA è adatto alla realizzazione di quasi tutte le applicazioni software, ma soprattutto: ¾ da interpreti java (o compilatori JIT, o Java Chips) come “Applet”: ¾ Web programming (server side) ¾ applicazioni distribuite o di rete (client-server, peer-to-peer, Web Services) ¾ Costruzione di interfacce grafiche ¾ Software su piccoli dispositivi (telefonini) ¾ da browsers Web ¾ da applicativi ad hoc come “Servlet” ¾ Applicazioni eseguite da un application server (Tomcat, BEA Weblogic,…) poco adatto per scrittura driver (meglio C/C++ o assembly) come “Midlet” ¾ Applicazioni eseguite su un dispositivo mobile (palmare, cellulare, …) 13 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Piattaforme / strumenti (1) 2 Platform, Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Piattaforme / strumenti (2) http://java.sun.com/javase/downloads/index.jsp JavaTM 14 Standard Edition (J2SETM) The essential Java 2 SDK, tools, runtimes, and APIs for developers writing, deploying, and running applets and applications in the Java programming language. Eclipse is a collection of open source projects built on the Equinox OSGi run-time Eclipse is an open source community whose projects are focused on building an extensible development platform, runtimes and application frameworks for building, deploying and managing software across the entire software lifecycle. Eclipse is much more than a Java IDE http://www.eclipse.org/ Æ utilizzato nelle esercitazioni di laboratorio ¾ completamente gratuito ¾ numerosi add-on Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Piattaforme / strumenti (3) Risorse utili sul web (1) http://www.mindview.net/Books Gratis in forma elettronica: Thinking in Java (3° edition) Bruce Eckel In acquisto: Thinking in Java (4° edition) Bruce Eckel http://netbeans.org/ Runs on Windows, Linux, Mac OS X and Solaris. NetBeans IDE is open-source and free. Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Risorse utili sul web (2) Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Risorse utili sul web (3) http://java.sun.com/docs/books/tutorial/?frontpage-spotlight http://www.mokabyte.it/ Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Caratteristiche fondamentali di un’applicazione JAVA Prima applicazione JAVA #1 Lo schema MINIMO di ogni applicazione é: In linguaggi procedurali come il C, l’unita’ di programmazione e’ la funzione In JAVA l’unita’ di programmazione e’ la classe, da cui possono essere istanziati oggetti /* file HelloWorld.java */ public class HelloWorld { /* Hello World, my first Java application */ public static void main (String args[ ]) { System.out.println("Hello World!"); } } In JAVA anche un qualsiasi programma è una classe Il main è un metodo della classe del programma 21 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Dichiarazione della classe HelloWorld Riga di commento 22 Prima applicazione JAVA #2 Telematica II – A.A. 2009-2010 Dichiarazione del metodo main Operazione di output a cura di Pascoschi Giovanni Prima applicazione JAVA #3 in Java tutto e’ una “classe” un’applicazione JAVA comincia l’esecuzione dal metodo main( ) import <= Include “intelligente” (senza bisogno di #ifdef) Æ NON c’è precompilatore! Æ ved. in seguito la definizione del metodo main è del tipo: i metodi statici si possono richiamare senza creare un’istanza della classe p.e. Classe.metodoStatico( ); Per definire una nuova classe si usa la keyword class public class Hello World public static void main( String[ ] args) Lo specificatore public indica che la classe e’ visibile dall’esterno public indica che il metodo è visibile dall’esterno 23 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 24 Telematica II – A.A. 2009-2010 void indica che non ritorna nulla Æ simile a una procedura (sempre per il main) passaggio di un array di stringhe come parametro a cura di Pascoschi Giovanni Prima applicazione JAVA #4 Prima applicazione JAVA #5 metodi statici (static) ¾Per adoperare il metodo di una classe occorre sempre istanziarla. Questa può essere una limitazione per alcune procedure che si limitano a ricevere un input e produrre un output, senza che debba essere memorizzato uno stato (simile alle funzioni). E’ possibile dichiarare metodi in modo che non richiedano una istanza per essere utilizzati: si tratta dei metodi statici Per stampare un messaggio a video, si usa l’oggetto predefinito System.out (della libreria standard JAVA), che permette la stampa a video di messaggi Per richiamare un metodo di un oggetto si usa la notazione puntata (dot notation): oggetto.metodo( ); System.out ha il metodo println( ) che stampa un messaggio a video (passato come parametro) e andando a capo: System.out.println( “Hello world!”); 25 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 26 Compilazione di un programma JAVA Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Uso di JDK Compilazione: Per la compilazione è necessario il JDK (Java Development Kit Standard Edition ver. 6 update 20) Æhttp://java.sun.com $javac HelloWorld.java struttura delle cartelle di JDK : ¾ produce HelloWorld.class ¾ (in realtà: un file class per ogni classe contenuta nel sorgente) ¾bin Æfile eseguibili ¾demo Æ varie dimostrazioni ¾include e lib Æ librerie in C e JAVA per il funzionamento di JDK ¾jre Æ Java Runtime Environment (JRE) – è la JVM ¾docs Æ documentazione libreria standard e tutorial ¾nella root di JDK è presente il file src.zip con tutti i file sorgenti della libreria (dalla versione 1.0 700 classi Æ alla versione 1.4 4.700 classi!!) Esecuzione: $java HelloWorld ¾ (la classe indicata deve contenere il main) 27 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 28 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Variabili / Nomi in JAVA (regole formali) Variabili / Nomi in JAVA (regole facoltative) I programmi Java includono nomi per identificare alcune entità di programmazione (packages, classes, interfaces, methods, variables, statement) Nomi per le classi Æ iniziare con una lettera maiuscola ¾ se il nome della classe è composto si usa la convenzione CamelCase Æ p.e. FiguraGeometrica Identificatore: sequenza di un numero illimitato di lettere, numeri UNICODE (iniziare con una lettera) Nomi per le variabili Æ iniziare con una lettera minuscola ¾ se il nome della variabile è composto si usa la convenzione CamelCase Æ p.e. pesoSpecifico Non puo’ essere una parola o simbolo riservato del linguaggio (p.e. non va bene “for”) Nomi per i metodi Æ stessa convenzione delle variabili (ovviamente seguiti dalle parentesi tonde) Æ p.e. stampa( ) Non puo’ contenere spazi Nomi di costanti Æ utilizzare tutte maiuscole (+ il carattere _ per distinguere i nomi composti) Æ p.e. PI_GRECO “Case sensitive”: maiuscole e minuscole vengono considerate diverse (p.e. Pippo e pippo sono due variabili diverse) 29 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Unicode in JAVA Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Commenti in JAVA I caratteri, le stringhe e gli identificatori in JAVA sono composti da caratteri Unicode a 16-bit. Cio’ rende i programmi JAVA piu’ facilmente utilizzabili a livello internazionale per utenti non europei La maggior parte delle piattaforme non possono visualizzare tutti i 38,885 caratteri attualmente definiti in Unicode Il set di caratteri Unicode e’ compatibile con ASCII e i primi 256 caratteri (da 0x0000 a 0x00FF) sono identici ai caratteri ISO8859-1 (Latin-1) (da 0x00 a 0xFF) Le sequenze di escape Unicode \u sono elaborate prima degli altri caratteri di escape Telematica II – A.A. 2009-2010 30 a cura di Pascoschi Giovanni In JAVA esistono 3 forme di commento: /* C style */ /* Questo tipo di commento può proseguire su piu’ linee */ /* NOTA: ATTENZIONE AI /*COMMENTI*/ NIDIFICATI! */ // C++ style // Una intera riga commentata a=a+3; // Commento su una linea di codice /**documentation */ /**Stile di commento usato da JAVADOC per la generazione automatica di documentazione */ il commento inserito servirà a creare la documentazione in forma automatica del sorgente JAVA in formato html Æ ved. lezioni successive Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Tipi di dati primitivi in JAVA Type boolean char Byte short int Contains true or false Unicode char signed integer signed integer signed integer long signed integer 0 Costanti in JAVA Default false \u0000 0 0 0 Size 1 bit 16 bits 8 bits 16 bits 32 bits Una costante è una “variabile” che ha un valore prefissato Æ si utilizza il modificatore final: Min/Max Value N.A. / N.A. \u0000 / \uFFFF -128 / 127 -32768 / 32767 -2147483648 / 2147483647 public final int NUMERO_LATI = 4 ¾altri esempi: public final int A = 24; public float PIGRECO = 3.14; public final float NUM = 1.6e-19; public int A = 0x13; Æ in esadecimale public int B = 075; Æ in ottale 64 bits -9223372036854775808 / 9223372036854775807 float IEEE 754 f.p. 0.0 32 bits +/-3.40282347E+38 / +/-1.40239846E-45 double IEEE 754 f.p. 0.0 64 bits +/-1.79769313486231570E+308 / +/-4.94065645841246544E-324 in JAVA non esistono tipi “unsigned” Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 34 Esempi di dichiarazione di variabili in JAVA int numero = 3; float cilindrata = 1990.5f ; long pos; int num = 0xf3; a cura di Pascoschi Giovanni Operatori built-in in JAVA Operatori built-in // f per specificare float = Assegnamento + * / % Somma Sottrazione Moltiplicazione Divisione Modulo (solo per tipo “int”) == != < > <= >= Relazione di uguaglianza Relazione di diversità Relazione “minore di” Relazione “maggiore di” Relazione “minore o uguale a” Relazione “maggiore o uguale a” //esadecimale tutte le escape sequences del C sono riconosciute (\n \t \’ \” \\ …) per utilizzare i codici Unicode Æ \u0061 in esadecimaleÆ codice corrispondente al carattere ISO-Latin-1 “a” perchè il byte piu’ alto è zero Telematica II – A.A. 2009-2010 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 36 Telematica II – A.A. 2009-2010 Operatori artitmetici Operatori relazionali a cura di Pascoschi Giovanni Operatori built-in in JAVA Operatori built-in in JAVA Operatori logici built-in Altri operatori di assegnamento Operatore ++ -+= -= *= /= %= 37 Esempio conta++; conta--; x+=y; x-=y; x*=y; x/=y; x%=y; Telematica II – A.A. 2009-2010 Istruzione equivalente conta = conta + 1; conta = conta - 1; x = x + y; x = x - y; x = x * y; x = x / y; x = x % y; a cura di Pascoschi Giovanni Operatore + in JAVA 38 && || ! AND logico su due variabili OR logico su due variabili NOT logico su una variabile Operatori logici & | ^ ~ >> << AND logico bit a bit OR logico bit a bit XOR bit a bit complemento a uno dell’operatore shift a destra di un certo numero di bit shift a sinistra di un certo numero di bit Operatori logici bit a bit Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Gestione dell’input/output in JAVA Java non permette di manipolare direttamente i puntatori Æ non supporta gli operatori di referenziazione e dereferenziazione *, Æ, e &, e neanche l’operatore sizeof JAVA aggiunge alcuni nuovi operatori: ¾ l’operatore + applicato a valori di tipo String li concatena. Se l’operatore + è applicato a due operandi di cui uno è di tipo String, l’altro è convertito automaticamente a stringa (dell’argomento String si parlerà nelle prossime lezioni) per l’output esiste l’oggetto System.out con il metodo println oppure print (senza andare a capo) per l’input esiste l’oggetto System.in, che pero’ viene mascherato per ottenere una migliore funzionalità (ved. lez. successive) string nome; InputStreamReader input = new inputStreamReader(System.in); BufferedReader tastiera = new BufferedReader(input); il metodo readLine try { dell’oggetto tastiera nome = tastiera.readLine( ); restituisce sempre una } stringa (stream) catch(Exception e) ( ) se si verifica un’anomalia (eccezione) non viene effettuata nessuna operazione Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni Strutture di controllo in JAVA #1 Strutture di controllo in JAVA #2 ¾ Istruzione condizionale Æ switch ¾ Istruzione condizionale Æ if switch(espressione) { case val1: istruzioni1; ........ break; case val2: istruzioni2; ........ break; default: istruzionid; ........ break; } if (condizione1) { istruzioni 1; ........ } else if (condizione2) { istruzioni 2; ........ } else { istruzioni 3; ........ } 41 43 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 42 espressione di tipo : long, int, byte, short, char Telematica II – A.A. 2009-2010 Strutture di controllo in JAVA #3 Strutture di controllo in JAVA #4 ¾ Istruzioni iterative Æ while / do....while ¾ Istruzione iterativa (enumerativa) Æ for while(espressione_booleana) { istruzioni1; ........ }; for(inizio; espressione_booleana; passo) { istruzioni1; ........ }; ------------------------------------------------------- esempio : do { istruzioni1; ........ } while (espressione_booleana); for(int i=0; i<1000; i++) { Systema.out.println(“n=“ + i); } Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 44 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni a cura di Pascoschi Giovanni Riepilogo della lezione Fine della lezione Introduzione al linguaggio JAVA Caratteristiche di JAVA Storia e versioni di JAVA Variabili in JAVA Operatori aritmetici, di relazione e logici Operazioni di I/O Strutture di controllo 45 Telematica II – A.A. 2009-2010 Domande? a cura di Pascoschi Giovanni Esercizio n.1 Esercizio n. 1 Implementare le classi, definendo come attributi due numeri interi e come metodi il calcolo dell’area e del perimetro, per le figure seguenti : Rettangolo (dove i due numeri costituiscono la base e l’altezza) Triangolo rettangolo (dove i due numeri costituiscono i due cateti) Triangolo isoscele (dove i due numeri costituiscono la base e l’altezza) 47 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni 46 Telematica II – A.A. 2009-2010 a cura di Pascoschi Giovanni