Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere ogni classe è definita in un file separato (compilabile separatamente dagli altri file). Tuttavia tutto il programma può risiedere in un unico file. Almeno una delle classi che appartengono all applicazione deve esportare un metodo main. Il programma viene eseguito chiamando l interprete/compilatore con un parametro che specifica la classe che contiene il metodo main. 2 1
Primo esempio di programma Java Semplicissimo programma che stampa la stringa Ciao. public class PrimoProgramma { public static void main(string args[]) { System.out.println("Ciao"); } } PrimoProgramma è il nome della classe (attenti alle maiuscole; Java e case-sensitive!) 3 Primo esempio di programma Java Il primo rigo del programma definisce una classe di nome PrimoProgramma public class PrimoProgramma La parola chiave public indica che la classe può essere utilizzata dalle altre classi. La parola chiave class indica la definizione del nome (PrimoProgramma) e del contenuto della classe. Il nome della classe deve corrispondere al nome del file che la contiene. In questo caso: PrimoProgramma.java 4 2
Il metodo main La semplice classe PrimoProgramma definisce un metodo essenziale per poter eseguire il programma : il metodo main. Un metodo definisce le operazioni da eseguire come una sequenza di istruzioni che eseguono uno specifico compito o calcolano un particolare risultato. Senza metodi non avremmo operazioni! Il metodo main deve essere utilizzabile da tutti e quindi deve essere dichiarato public. 5 Il metodo main La parola chiave static indica che il metodo non accede e non modifica i metodi della classe. Le parole chiave void e args[] le analizzeremo più avanti. Le parentesi {} indicano l inizio e la fine di una classe, di un metodo o di un blocco di operazioni. Le operazioni terminano con il ; 6 3
Operazioni e invocazione di un metodo Il metodo main contiene una singola operazione System.out.println("Ciao"); per visualizzare sullo schermo la parola Ciao. System indica una classe predefinita per operare sulle risorse del sistema che contiene oggetti e metodi. out è un oggetto che indica lo standard output (lo schermo). println è un metodo della classe System per scrivere sullo standard output e andare a capo (print non va a capo). 7 Invocazione di un metodo L esecuzione di un metodo si richiede nel modo seguente: oggetto.metodo(parametri); che significa esegui le operazioni definite dal metodo sull oggetto usando i parametri indicati. I parametri possono essere assenti, ma le parentesi vanno inserite comunque. Se ci sono più parametri si separano con una virgola. Nel programma si vuole stampare una stringa e quindi la si indica tra apici: Ciao, per differenziarla da un identificatore o una parola chiave. 8 4
Compilazione ed esecuzione Per eseguire questo programma che sta nel file PrimoProgramma.java usando il compilatore JDK: COMPILAZIONE: C:> javac PrimoProgramma.java ESECUZIONE: C:> java PrimoProgramma Attenti agli errori di sintassi e di semantica!! 9 Dati e variabili Nel programma che abbiamo discusso non sono state usate locazioni di memoria per conservare dei dati. Quando questo è necessario occorre definire delle variabili. Una variabile è un astrazione della cella di memoria. Formalmente, una variabile è un simbolo associato a un indirizzo fisico che denota un valore. 10 5
Dati e variabili Una variabile è un contenitore che può conservare un valore. Essa viene realizzata tramite una o più celle di memoria (variabile semplice o strutturata). Ad esempio nel caso: x 4. 1328 l indirizzo di x è 1328 e il suo valore è attualmente 4. Attenzione: il valore può cambiare nel corso dell esecuzione, l indirizzo è fissato (e non cambia durante l esecuzione). Il programmatore non ha bisogno di conoscere dove la variabile sia memorizzata (il suo indirizzo). 11 Dichiarazione di una variabile La dichiarazione di una variabile introduce una nuova variabile, identificata da un simbolo (nome), e da un tipo che definisce le caratteristiche e le operazioni che si possono effettuare sulla variabile. ESEMPI int a, b, sum; double num, cifra; char ch; ATTENZIONE: definendo la variabile, si dichiara il suo tipo e contemporaneamente si alloca il relativo spazio in memoria. 12 6
Inizializzazione di una variabile Opzionalmente, nella dichiarazione è possibile specificare un valore iniziale per una nuova variabile : ESEMPIO int a, b = 8, sum = 0; float pi = 3.14; La variabile verrà creata con il suo valore iniziale (che ovviamente potrà variare). 13 Operazione di assegnamento (=) L assegnamento è una istruzione che calcola il valore di una espressione e memorizza il valore (lo assegna) in una variabile ESEMPI: i = 1; variabile = espressione i = j + 1 ; x = x - y ; z = (2*x)-5; 14 7
Operazione di assegnamento (=) Il nuovo valore della variabile è quello denotato dall espressione posta a destra dell assegnamento. Quindi, se ad esempio il valore di k era 2: k = 10; cambia in 10 il valore di k j = k + 1; cambia in 11 il valore di j Questo nuovo valore può essere usato in altre espressioni. 15 Costanti Una costante rappresenta un dato che non può cambiare di valore nel corso dell esecuzione di un programma. La dichiarazione di una costante associa ad un identificatore (nome) un valore noto a priori. In Java le costanti i dichiarano con la parola chiave final final double pi = 3.14159; final int massimo = 10000; Il valore della costante non potrà più essere modificato nel programma, ma verrà utilizzato nelle espressioni. Ad esempio se j è una variabile intera: j = massimo - 1; 16 8
Uso di variabili - Area di un Rettangolo Programma Java che calcola l area di un rettangolo. public class AreaRettangolo { public static void main(string args[]) { int base, altezza, area; base = 8; altezza = 5; area = base * altezza; System.out.println("Area = " + area); } } 17 Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale 18 9
Lettura di dati da input In Java la lettura di dati da input non è diretta come in C. Useremo una classe non-standard per effettuare operazioni di input da tastiera. Questa classe prende il nome di Console che esporta metodi per leggere interi, reali a doppia precisione (double), stringhe e parole. 19 Lettura di dati da input classe Console Di seguito sono indicati i metodi di lettura definiti dalla classe Console Lettura di un numero intero public static int Console.readInt(String prompt) Ad esempio x = Console.readInt( Inserire un intero: ); Lettura di un numero reale public static double Console.readDouble(String s) Ad esempio r = Console.readDouble( Inserire un reale: ); 20 10
Lettura di dati da input classe Console Lettura di una stringa di caratteri che termina con newline public static String Console.readString() Ad esempio s = Console.readString(); Lettura di una stringa che termina con newline (2) public static String Console.readString(String ) Ad esempio s = Console. readstring( Inserire una stringa ); Lettura di una parola che termina con uno spazio public static String Console.readWord() Ad esempio w = Console.readWord(); 21 Commenti in programmi Java // commento fino a fine linea /* commento che può occupare più linee */ /** commento su più linee che viene estratto dallo strumento che genera automaticamente la documentazione */ 22 11
Area di un Rettangolo Programma Java che calcola l area di un rettangolo. import corejava.*; public class AreaRettangolo { public static void main(string args[]) { double base, altezza, area; base = Console.readDouble( Base= ); altezza = Console.readDouble( Alt= ); area = base * altezza; System.out.println("Area = " + area); } } 23 Tipi in Java Nei linguaggi di programmazione di alto livello le variabili e le espressioni sono caratterizzati da un tipo. Un tipo di dati (o tipo) è costituito da un insieme di valori ammissibili un insieme di operatori che possono essere applicati ai valori del tipo I tipi sono importanti perché il significato e la correttezza di molte istruzioni è legata non solo alla forma sintattica delle istruzioni, ma anche a vincoli semantici, che sono definiti tramite tipi. 24 12
Tipi primitivi in Java Tipi primitivi boolean (1 bit) valori: true o false byte (8 bit ) un intero tra 128 e +127 short (16 bit) un intero tra 32768 e +32767 float (32 bit ) un numero razionale in virgola mobile (9 cifre significative eesponente tra 45 e +38) int (32 bit) un intero di valore compreso tra 2147483648 e +2147483647 double (64 bit) un numero razionale in virgola mobile (18 cifre significative eesponente tra 324 e +308) long (64 bit) un intero di valore compreso tra 223372036854775808 e +9223372036854775807 char (16 bit) un carattere dell alfabeto Unicode 25 Conversione di tipi In Java è possibile effettuare conversione tra variabili che hanno tipi diversi ma compatibili. Conversione implicita Ad esempio int i; short s; i = s + 1; La conversione implicita di tipo si ha nei casi in cui non ci sia perdita di informazione (promozione). int i; long l; l = i + 10; 26 13
Conversione di tipi Nessuna conversione implicita di tipo nei casi in cui ci sia perdita di informazione (errore di compilazione!). Ad esempio: int vintera; double vreale = 3.14159; vintera = vreale; NO! Conversione esplicita Ad esempio vintera = (int)vreale; SI (Narrowing) La conversione esplicita è detta casting. 27 Operatori in Java Operatori aritmetici: somma (+), sottrazione (-), prodotto (*), divisione (/), resto(%), incremento(++), decremento (--), (+=, -=, *=, /=) Operatori relazionali: uguale (==), diverso (!=), maggiore (>), minore (<), minore o uguale (<=), maggiore o uguale (>=) Operatori logici: not (!), or ( ), and (&). Sequenze di escape: \b, \t, \n, \r, \, \, \\ 28 14
Istruzioni composte Oltre alle istruzioni elementari come l assegnamento, il return, ecc., il linguaggio mette a disposizione del programmatore un insieme di istruzioni composte che servono a controllare il flusso di esecuzione di un programma come le istruzioni if-else, for, while, do-while. Istruzione condizionale if-else L istruzione if-else serve per valutare il valore di una espressione logica ed eseguire le operazioni opportune. 29 Istruzione if-else if (condizione) {istruzioni1} else {istruzioni2} Il ramo else e le parentesi {} possono mancare. In questo caso si parla di istruzione if. 30 15
Istruzione if-else ESEMPI if (i >= 0) System.out.println( Valore positivo o nullo ); else System.out.println( Valore negativo ); if (x == 0) y = 10; else y = x +3*z; if (x == 0 & z > x) {y= 10; z= z-1;} 31 16