2. IL LINGUAGGIO JAVA

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "2. IL LINGUAGGIO JAVA"

Transcript

1 IL LINGUAGGIO JAVA Dispense per il corso di laboratorio di sistemi I.T.I.S. ABACUS A.S. 2008/2009 Autore: Roberto Amadini Testo di riferimento: La programmazione ad oggetti C++ Java (Lorenzi, Moriggia, Rizzi ATLAS) 2. IL LINGUAGGIO JAVA 2.1 Introduzione Java è un linguaggio di programmazione ad alto livello orientato agli oggetti. Il processo di sviluppo di Java cominciò agli inizi degli anni 90 da un gruppo di ingegneri della Sun Microsystems, mentre la sua prima apparizione ufficiale avvenne nel maggio del Le principali caratteristiche di Java sono: L orientamento agli oggetti La portabilità delle sue applicazioni La possibilità di costruire GUI (Graphical User Interface) La gestione di multithreading e networking L ORIENTAMENTO AGLI OGGETTI consiste nella presenza di costrutti che implementano concetti propri della OOP come ereditarietà, polimorfismo, incapsulamento, gestione delle eccezioni ecc Java è un linguaggio OO di tipo ibrido in quanto prevede la possibilità di gestire tipi di dato primitivi oltre agli oggetti (ad esempio int, char, float, double ecc ). Tuttavia spesso Java viene considerato come linguaggio puro in quanto gli oggetti costituiscono la struttura portante del linguaggio, mentre i tipi primitivi ne rappresentano solo una parte marginale. Di fatto questo linguaggio deriva direttamente dal C++, per cui molte caratteristiche di Java sono del tutto simili (se non addirittura identiche) al C++. Le maggiori differenze a livello di programmazione tra Java e C++ riguardano: L EREDITARIETA : In Java si utilizza solamente l ereditarietà SINGOLA (cioè una sottoclasse può avere al massimo una classe padre) mentre il C++ permette l ereditarietà MULTIPLA (una sottoclasse può derivare da più classi padre). In realtà anche Java implementa un concetto simile all ereditarietà multipla, grazie all ausilio di classi interfaccia (interfaces) opportunamente implementate (implements). La gestione della MEMORIA DINAMICA: In Java, fatta eccezione per i tipi primitivi, ogni variabile (array e oggetti) è di tipo riferimento (reference): le variabili contengono cioè un riferimento all indirizzo di memoria dove sono allocati i dati (e i metodi) contenuti dalle variabili. Al contrario del C++, non è possibile utilizzare esplicitamente i puntatori per manipolare l allocazione e la de-allocazione dinamica di oggetti in memoria; in particolare la de-allocazione è gestita in modo automatico dal sistema di run-time mediante un apposito strumento chiamato garbage collector (letteralmente raccoglitore di rifiuti, si occupa di ripulire la memoria).

2 La forte TIPIZZAZIONE: In Java le conversioni di tipo (cast) devono essere tutte esplicitate (al contrario il C++ permette in taluni casi conversioni non esplicitate). Fanno eccezione le promozioni di tipo (conversioni senza perdita di dati, ad esempio da int a float). La PORTABILITA è una proprietà fondamentale di Java; essa consiste nella capacità di poter eseguire codice Java su qualsiasi piattaforma in modo indipendente dall hardware e dal sistema operativo sul quale il programma è in esecuzione. La portabilità in Java è realizzata con un sistema misto di compilazione/interpretazione: Il codice sorgente (estensione.java) viene compilato dal compilatore di java (comando javac) che trasforma il codice sorgente in un apposito codice detto BYTECODE (estensione.class) Il bytecode non può essere eseguito da una macchina reale ma solamente da una macchina virtuale: la JAVA VIRTUAL MACHINE (JVM). La JVM è uno strato software che si pone sopra la macchina fisica dove è in esecuzione il file; il suo compito consiste nel permettere l esecuzione del bytecode anche sulla macchina fisica interpretando ogni sua riga, cioè traducendo il bytecode (comprensibile solo dalla JVM) in codice macchina eseguibile sulla particolare macchina fisica (comando java). In questo modo, posso eseguire un file.class di java su qualsiasi piattaforma senza bisogno di dover modificare e/o ricompilare il codice sorgente: la JVM della particolare macchina fisica si occuperà del processo di interpretazione. CODICE SORGENTE COMPILAZIONE BYTECODE INTERPRETAZIONE JVM MACCHINA FISICA MioFile.java javac MioFile.Java MioFile.class java MioFile Eseguo MioFile Questa soluzione tuttavia è poco efficiente, in quanto l interpretazione ha tempi decisamente maggiori rispetto alla compilazione. Per questo motivo, tutte le implementazioni recenti di JVM hanno incorporato un compilatore just-in-time (JIT compiler), cioè un compilatore interno, che al momento del lancio traduce al volo il programma bytecode Java in un normale programma nel linguaggio macchina del computer ospite (cioè anziché compilare il sorgente ed interpretare il corrispondente bytecode, di fatto compilo il sorgente e poi grazie al JIT ri-compilo il corrispondente byte code). Questi accorgimenti, a prezzo di una piccola attesa in fase di lancio del programma, permettono di avere delle applicazioni Java decisamente più veloci e leggere. Tuttavia, anche così Java resta un linguaggio meno efficiente dei linguaggi compilati come il C++, scontando il fatto di possedere degli strati di astrazione in più (la JVM) e di implementare una serie di automatismi, come il garbage collector, che se da un lato fanno risparmiare tempo ed errori in fase di sviluppo dei programmi, dall'altro sprecano spazio di memoria e tempo di CPU in fase di esecuzione del programma.

3 Per poter programmare ed eseguire codice Java gli strumenti necessari sono: Un EDITOR di testo per scrivere il codice (ad es. Blocco note, emacs ) Un COMPILATORE (javac) ed un INTERPRETE java (java). Tali strumenti fanno parte del JDK (Java Development Kit), che comprende inoltre altre funzionalità per lo sviluppo di codice java (ad es., strumenti per la documentazione automatica del codice). Ad ogni JDK si associa quindi una JVM per la traduzione del bytecode e un JRE (Java Run-Time Environment) che permette l esecuzione effettiva delle applicazioni Java sulla macchina fisica. Esistono tuttavia AMBIENTI INTEGRATI (IDE, Integrated Development Environment) che integrano Editor, JDK, JVM e JRE. Tra i più diffusi attualmente citiamo NetBeans ed Eclipse. 2.2 La struttura di un programma Java In Java, a differenza del C++, un applicazione può essere costituita da una o più classi. Tra tutte le classi che compongono un applicazione Java, una si differenzia dalle altre perché: Ha lo stesso nome del file sorgente che contiene la classe Contiene lo speciale metodo main. Questo metodo è fondamentale perché l esecuzione dell applicazione Java comincia a partire da questo metodo. Vediamo quindi lo scheletro di un generico programma prova.java costituito da una sola classe: /* Importo le librerie (package) necessarie */ import Package_1;... import Package_n; /* Classe principale, contiene il main e deve avere lo stesso nome del file sorgente. */ class prova { /* Metodo principale, necessario per l esecuzione */ public static void main(string args[]) { // dichiarazione variabili // istruzioni del programma } // fine main } // fine classe nomefile

4 I package Java I package di Java sono insiemi di classi che forniscono servizi simili. Ogni utente può creare un proprio package oppure importare un package pre-esistente. I package di base di java (J2SE 6.0) sono: java.lang funzionalità di base del linguaggio e tipi di dato fondamentali java.util classi di collezione (strutture dati quali Vector, Stack, List, ecc ) java.io, java.nio operazioni si input/output java.math operazioni aritmetiche in multi precisione java.net operazioni di networking java.security gestione di sicurezza e crittografia java.sql operazioni su basi di dati java.awt, java.swing gestione di interfaccie GUI Per importare un package predefinito si usa l istruzione import nomepackage; in questo modo sarà possibile utilizzare tutte le funzionalità del package specificato. Di fatto quest istruzione corrisponde alla direttiva di pre-processing #include che è possibile utilizzare in C++ per includere librerie o file esterni al sorgente. 2.3 Il metodo main Come per il C++, il metodo main è fondamentale per il programma, in quanto da esso parte l esecuzione del codice. A differenza del C++, nel quale il main è una funzione, in Java il main è un metodo: in sostanza è una funzione propria della classe che lo contiene (nel nostro esempio la classe prova, che deve necessariamente avere lo stesso nome del sorgente in cui è contenuta: prova.java). In Java infatti non esistono funzioni (al contrario del C++, essendo tale linguaggio fortemente legato al linguaggio procedurale C) ma solamente metodi: ogni funzione quindi deve appartenere ad una certa classe. Per questo motivo Java viene spesso considerato linguaggio object-oriented puro. Nell esempio inoltre il metodo main è preceduto da tre parole-chiave: public indica che il metodo è pubblico, cioè visibile ed accessibile da chiunque. static indica che il metodo è statico, cioè associato alla classe in cui è contenuto (prova) e non ad oggetti della classe. Per ora ci basti sapere solo questo void indica che non ritorna nulla (esattamente come in C++) Inoltre, il main possiede anche un parametro: String args[] Come si può intuire, tale parametro è un array di stringhe, che corrisponde ai parametri passati da riga di comando quando l applicazione viene lanciata. Basandoci su quanto appena visto, scriviamo ora il nostro primo programma in Java:

5 /* Questo semplice programma legge una stringa da riga di comando e la stampa a video. Non importo nessuna libreria, in quanto il programma non lo richiede (non utilizzo costrutti particolari) */ class primoprog { public static void main(string args[]) { String stringaletta = args[0]; System.out.println( Hai inserito la stringa: + stringaletta); } // fine main } // fine classe primoprog Innanzitutto si noti che la sintassi e la semantica dei commenti ( /* */ e // ) è identica al C++. Inoltre è importante sottolineare che come il C++ anche Java è case-sensitive: non è indifferente utilizzare le maiuscole anziché le minuscole e viceversa. Il sorgente java si chiamerà primoprog.java (stesso nome della classe contenente il main). Il nostro programma per prima cosa dichiara una variabile di tipo String (stringa di caratteri, cfr. tipo string in C++) di nome stringaletta che inizializza con il valore di args[0]. Cosa significa? In pratica, quando l utente da riga di comando esegue il programma, può aggiungere uno o più parametri di tipo stringa che vengono automaticamente inseriti nell array args. Quindi, all interno del main è possibile estrarre tali parametri; nel nostro esempio estraggo il valore di args[0](che corrisponderà al primo parametro inserito) e lo inserisco nella variabile stringaletta. Dopodiché, stampo a video un messaggio contenente il valore di stringaletta. Per fare ciò utilizzo il metodo println della classe System.out che permette di stampare su standard output (il video) tale messaggio. Ciò è l equivalente del cout in C++; si noti tuttavia il mancato utilizzo dell operatore <<: la concatenazione delle stringhe Hai inserito la stringa: e stringaletta avviene mediante l operatore +. Vediamo ora come è possibile eseguire il nostro primo programma primoprog.java Per scrivere il programma è sufficiente un qualsiasi editor di testo (ad es. Blocco note); ovviamente bisogna ricordarsi di salvare il file con l estensione.java Una volta scritto, il programma va compilato: apriamo quindi il prompt dei comandi di MS-DOS e, dopo esserci posizionati nella cartella dove è presente il file primoprog.java, digitiamo: javac primoprog.java A questo punto, se non ci sono errori, viene generato il bytecode del sorgente: primoprog.class Ora per eseguire il programma è sufficiente richiamare l interprete Java che trasforma il bytecode in linguaggio macchina: java primoprog

6 Il programma verrà quindi eseguito, stampando a video il messaggio: Hai inserito la stringa: Perché? Semplicemente perché non abbiamo inserito alcun parametro da riga di comando! Se invece provassimo a digitare (senza dover ricompilare!) java primoprog Ciao!!! Allora l output del programma sarà: Hai inserito la stringa: Ciao!!! In questo caso infatti args[0]conterrà la stringa Ciao!!! E se invece scrivessimo da riga di comando: java primoprog Ciao mondo!!! In questo caso l output sarà: Hai inserito la stringa: Ciao Questo perché i parametri passati da riga di comando sono due: Ciao e mondo!!! Tali parametri verranno quindi inseriti rispettivamente in args[0] e args[1], ma siccome il programma stampa solamente il primo parametro (Ciao), il secondo (mondo!!!) viene ignorato. 2.3 Gli identificatori Gli identificatori sono nomi (sequenze di lettere e numeri) che possono essere attribuiti a variabili, metodi, classi ed oggetti. Come per il C++ non tutti gli identificatori sono formalmente corretti: esistono delle regole ben precise (ad es. devono cominciare con una lettera, non possono contenere caratteri speciali, devono avere una lunghezza massima, ecc ). In particolare, un identificatore non può chiamarsi come una parola-chiave di Java, in quanto tali parole sono riservate per particolari scopi. Le parole-chiave di Java sono ad oggi (J2SE 6.0) cinquanta: abstract continue for new switch assert default goto package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while Le celle evidenziate sono parole chiave anche del C++.

7 2.4 Variabili, costanti e tipi di dato La sintassi e la semantica delle variabili è molto simile al C++; una variabile è caratterizzata da un nome, un tipo, un valore e dalla sua visibilità (scope). Ad esempio: int num; float altezza = 1.68; boolean x = true; //equivalente al tipo bool in C++ byte temperatura; //intero a 8 byte (può contenere valori da -128 a 127) Come nel C++ esistono regole di scope per le variabili. In sintesi una variabile è visibile all interno del blocco in cui è dichiarata ed invisibile all esterno del blocco; inoltre a differenza del C++ non è possibile dichiarare variabili con lo stesso nome all interno di blocchi annidati, cioè non è possibile avere una situazione di questo tipo: { int x;... { int x; //ri-dichiarazione di x: NON PERMESSO IN JAVA!... } //blocco interno } //blocco esterno Una costante è una variabile che deve assumere sempre lo stesso valore per tutta la durata del programma; in Java anziché la parola chiave const si utilizza final, ad esempio: final double PI_GRECO = 3.14; Tipicamente in Java le variabili sono scritte sempre in minuscolo, mentre la maiuscola viene usata al posto dello spazio (ad es. numeropersone, minimocomunemultiplo, valoreassoluto). Al contrario, le costanti sono scritte in maiuscolo, mentre al posto dello spazio si usa il carattere di underscore (ad es. TEMP_MAX, NUM_DI_NEPERO, ALIQUOTA_IVA). I tipi di dato in Java si suddividono in: tipi primitivi: byte, short, int, long, float, double, char, boolean. tipi riferimento: sono gli array e le classi, ce ne occuperemo più avanti. I tipi primitivi sono gli stessi del C++ a differenza di boolean e byte; in Java tuttavia non esistono i numeri unsigned (cioè senza segno, sempre positivi). La differenza fondamentale col C++ sta nella forte tipizzazione di Java: le conversioni (cast) tra tipi diversi devono essere quasi sempre esplicitate (fanno eccezione per le promozioni di tipo, cioè conversioni senza perdita di dati, ad es. int float, byte double ecc ):

8 float pigreco = 3.14; int pg = pigreco; //errore di compilazione! Le precedenti istruzioni generano un errore a tempo di compilazione in quanto sto convertendo una variabile float in una variabile int (ho una perdita di dati, perciò non ho una promozione) senza avere esplicitato il cast. La versione corretta dell assegnamento è quindi: float pigreco = 3.14; int pg = (int) pigreco; //converto pigreco nell intero pg: pg = Operatori logici e matematici Anche in questo caso la sintassi e la semantica è molto simile al C++; gli operatori utilizzati da Java sono: = > <! ~?: == <= >=!= && ++ + * / & ^ % << >> >>> += = *= /= &= = ^= %= <<= >>= >>>= Le celle evidenziate sono quelle di maggior interesse per i nostri scopi Vale la pena ricordare che gli operatori non evidenziati in tabella servono per operazioni bit-a-bit (bit-wise) tra numeri binari. Ad esempio, << e >> in Java non servono per l input/output ma per shiftare bit a sinistra e a destra; ~ calcola il complemento ad uno, ^ l or esclusivo (XOR). 2.6 La gestione dell input/output Abbiamo già visto nel programma precedente un esempio di scrittura in output: System.out.println( Hai inserito la stringa: + stringaletta); System.out è un oggetto associato allo standard output (video); viene quindi richiamato il metodo println di tale classe per poter stampare il parametro contenuto tra parentesi (due stringhe di testo concatenate in questo caso)e poi andare a capo. Tale parametro può essere tuttavia anche un numero intero o reale, un carattere o un booleano. L oggetto System.out possiede inoltre altri metodi; ad esempio il metodo print(x) stampa il valore di x senza poi andare a capo. Analogamente a System.out esistono gli oggetti System.err (associato allo standard error, il video) e System.in (associato allo standard input, tastiera). Tuttavia l utilizzo diretto di quest ultimo non è conveniente; si preferisce quindi combinarlo con oggetti più potenti quali InputStreamReader e BufferedReader nel seguente modo:

9 InputStreamReader input = new InputStreamReader(System.in); BufferedReader tastiera = new BufferedReader(input); Con queste istruzioni definisco prima un oggetto input di classe inizializzato con System.in; quindi creo un altro oggetto tastiera di classe BufferedReader inizializzato con input. Questo mi serve per sfruttare al meglio le potenzialità della classe BufferedReader ; ad esempio il metodo readline() di tale classe permette di leggere da standard input una riga per volta. Attenzione! Il metodo readline() accetta solo stringhe: se si vogliono acquisire altri tipi di dato, occorre fare il casting. Inoltre, tale metodo deve poter gestire eventuali eccezioni. Un eccezione è una situazione anomala che si verifica durante l esecuzione del programma, come ad esempio una divisione per zero. La gestione delle eccezioni verrà ripreso più avanti; per ora ci basti sapere che la lettura di un dato da tastiera deve avvenite all interno di un apposito blocco try-catch. Vediamo un esempio: InputStreamReader input = new InputStreamReader(System.in); BufferedReader tastiera = new BufferedReader(input); String nome; System.out.println( Come ti chiami? ); try { nome = tastiera.readline(); } catch(exception e) {} In questo caso il programma chiede semplicemente all utente il proprio nome da standard input e lo legge nella variabile tastiera. L istruzione di lettura readline deve sempre essere compresa in un blocco try seguito da un blocco catch (anche vuoto, come in questo caso). Esempio: Scrivere un programma Java che chieda all utente il proprio anno di nascita e, successivamente, gli comunichi se è nato in un anno bisestile oppure no.

10 /* Questo programma chiede all utente il proprio anno di nascita e, successivamente, gli comunica se è nato in un anno bisestile oppure no. */ class esbisestile { public static void main(string args[]) { InputStreamReader input = new InputStreamReader(System.in); BufferedReader tastiera = new BufferedReader(input); String annostr; int annoint; System.out.println( In quale anno sei nato? ); try { annostr = tastiera.readline(); annoint = Integer.valueOf(annoStr).intValue(); //cast } catch(exception e) { System.out.println( Si è verificata un eccezione! ); } if(annoint % 4 == 0) System.out.println( Sei nato in un anno bisestile! ); else System.out.println( Non sei nato in un anno bisestile! ); } // fine main } // fine classe esbisestile Questo programma legge l anno inserito da utente nella variabile annostr. Tuttavia, come detto, l input da tastiera è sempre una sequenza di caratteri, per cui è necessario convertire annostr in un intero per poi poter valutare se si tratta di un anno bisestile oppure no. Ciò è effettuato con l istruzione: annoint = Integer.valueOf(annoStr).intValue(); Questa espressione converte il valore di annostr in un intero che poi assegna alla variabile annoint. Si tratta di due metodi della classe Integer: valueof e intvalue. Al momento non ci interessa sapere nel dettaglio come viene effettuata la conversione; si ricordi solamente che ciò permette il casting. Ad esempio le istruzioni: float annof = Float.valueOf(annoStr).floatValue(); double annod = Double.valueOf(annoStr).doubleValue(); avrebbero permesso di convertire annostr in variabili di tipo float e double rispettivamente. Infine, si può notare come nella gestione delle eccezioni il blocco catch non sia vuoto: ciò significa che, nel caso in cui si verifichi un eccezione, viene stampato a video il messaggio Si è verificata un eccezione!. Ad esempio, in questo caso vi è eccezione se il valore inserito da utente non è un numero intero (ad es ) oppure se inserisco una stringa di testo (ad es. MCMLXXXIV)

11 2.7 Le strutture di controllo Le strutture di controllo in Java sono pressoché identiche al C++. Nell esempio precedente abbiamo visto l utilizzo della struttura di selezione singola (if-else); allo stesso modo del C++ è possibile utilizzare la selezione multipla attraverso il costrutto switch-case. Per valutare la condizione in una struttura di selezione si utilizzano gli operatori logici (!,, &&) e matematici (<, <=, >, >=, ==,!=, %) esattamente come in C++. Tra le funzioni matematiche di uso comune fa invece eccezione la generazione di numeri (pseudo)casuali: anziché utilizzare srand e rand, uso il metodo random() della classe Math: double x = Math.random(); double y = Math.random() * 10; int n = (int) ( Math.random() * 5 ); int m = (int) ( Math.random() * ); Math.random() restituisce un numero casuale di tipo double tra 0.0 e 1.0 (ad es ). Nell esempio precedente quindi x sarà un numero reale tra 0 e 1 mentre y sarà un numero reale compreso tra 0 e 10 (moltiplico il numero estratto per 10). Ovviamente è anche possibile arrotondare (o meglio troncare in questo caso) il numero estratto per ottenere numeri interi; nell esempio precedente n sarà un intero compreso tra 0 e 5 mentre m sarà compreso tra 6 e 10. Le strutture di ripetizione (cicli) non si differenziano dal C++, in particolare hanno la stessa sintassi e semantica i cicli do-while, while e for. Inoltre, come per il C++, è possibile modificare l ordine di esecuzione dei cicli attraverso particolari istruzioni: break e continue. L istruzione break forza l uscita da un ciclo: se viene eseguita, l esecuzione riprende dalla prima istruzione presente dopo il ciclo (cfr. struttura switch-case). L istruzione continue invece forza il ritorno all inizio del ciclo: se viene eseguita, l esecuzione riprende dalla prima istruzione del ciclo (nel caso di for e while prima però valuto la condizione) Nel malaugurato caso che si venga a creare un loop infinito, in Java è possibile bloccare l esecuzione del programma premendo simultaneamente i tasti Ctrl + C. Esempio: Modo altamente masochista per visualizzare il valore di π approssimato a 5 cifre decimali. int k = 0; double d, pi = 1; while( true ) { d = (double) 2*k + 1; if( k % 2 == 0 ) pi += 1/d; else pi -= 1/d; k++; if( k == ) break; } System.out.println( 4 * pi ); //System.out.prinln(Math.PI)...

12 Esercizi Implementare in codice Java i seguenti esercizi: 1. Scrivere un programma che stampi a video l area di un triangolo data la base e l altezza. 2. Inserita da utente una data (a partire dal 01/01/1900), verificare se è corretta o no. 3. Visualizzare sullo schermo 10 numeri casuali compresi tra due interi a e b letti da tastiera. 4. Inserire una sequenza di numeri terminata da 0. Al termine dell inserimento visualizzare il massimo, il minimo e la media dei numeri inseriti 0 escluso. 5. Inserire da utente il nome, il cognome e l età di 5 ragazzi. Al termine dell inserimento stampare nome e cognome del ragazzo più giovane e il numero di ragazzi il cui cognome comincia con una vocale. 2.8 Gli array Un array è una collezione finita di elementi omogenei (stesso tipo). Gli array monodimensionali spesso prendono il nome di vettori, mentre quelli bidimensionali prendono il nome di matrici. Un array è realizzato mediante un puntatore che punta all'area di memoria dove si trovano i suoi elementi; ciò significa che se dichiaro un array di nome V, la variabile V non conterrà il valore dei suoi elementi ma l'indirizzo di memoria del suo primo elemento. Tuttavia, come già sottolineato, Java non permette l'utilizzo esplicito di puntatori (gestione automatica della memoria) che quindi vengono mascherati (hiding) dal linguaggio. Nonostante ciò è importante notare che un array non è un tipo primitivo, bensì un tipo reference: ciò significa che una variabile di tipo array non contiene un valore ma un riferimento ai valori contenuti nell'array (indirizzo di memoria del suo primo elemento). Per poter creare ed utilizzare un array si devono seguire tre passaggi fondamentali: DICHIARAZIONE ALLOCAZIONE INIZIALIZZAZIONE La dichiarazione consiste nella specificazione del nome dell'array e del tipo di dati che esso contiene. Un array può contenere sia tipi primitivi (ad es. int, double, ecc...) che tipi riferimento (classi oppure array stessi). La sintassi è la seguente: tipoelementi nomearray[]; Ad es. int voti[]; //oppure int[] voti; String nomi[]; //oppure String[] nomi;

13 Come si può notare, l'operatore [ ] può essere inserito equivalentemente sia dopo il nome che dopo il tipo. Si noti inoltre che al momento della dichiarazione non viene specificata la dimensione dell'array. L'istruzione di dichiarazione infatti crea una variabile di tipo array ma ad esso non associa nessun valore; la variabile array conterrà quindi il valore speciale null: ciò significa che la variabile di tipo riferimento che non si riferisce proprio a nulla. L'allocazione di un array consente di specificare la dimensione dell'array, cioè di allocare la quantità di memoria necessaria per contenere gli elementi dell'array specificato. La sintassi è la seguente: nomearray = new tipoelementi[dimensione]; Ad es. voti = new int[10]; nomi = new String[15]; Come si può notare l'allocazione viene eseguita attraverso l'operatore new. Una eseguita l'allocazione l'array non conterrà più il valore null ma l'indirizzo di memoria del primo elemento dell'array, mentre i successivi saranno memorizzati nelle celle adiacenti. Spesso comunque le operazioni di dichiarazione ed allocazione vengono effettuate contemporaneamente nella stessa istruzione: tipoelementi nomearray[] = new tipoelementi[dimensione] Ad es. int voti[] = new int[10]; String nomi[] = new String[15]; L'inizializzazione permette di inserire valori iniziali nell'array; è possibile assegnare immediatamente valori all'array al momento della dichiarazione nel seuente modo: tipoelementi nomearray[ ] = {valore1, valore2,..., valoren} Ad es. int voti[] = {4,5,6,5,7,6}; String nomi[] = { Tizio, Caio, Sempronio }; In questo modo, dichiarazione, allocazione e inizializzazione vengono fatte contemporaneamente. Tuttavia spesso l'inizializzazione viene eseguita in un momento successivo alla dichiarazione; in questo caso è necessario potersi riferire ai singoli elementi dell'array attraverso l'utilizzo di identificatori univoci: gli indici. Il primo elemento dell'array ha indice 0 Il secondo elemento dell'array ha indice 1... L'elemento n-esimo dell'array ha indice n 1

14 Un errore comune è l'utilizzo di indici che escono dai limiti dell'array: se l'array ha dimensione n, posso usare solamente indici compresi tra 0 ed n 1. Se invece utilizzo un indice i < 0 oppure i > n 1 verrà generata l'apposita eccezione ArrayIndexOutOfBoundsException. Per accedere in lettura o in scrittura all'elemento di indice i si utilizza l'operatore []: /* leggo l'elemento di indice i e lo assegno ad elem */ tipoelementi elem = nomearray[i]; /* assegno all'elemento di indice j il valore di elem */ nomearray[j] = elem; Ad es. int voti[] = new int[10]; voti[0] = 4; voti[1] = 5; int x = voti[0]; x += voti[1]; String nomi[] = new String[15]; nomi[0] = Tizio ; nomi[1] = Caio ; nomi[2] = Sempronio ; String s = nomi[0] + nomi[2]; s += nomi[1]; Un importante proprietà dell'array è l'attributo length che ne ritorna la dimensione; ad es. double temperature = new double[30]; int dim = temperature.length; //n assumerà il valore 30 Questa proprietà risulta molto utile quando si utilizzano cicli per iterare su tutti gli elementi dell'array; si veda ad esempio il seguente ciclo for: for(int i = 0; i < voti.lentgh; i++) { voti[i] = (int) ( Math.random()*9 + 1 ); System.out.println( voti[i] ); } Il ciclo scorre tutti gli elementi del vettore, assegnando ad ogni elemento un numero casuale intero tra 1 e 10 che successivamente stampa a video.

15 Esempio: /* Programma che stampa a video tutti i parametri inseriti dall'utente da riga di comando */ class parametri { public static void main(string args[]) { if(args.length == 0) System.out.println( Nessuno parametro inserito ); else { System.out.println( Hai inserito i seguenti parametri: ); for(int i=0; i < args.lenth; i++) System.out.println(args[i]); } //fine else } //fine main } //fine classe Questo programma estrae dal vettore args tutti gli argomenti passati da riga di comando (se ce ne sono) e li stampa a video. Dopo aver compilato (javac parametri.java) posso quindi eseguire il file da riga di comando; ad esempio il comando: java parametri Ciao Mondo!!! STOP produrrà il seguente output: Hai inserito i seguenti parametri: Ciao Mondo!!! STOP

16 Analogamente al C++, è inoltre possibile anche definire array bidimensionali: le cosiddette matrici. Dichiarazione: tipoelementi nomematrice[][]; Allocazione: nomematrice = new tipoelementi[numrighe][numcolonne]; Dichiarazione + Allocazione: tipoelementi nomematrice = new tipoelementi[numrighe][numcolonne]; Accesso: /* leggo l'elemento di indice di riga i e indice di colonna j e lo assegno ad elem */ tipoelementi elem = nomematrice[i][j]; /* assegno all'elemento di indice di riga i e indice di colonna j il valore di elem */ nomematrice[i][j] = elem; Esempio: /* Programma che carica una matrice 4x5 con valori interi casuali tra 0 e 5 e la stampa a video. */ class matrice { public static void main(string args[]) { int mat[] = new int[4][5]; for(int i = 0; i < 4; i++) { for(int j = 0; j < 5; j++) { mat[i][j] = Math.random() * 5; System.out.print(mat[i][j]+ ); } //fine for colonne System.out.println(); //vado a capo di una riga } //fine for righe } //fine main } //fine classe

17 Esercizi Implementare in codice Java i seguenti esercizi. Per ogni esercizio si raccomanda di stampare a video i vettori utilizzati nel formato [elem_1, elem_2,, elem_n] 1. Chiedere un numero n 0 da tastiera ed inserire in un vettore i primi n quadrati (1, 2, 4, 9, 16, 25,,n 2 ). Quindi, calcolare e visualizzare la somma, il prodotto e la media degli elementi del vettore. 2. Caricare in modo casuale due vettori di double x e y di uguale dimensione n (dove n è chiesto da utente). Quindi calcolare il prodotto scalare tra x ed y, cioè la somma dei prodotti di tutti gli elementi di indice uguale ( es. x = [1, 0, 2] e y = [2.3, 3.7, 3] 1* * *3 = 8.3 ). 3. Caricare in un vettore di 10 elementi una serie di stringhe inserite da utente; l inserimento termina quando inserisco la stringa STOP (che non va inserita nel vettore) oppure il vettore è pieno (cioè, ho già inserito 10 stringhe ). Al termine dell inserimento, stampare a video (uno sotto all altra) solo le stringhe del vettore che hanno lunghezza maggiore o uguale a Caricare in un primo vettore di 5 elementi numeri casuali interi tra 1 e 10, corrispondenti alla combinazione vincente di un gratta e vinci. Quindi leggere da tastiera 5 numeri tra 1 e 10 e inserirli in un secondo vettore, corrispondente alla vostra giocata. Infine, controllate e stampate a video quante sono le corrispondenze (cioè, stesso numero nella stessa posizione) tra la combinazione vincente e la vostra giocata. 5. Caricare un vettore vett con n numeri casuali tra 0 e 10 (n è un intero chiesto da tastiera). Visualizzare quindi: l elemento più piccolo contenuto in vett. l elemento più grande contenuto in vett. l indice del primo elemento pari di vett (se non ci sono numeri pari devo visualizzare -1). 2.9 Le eccezioni Come già accennato, un eccezione è un anomalia che si presenta durante l esecuzione del programma. Esempi classici di situazione anomala sono la divisione per zero oppure l utilizzo di un indice che esce dai limiti di un array. Come visto per la lettura di input da utente, la gestione delle eccezioni è possibile mediante l utilizzo del costrutto try-catch: try { //istruzioni da controllare (potenzialmente pericolose ) } catch(exception e) { //operazioni da eseguire se si verifica un eccezione }

18 Quando si verifica un eccezione, l esecuzione del programma si interrompe per cercare di gestirla. Se tale eccezione si verifica all interno di un blocco try, allora l esecuzione riprende a partire dalla prima istruzione di tale blocco catch. Viceversa, il programma termina segnalando un errore. Esempio: /* Questo programma genera un indice intero casuale tra 0 e 10. Successivamente carica un vettore di double di 5 elementi con numeri casuali tra 0 ed 1. Quindi prova ad accedere all elemento di indice i del vettore: se è possibile lo stampa, altrimenti gestisce l eccezione stampando a video un messaggio di errore. */ class eccezione { public static void main (String args[]) { int i = (int)(math.random()*10); double vett[] = new double[5]; for(int i = 0; i < 5; i++) vett[i] = Math.random(); try { System.out.println("indice: " + i + " elemento: " + vett[i]); } //fine try catch(exception e) { System.out.println("Si è verificata un eccezione! Impossibile accedere all'elemento di indice " + i ); } //fine catch System.out.println("Fine del programma. Bye!" ); } //fine main } //fine classe E importante notare che: Se 0 i 4, il programma non esegue il blocco catch (non c è eccezione) e viene stampato il valore di vett[i] Se invece i > 4, il programma esegue il blocco catch (ho eccezione: esco dai limiti dell array) e stampo un messaggio di errore. In entrambi i casi comunque il programma termina normalmente; viceversa se non avessi avuto un blocco try-catch in caso di eccezione il programma sarebbe terminato immediatamente segnalando un errore.

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti 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

Dettagli

Programmare in Java. Olga Scotti

Programmare in Java. Olga Scotti Programmare in Java Olga Scotti Linguaggi di programmazione linguaggio macchina assembler linguaggi ad alto livello Linguaggi ad alto livello istruzioni comprensibili linguaggio simile a quello naturale

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

3. La sintassi di Java

3. La sintassi di Java pag.9 3. La sintassi di Java 3.1 I tipi di dati statici In Java, come in Pascal, esistono tipi di dati statici predefiniti e sono i seguenti: byte 8 bit da -128 a 127 short 16 bit coincide con l integer

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Programmazione in Java Parte I: Fondamenti

Programmazione in Java Parte I: Fondamenti Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

Alcune regole di base per scrivere un programma in linguaggio C

Alcune regole di base per scrivere un programma in linguaggio C Alcune regole di base per scrivere un programma in linguaggio C Un programma il linguaggio C (listato) viene scritto in formato testo ed archiviato in un file: *.c Per scrivere un listato C si utilizza

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++ ISTITUTO TECNICO INDUSTRIALE STATALE G A L I L E O F E R R A R I S DIISPENSA DII IINFORMATIICA E SIISTEMII AUTOMATIICII LA GESTIONE DEI FILE DI TESTO IN C++ Le classi per la gestione dei file. Il C++ è

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Le command line di Java

Le command line di Java Le command line di Java Esercitazioni di Programmazione 2 Novella Brugnolli brugnoll@science.unitn.it Ambiente di lavoro Per compilare ed eseguire un programma Java abbiamo bisogno di: The JavaTM 2 Platform,

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD Introduzione alla programmazione Java Dott. Ing. M. Banci, PhD Obiettivi del corso Creare, compilare, e eseguire programmi Java Tipi di dato primitivi Flusso di controllo Java Metodi Arrays Introduzione

Dettagli

4. Un ambiente di sviluppo per Java

4. Un ambiente di sviluppo per Java pag.15 4. Un ambiente di sviluppo per Java Esistono in commercio molti ambienti di sviluppo utilizzati dai programmatori Java, in particolare si tratta di editor complessi che mettono a disposizione tools

Dettagli

Scrivere un programma in Java

Scrivere un programma in Java Programmare in JAVA Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA uff. 0577 234850 - interno: 7102 Stanza 119 rigutini@dii.unisi.it http://www.dii.unisi.it/~rigutini/

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Strumenti per la programmazione

Strumenti per la programmazione Editing del programma Il programma deve essere memorizzato in uno o più files di testo editing codice sorgente 25 Traduzione del programma Compilazione: è la traduzione effettuata da un compilatore Un

Dettagli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dell ambiente di sviluppo, compilazione ed esecuzione 1 Introduzione Java è un linguaggio

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1 arrays un array (o vettore) è una sequenza di oggetti dello stesso

Dettagli

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione basata sul campo d utilizzo. I principali package sono:

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Installazione SOFTWARE JDK ECLIPSE 03/03/2011 2 ALGORITMI E PROGRAMMI PROBLEMA ALGORITMO PROGRAMMA metodo risolutivo linguaggio di

Dettagli

Eclipse. Avviare un progetto e compilare un semplice programma

Eclipse. Avviare un progetto e compilare un semplice programma Eclipse Avviare un progetto e compilare un semplice programma Descrizione di Eclipse Eclipse è un ambiente di sviluppo che facilita la scrittura ed il debug di programmi java Permette di: Scrivere il codice

Dettagli

SOMMARIO INTRODUZIONE...XV CAPITOLO 1: PRESENTAZIONE...1 CAPITOLO 2: FONDAMENTI DI JAVA...39

SOMMARIO INTRODUZIONE...XV CAPITOLO 1: PRESENTAZIONE...1 CAPITOLO 2: FONDAMENTI DI JAVA...39 sommario 24-06-2004 10:18 Pagina V SOMMARIO INTRODUZIONE.......................................XV CAPITOLO 1: PRESENTAZIONE.......................................1 1.1 Introduzione...2 1.2 L organizzazione

Dettagli

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008 Se devo memorizzare più valori che sono in qualche modo parenti dal punto di vista logico, posso usare il concetto di vettore di variabili (array). Ad esempio, se devo memorizzare le temperature di tutti

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi formativi Introdurre i principi del funzionamento di un elaboratore e della programmazione. Presentare gli approcci elementari alla soluzione di problemi (algoritmi)e al progetto di strutture

Dettagli

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Soluzioni delle prove al calcolatore Esercizio 7 (esame del 08/01/2009) class TabellaDiNumeri{ private double[][] tabella;

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

Codifica: dal diagramma a blocchi al linguaggio C++ Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU

Dettagli

Unità B3 Strutture di controllo

Unità B3 Strutture di controllo (A) CONOSCENZA TERMINOLOGICA Dare una breve descrizione dei termini introdotti: I/O su console Package Blocco di controllo Oggetto System.out Oggetto System.in Oggetto Tastiera Metodo readline() Strutture

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe

Dettagli

Ambienti di Sviluppo

Ambienti di Sviluppo Ambienti di Sviluppo Insieme omogeneo di strumenti adatti allo sviluppo di progetti software. Editor; Compilatori e/o interpreti; Strumenti di test; Applicazioni che permettono di editare / disegnare il

Dettagli

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c Caratteristiche MATLAB Linguaggio di programmazione orientato all elaborazione di matrici (MATLAB=MATrix LABoratory) Le variabili sono matrici (una variabile scalare equivale ad una matrice di dimensione

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

Dettagli

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

Dettagli

Linguaggi e Paradigmi di Programmazione

Linguaggi e Paradigmi di Programmazione Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una

Dettagli

Esercizi di programmazione in C

Esercizi di programmazione in C Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Conclusioni Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

Vettori Algoritmi elementari di ordinamento

Vettori Algoritmi elementari di ordinamento Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Vettori Algoritmi elementari di ordinamento Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale

Dettagli

Matlab: Strutture di Controllo. Informatica B

Matlab: Strutture di Controllo. Informatica B Matlab: Strutture di Controllo Informatica B Tipo di dato logico È un tipo di dato che può avere solo due valori true (vero) 1 false (falso) 0 I valori di questo tipo possono essere generati direttamente

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015 APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015 VINCENZO MARRA Indice Esercizio 1 1 Conversione di un numero naturale in base b.

Dettagli

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Reflection in Java 1 Reflection Riflessione

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore. 1 Esercizio 1 1. Immaginate di avere una calcolatore che invece che poter rappresentare i classici due valori per ogni bit (0/1) possa rappresentare 7 valori per ogni bit. (a) Quanti bit gli occorreranno

Dettagli

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08 Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 08 Traduzione ed esecuzione di programmi Traduzione ed esecuzione di programmi 1 Nota bene Alcune parti del presente materiale didattico

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C CORSO DI LABORATORIO DI INFORMATICA CORSO DI LAUREA IN SDM ANNO ACCADEMICO 2011-2012 Docente: R. Sparvoli Esercitazioni: R. Sparvoli, F. Palma OTTAVA ESPERIENZA DI LABORATORIO L elaborazione dei files

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Introduzione a Dev-C++

Introduzione a Dev-C++ Introduzione a Dev-C++ Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Note: Dev-C++ richiede Windows 95/98/NT/2000/XP

Dettagli

Programmazione ad Oggetti. Java Parte I

Programmazione ad Oggetti. Java Parte I Programmazione ad Oggetti Java Parte I Overview Caratteristiche generali 1 Caratteristiche generali Un moderno linguaggio orientato agli oggetti Pensato per lo sviluppo di applicazioni che devono essere

Dettagli

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,

Dettagli

Introduzione a ROOT. 1. Informazioni generali

Introduzione a ROOT. 1. Informazioni generali Introduzione a ROOT 1. Informazioni generali ROOT è un ambiente visualizzazione e trattamento dati interattivo sviluppato al CERN (si veda il sito ufficiale http://root.cern.ch interamente sviluppato in

Dettagli

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4]; ARRAY BIDIMENSIONALI Si possono definire array di qualunque tipo di dato, quindi anche di altre array float [][] mx = new float[3][4]; ovvero.. (float []) [] mx = new float[3][4]; La loro motivazione (storica)

Dettagli

http://www.programmiamo.altervista.org/c/oop/o...

http://www.programmiamo.altervista.org/c/oop/o... PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA1 1.3 - Le strutture di controllo 1 Prerequisiti Istruzioni semplici Strutture di controllo Scittura di semplici applicazioni Java 2 1 Introduzione In molti casi le

Dettagli

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005 Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005 Si noti che le soluzioni ai quesiti saranno considerate

Dettagli

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50 Guida all uso dell ambiente di sviluppo 1 integrato o IDE JCreator LE 4.50 Inizializzazione: creazione del nuovo progetto e del file sorgente in ambiente JCreator Al lancio del programma si apre la finestra

Dettagli

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; } Java è un linguaggio di programmazione c indipendente dalla piattaforma, ovvero un linguaggio di programmazione che permette di compilare i programmi una volta sola e di installarli su computer che usano

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software: 1 SOFTWARE È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software: SOFTWARE DI SISTEMA (o di base), che deve gestire le funzioni

Dettagli

Tale attività non è descritta in questa dispensa

Tale attività non è descritta in questa dispensa Fondamenti di informatica Oggetti e Java ottobre 2014 1 Nota preliminare L installazione e l uso di Eclipse richiede di aver preliminarmente installato Java SE SDK Tale attività non è descritta in questa

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli