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