Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del web di utilizzare applicazioni sicure ed indipendenti dalla piattaforma in uso. Che cos e Java? Java e un linguaggio di programmazione orientato agli oggetti E un linguaggio multi-piattaforma Il codice compilato puo essere eseguito su qualunque piattaforma per la quale sia disponibile un Java Environment write once and run everywhere (scrivi una volta ed esegui ovunque) 1/29 2/29 A oggetti Semplice Distribuito Robusto Sicuro Caratteristiche di Java Java: linguaggio a oggetti La progettazione a oggetti si concentra sui dati e sulle relative interfacce piuttosto che sulle procedure strutturate il programma è costituito da oggetti che possiedono determinate proprietà e funzioni. Indipendente dall architettura 3/29 4/29 Java: distribuito Le applicazioni java possono essere eseguite ovunque sul network senza conoscere la piattaforma hardware e software Il formato binario ad architettura neutrale dei file class (bytecode) permette l esecuzione delle applicazioni scritte in Java su tutte le piattaforme. Java possiede un estesa libreria di routine per gestire i protocolli di comunicazione. Le applicazioni Java possono facilmente gestire oggetti ed accedere ad essi attraverso la rete. Il meccanismo di chiamata con metodi remoti consente, inoltre, la comunicazione tra oggetti distribuiti. Java: robusto Java insiste molto su: l controllo iniziale degli eventuali problemi mediante la compilazione del codice successivo controllo dinamico (run-time) eliminazione di tutte le situazioni che possono generare errori. 5/29 6/29
Java: sicuro È destinato ad ambienti di rete per cui la sicurezza è particolarmente curata. Permette di costruire applicazioni che possono difficilmente essere invase da altre applicazioni. Gestisce le politiche di accesso ai componenti della macchina e alla rete in modo rigoroso Java: indipendente dall architettura Il compilatore Java genera un formato di file indipendente dall architettura: il bytecode Il bytecode è eseguibile su ogni tipo di piattaforma hardware-software che metta a disposizione un java runtime environment (macchina virtuale Java) La macchina virtuale Java traduce istantaneamente il bytecode nel codice macchina nativo. Il bytecode è un esempio di tentativo di portabilità reale e totale. 7/29 8/29 Una classe Java Qualunque oggetto in Java deve essere definito come una classe con l identificativo class Normalmente ogni classe che costituisce il nostro programma deve essere definita in un file il cui nome sara lo stesso della classe Es. la classe Laser dovra essere definita nel file Laser.java Un programma deve essere costituito da almeno una classe che definisce il metodo main Es. Laser.java public class Laser Dichiarazione della classe int potenza; Attributi visibili e attributi nascosti private int angle; public Laser(int power) potenza = power; Costruttore angle = 0; public void orienta(int gradi) angle = gradi; Metodo public void spara() Metodo potenza-=100; System.out.println("Laser: potenza "+potenza); 9/29 10/29 Il programma minimo public class Hello public static void main(string args[]) System.out.println( Hello World! ); Sintassi case sensitive: distingue tra le lettere minuscole e quelle maiuscole Ogni istruzione deve terminare con un punto e virgola Commenti: si puo utilizzare: // commenta la riga /* commenta tutto fino a */ Regole stilistiche: Il nome della classe inizia con una lettera maiuscola Es. Laser Nomi composti da piu parole vengono evidenziati utilizzando l iniziale maiuscola per ogni sotto-parola. Es. LaserRicaricabile 11/29 12/29
Variabili Dichiarazione di variabili: tutte le variabili prima di essere utilizzate devono essere dichiarate tipo della variabile (identificativo standard) nome variabile (identificativo scelto dall utente) Inizializzazione: spesso alla variabile deve esser assegnato un valore iniziale Dichiarazione e inizializzazione possono essere fatte nella stessa istruzione ES: /* solo dichiarazione */ int x; /* inizializzazione */ x = 10; /* dichiarazione ed inizializzazione allo stesso tempo */ int y = 15; Java permette la dichiarazione e inizializzazione delle variabili in qualunque parte del codice (al momento del bisogno) Es. for(int i = 0; i < N; i++) Tipi di dati (identificativi standard) Tipo char int short long byte boolean float double Rappresentazione Carattere "corto" "lungo" byte Valore booleano Numero reale Numero reale "lungo" N. di byte 2 (16 bit) 4 (32 bit) 2 (16 bit) 8 (64 bit) 1 (8 bit) 1 (8 bit) 4 (32 bit) 8 (64 bit) Range 65.536 car. da -2147483648 a 2147483647 da -32768 A 32767 da -10 mil di mil A 10 mil di mil da -128 a 127 true o false 7 cifre decimali 15 cifre decimali 13/29 14/29 Operatori matematici Operazione Addizione Sottrazione Moltiplicazione Divisione Divisione con modulo (solo numeri interi) incremento unitario decremento unitario Simbolo + - * / % ++ -- Utilizzo degli operatori di incremento e decremento x++; /* equivale a scrivere x = x + 1; */ x--; /* equivale a scrivere x = x -1; */ Possono trovarsi in due posizioni: Post-fissi x++ Pre-fissi ++x Post-fissi: il valore viene aggiornato dopo la valutazione dell espressione in cui si trova Pre-fissi: il valore viene aggiornato prima 15/29 16/29 Forma contratta per operatori aritmetici espressione1 = espressione1 <operatore> espressione2 Operatori di confronto Simbolo Significato Utilizzo /* questa risulta equivalente alla sottostante */ espressione1 <operatore> = espressione2 ==!= uguale a diverso da a == b a!= b x = x + 3; /* diventa */ x += 3; y = y * 5; /* diventa */ Y *= 5; < > <= > minore maggiore minore o uguale maggiore o uguale a < b a > b a <= b a >= b 17/29 18/29
Operatori logici Simbolo Significato Utilizzo && AND logico a && b OR logico a b Istruzioni di scelta In Java come in linguaggio C esistono due tipi di strutture di controllo condizionale (istruzioni di scelta): if-else : permette di scegliere tra due possibili alternative switch : permette di scegliere tra n possibili alternative 19/29 20/29 Sintassi: if (espressione) istruzione1 istruzione2 oppure: if (espressione) istruzione1 else istruzione2 if - else Sintassi: switch switch (espressione) case elem_1: istruzione_1; case elem_2: istruzione_2;... case elem_n: istruzione_n; default: istruzione; 21/29 22/29 Esempio "numero variabile intera che può assumere valori maggiori od uguali a zero switch (numero) case 0: System.out.println("Nessuno"); case 1: System.out.println("Uno"); case 2: System.out.println("Due"); default: System.out.println("Valore diverso da 0, 1 o 2\n"); Strutture iterative Le strutture iterative in linguaggio C sono tre: il while, che continua il suo ciclo fino a quando l'espressione associata non risulta falsa il do-while, che agisce come il while, ma assicura l'esecuzione delle istruzioni associate almeno una volta il for, che è il costrutto più usato, versatile e potente tra i tre. 23/29 24/29
while La struttura del while è la seguente: while (condizione) Le istruzioni all'interno del while agiscono sulla condizione modificandola (altrimenti il ciclo non terminerebbe). do - while La struttura è la seguente: do while (condizione); Le istruzioni all'interno del blocco vengono eseguite almeno una volta indipendentemente dalla condizione 25/29 26/29 for La struttura è la seguente: for (inizializzazione ; condizione ; incremento) Le espressioni all'interno del for hanno diversi compiti, e sono separate da un punto e virgola: La prima viene eseguita una sola volta prima di entrare nel ciclo: inizializza la variabile di controllo del ciclo. La seconda è la condizione (che coinvolge anche la variabile di controllo), che se risulta falsa interrompe l'esecuzione del ciclo. La terza costituisce l'istruzione di incremento della variabile di controllo che viene eseguita dopo ogni ciclo del for. Esempio for (int i=0; i<=100; i++) System.out.println( Il valore di i e +i); /* la variabile i viene inizializzata all interno del costrutto for, il valore di i determina l uscita dal ciclo, l istruzione i++ incrementa la variabile di controllo ad ogni ciclo */ 27/29 28/29 L istruzione break etichettato In Java l istruzione goto non esiste. Un implementazione equivalente si puo ottenere grazie alla possibilita di etichettare una istruzione di Es: int a = 0; inizio: for(int i=0; i < N; i++) break inizio; 29/29