un programma Java 2.1 Scrittura, compilazione ed esecuzione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "un programma Java 2.1 Scrittura, compilazione ed esecuzione"

Transcript

1 2 Scrivere ed eseguire un programma Java Contenuto 2.1 Scrittura, compilazione ed esecuzione 2.2 La compilazione 2.3 L esecuzione 2.4 I package e la direttiva import 2.5 Cosa può andare male? 2.6 Esercizi Nel capitolo precedente abbiamo spiegato che un algoritmo può essere codificato in un programma scritto in un certo linguaggio formale, e quindi può essere mandato in esecuzione su di un calcolatore. Vediamo ora concretamente come si può scrivere ed eseguire un primo semplice programma Java: questo ci permetterà di introdurre alcuni concetti elementari del linguaggio. 2.1 Scrittura, compilazione ed esecuzione Java è un linguaggio di programmazione orientato agli oggetti, progettato e realizzato agli inizi degli anni novanta da James Gosling e da un gruppo di sviluppatori della Sun Microsystems (acquisita nel 2010 da Oracle). Un programma Java contiene in generale una o più classi. Ogni classe, identificata da un nome, è una raccolta di proprietà e funzionalità correlate. Ciascuna funzionalità viene realizzata da un metodo. Ogni metodo ha un nome e contiene una sequenza di istruzioni la cui esecuzione implementa la corrispondente funzionalità. Per i primi programmi che presenteremo, identificheremo il programma con una classe avente lo stesso nome e contenente un metodo di nome main. La funzionalità del programma sarà quella realizzata dal metodo main. Per esempio, il listato che segue mostra il programma Hello, il nostro primo programma Java che analizzeremo in dettaglio in questo capitolo. /* */ Un programma che chiede il tuo nome e ti saluta

2 14 Scrivere ed eseguire un programma Java import jbook. util. Input ; public class Hello { public static void main ( String [] args ){ System. out. print (" Come ti chiami? "); // stampa String persona ; persona = Input. readstring (); // legge System. out. println (" Ciao " + persona + '!'); // stampa } } Listato 2.1: Il programma Hello Per scrivere il programma possiamo utilizzare un qualunque editor di testi disponibile sul calcolatore. La classe dovrà essere contenuta in un file avente lo stesso nome della classe, seguito dal suffisso.java; quindi il programma Hello deve essere scritto in un file chiamato Hello.java. Per eseguire il programma, come anticipato nella Sezione 1.1, abbiamo bisogno sul nostro calcolatore di un compilatore e di un interprete per Java. Esistono molte versioni di questi programmi: noi useremo quelli contenuti nel Java Standard Edition Development Kit (JDK) che si può scaricare liberamente dal sito downloads/index.html Prima di compilare il programma Hello, è necessario copiare nella directory in cui si trova il file Hello.java la directory jbook e tutto il suo contenuto: questa directory può essere scaricata dal sito web del libro. Fatto questo, per compilare il programma Hello possiamo eseguire il comando $ javac Hello. java in un interprete di comandi, come una shell sotto Linux o un interprete DOS sotto Windows. 1 Se il programma è stato scritto correttamente, la compilazione produce un file chiamato Hello.class che contiene la traduzione del programma Hello in bytecode, cioè in un linguaggio di programmazione di livello intermedio. A questo punto possiamo mandare in esecuzione il programma con il comando $ java Hello Il comando java lancia la Java Virtual Machine, cioè l interprete che è in grado di eseguire i programmi scritti in bytecode. L esecuzione del programma Hello provoca un interazione con l utente. Come prima cosa, il programma scrive sul terminale Come ti chiami? e si mette in attesa di un input da parte dell utente. Per proseguire l utente deve scrivere da tastiera una sequenza di caratteri, per esempio Maria, terminata da un ritorno a capo. A questo punto il programma completa l esecuzione scrivendo Ciao Maria!. Rappresentiamo l interazione come segue, dove evidenziamo in corsivo l input da tastiera dell utente: 1 Con il carattere $ indichiamo genericamente il prompt dell interprete di comandi, cioè i caratteri da esso stampati per indicare che è pronto per leggere e interpretare il prossimo comando.

3 2.1 Scrittura, compilazione ed esecuzione 15 Come ti chiami? Maria Ciao Maria! Dando uno sguardo al programma Hello è abbastanza semplice capire che le istruzioni System.out.print(...) e System.out.println(...) permettono di scrivere delle parole sullo schermo, mentre Input.readString() permette di leggere una parola da tastiera. Nel resto del capitolo descriveremo in dettaglio non solo il significato delle linee di codice che costituiscono il programma, ma anche l effetto dei comandi javac Hello.java e java Hello. Gli ambienti integrati di sviluppo Nel descrivere come si può compilare ed eseguire un programma Java, abbiamo assunto di avere a disposizione sul nostro calcolatore un ambiente di sviluppo minimale, cioè un editor di testi (per la scrittura dei programmi), un compilatore e un interprete per Java, e naturalmente un interprete di comandi fornito dal sistema operativo che ci consenta di lanciare l esecuzione del compilatore e dell interprete con i comandi java e javac, come descritto sopra. In alternativa, per lo sviluppo di programmi Java si può usare un ambiente integrato di sviluppo, chiamato più brevemente IDE, acronimo di Integrated Development Environment. Un IDE normalmente fornisce un editor guidato dalla sintassi in grado di individuare alcuni errori sintattici già durante la scrittura, e consente di compilare ed eseguire un programma selezionando opportuni pulsanti (o comandi di menu, o combinazioni di tasti) dell interfaccia grafica. In alcuni IDE la compilazione del programma avviene in maniera totalmente automatica, ogni volta che il sorgente viene modificato tramite l editor. Oltre a integrare editor, compilatore e ambiente di esecuzione, molti IDE forniscono agevolazioni quali il completamento automatico del codice, l indentazione automatica, l accesso alla documentazione del linguaggio e delle librerie, la navigazione ipertestuale dei problemi riscontrati, e l integrazione di potenti strumenti per il collaudo e il debugging. Queste caratteristiche facilitano notevolmente la scrittura di programmi Java e grazie a numerose altre funzionalità disponibili nell ambiente permettono di gestire in modo efficace lo sviluppo di progetti Java di grandi dimensioni. La Figura 2.1 mostra l aspetto di Eclipse, un IDE che si sta affermando come uno standard di fatto sia in ambito accademico che industriale, al termine della scrittura e dell esecuzione del programma Hello: oltre al programma nella finestra dell editor, al centro, si può intravedere in basso l output risultante dall interazione con il programma. Eclipse può essere scaricato liberamente dalla URL

4 16 Scrivere ed eseguire un programma Java Figura 2.1: L ambiente integrato di sviluppo Eclipse 2.2 La compilazione La traduzione di un programma Java nel corrispondente programma in bytecode effettuata dal compilatore javac è un operazione alquanto complessa. Durante la generazione dei bytecode il compilatore analizza il programma sorgente effettuando una serie di controlli. Alcuni di questi controlli servono per verificare la correttezza sintattica, cioè che il programma sia effettivamente una sequenza di simboli generata dalla grammatica di Java. Altri controlli sono relativi alla cosiddetta semantica statica, e servono a verificare che il programma rispetti alcune regole del linguaggio che potrebbero essere violate anche da un programma sintatticamente corretto. Per esempio, con l analisi di semantica statica si controllano regole come ogni variabile deve essere dichiarata prima di essere usata, oppure il tipo dell espressione a destra dell operatore di assegnamento deve essere compatibile con il tipo della variabile alla sua sinistra. Se tutte le regole rilevanti sono soddisfatte, il compilatore completa la traduzione del programma generando il codice intermedio in bytecode. Altrimenti la traduzione viene interrotta e il compilatore scrive un messaggio descrivendo gli errori individuati. Le regole di semantica statica saranno discusse ampiamente nei prossimi capitoli, man mano che introdurremo i costrutti del linguaggio ai quali esse si applicano.

5 2.2 La compilazione L analisi lessicale e l analisi sintattica Come accennato sopra, l analisi sintattica controlla che il programma sia effettivamente generabile dalla grammatica del linguaggio Java. In realtà la grammatica di Java, come quelle di tutti i linguaggi ad alto livello, è formata da due grammatiche distinte: la grammatica lessicale definisce i token o elementi lessicali del linguaggio, mentre la grammatica sintattica definisce i costrutti veri e propri del linguaggio usando i token come simboli terminali. Di conseguenza l analisi sintattica è costituita da due fasi principali: l analisi lessicale, che legge la sequenza di caratteri che costituisce il programma e la trasforma in una sequenza di token, e l analisi sintattica propriamente detta che analizza la sequenza di token risultante e controlla che sia corretta, cioè che sia generata dalla grammatica sintattica. Lo studio degli algoritmi che il compilatore utilizza per verificare che un programma sia sintatticamente corretto è un argomento che va al di là degli obiettivi di questo libro. Presenteremo però in modo sistematico le due grammatiche che definiscono Java: in questo modo il lettore non solo potrà verificare che gli esempi di programmi che proponiamo siano sintatticamente corretti, ma avrà anche a disposizione uno strumento per poter generare esempi originali dei vari costrutti del linguaggio. Le produzioni delle grammatiche di Java presentate, talvolta in modo incrementale, nel corso dei prossimi capitoli sono raccolte nella forma più generale nell Appendice A I commenti e la formattazione Durante l analisi lessicale il compilatore legge la sequenza di caratteri che costituisce il programma e la trasforma in una sequenza di token. Durante questo procedimento, il compilatore ignora i commenti, che sono frammenti di codice che hanno principalmente la funzione di documentare il programma per gli esseri umani. Un commento si può estendere su più linee, compreso tra i delimitatori /* e */ come nelle prime linee del file Hello.java: /* */ Un programma che chiede il tuo nome e ti saluta Oppure si estende dal delimitatore // fino alla fine della linea in cui esso compare, come nella parte finale della seguente linea del programma: System. out. println (" Ciao " + persona + '!'); // stampa Quando scriviamo un programma, per facilitarne la lettura possiamo inserire a piacere commenti, spazi e caratteri di tabulazione, e possiamo spezzare e indentare le linee a piacimento (tranne che all interno delle costanti letterali di tipo String, introdotte nella Sezione 4.5.2). Per capire l importanza di una buona formattazione, si confronti

6 18 Scrivere ed eseguire un programma Java il seguente programma con il Listato 2.1: per il compilatore essi sono del tutto equivalenti, poiché differiscono solo per commenti e caratteri non significativi, ma per un programmatore hanno un grado di leggibilità drammaticamente diverso. import jbook. util. Input ; public class Hello { public static void main ( String [] args ){ System. out. print (" Come ti chiami? ") ; String persona ; persona = Input. readstring (); System. out. println (" Ciao "+ persona +'!');}} Nei programmi che proporremo verrà usato uno stile standard di formattazione e indentazione del codice, seguendo le convenzioni reperibili alla URL oracle.com/technetwork/java/codeconv html : 2 invitiamo anche il lettore a seguire questo stile I token Una volta eliminati dal programma i commenti e gli altri caratteri non rilevanti, l analisi lessicale procede con l esame della sequenza di caratteri risultante, e individua al suo interno i token. Ci sono cinque categorie sintattiche di token in Java, come decritto dalla seguente produzione della grammatica lessicale: Token ::= ParolaChiave Separatore Operatore CostanteLetterale Id Le parole chiave sono parole riservate: hanno un significato predefinito nel linguaggio e non possono essere usate in altro modo. Esse sono elencate nella seguente produzione: 3 ParolaChiave ::= abstract assert boolean break byte case catch char class const continue default double do else enum extends finally final float for goto if implements import instanceof interface int long native new package private protected public return short static strictfp super switch synchronized this throws throw transient try void volatile while I separatori e gli operatori del linguaggio sono sequenze di uno o più caratteri generate dalle seguenti produzioni: 2 Ci concederemo piccole eccezioni per chiarezza espositiva o per presentare gli esempi in modo più compatto. 3 Come curiosità, const e goto non sono usate in Java, anche se sono riservate.

7 2.2 La compilazione 19 Separatore ::= ( ) [ ] { } ;,. Operatore ::= = > <!? : == <= >=!= && * / & ˆ % << >> >>> += -= *= /= &= = ˆ= %= <<= >>= >>>= Spiegheremo il significato dei vari operatori nel Capitolo 5. Le costanti letterali sono sequenze di caratteri che rappresentano valori di un certo tipo di dati. CostanteLetterale ::= LettIntero LettVirgolaMobile LettCarattere LettStringa true false null Descriveremo in dettaglio la sintassi delle costanti letterali nel Capitolo 4, quando introdurremo i tipi di dati corrispondenti. Solo a titolo di esempio, sono costanti letterali corrette gli interi 345 e , i numeri in virgola mobile e 3456e3, i caratteri 'c', '\n' e '\u0041', e la stringa (cioè una sequenza di caratteri) "Come ti chiami? ". Si noti che oltre alle parole chiave, le uniche altre parole riservate di Java sono le costanti letterali booleane true e false, e la costante letterale null. L ultima categoria di token sono gli identificatori (non-terminale Id). Un identificatore è una sequenza di lunghezza arbitraria composta da lettere, cifre (i caratteri da 0 a 9) e i caratteri $ e _ (underscore), che non inizi con una cifra e che sia diversa da una parola riservata. Java è un linguaggio case sensitive, ovvero distingue tra maiuscole e minuscole: ciò vuol dire, per esempio, che gli identificatori pippo e Pippo sono considerati diversi, e che True (diverso dalla costante letterale true) è un identificatore ammissibile. Anche se qualunque sequenza di caratteri che rispetti le regole appena elencate è riconosciuta come un identificatore dal compilatore, in pratica esistono varie convenzioni nella scelta degli identificatori che i programmatori sono tenuti a seguire. Per esempio, il carattere $ andrebbe usato solo in programmi generati automaticamente, mentre _ andrebbe usato solo in nomi di costanti composti da più parole (vedi Sezione 3.5). Vedremo altre convenzioni che riguardano l uso di maiuscole e minuscole quando introdurremo le variabili, le costanti, i metodi e le classi. Le lettere che possono comparire in un identificatore comprendono non solo le lettere maiuscole e minuscole dell alfabeto inglese, ma anche le lettere di numerosi altri alfabeti di tutto il mondo codificati nello standard UNICODE. Comunque, per garantire una migliore portabilità dei sorgenti dei nostri programmi, noi useremo solo lettere dell alfabeto inglese evitando le lettere accentate del nostro alfabeto: questo perché il supporto fornito dagli editor di testo a queste lettere non sempre è affidabile.

8 20 Scrivere ed eseguire un programma Java L analisi sintattica Per favorire la leggibilità, nel seguito useremo per i listati dei programmi alcune semplici convenzioni tipografiche. Per esempio, il programma Hello del Listato 2.1 sarà visualizzato così: 1 /* 2 Un programma che chiede il tuo nome e ti saluta 3 */ 4 5 import jbook. util. Input ; 6 7 p u b l i c c l a s s Hello { 8 p u b l i c s t a t i c v o i d main ( String [] args ){ 9 System. out. print (" Come ti chiami? "); // stampa 10 String persona ; 11 persona = Input. readstring (); // legge 12 System. out. println (" Ciao " + persona + '!'); // stampa 13 } 14 } Quindi le linee di codice sono numerate a sinistra, le parole riservate di Java sono in grassetto, mentre i commenti sono resi in corsivo. Analizziamo in dettaglio la struttura sintattica del programma. Procederemo in modo informale, introducendo la terminologia e i concetti necessari per descrivere i costrutti del linguaggio che incontreremo: la presentazione completa di tali costrutti, con le relative produzioni della grammatica, verrà fatta nei capitoli successivi. La prima linea significativa del programma è la direttiva di importazione 5 import jbook. util. Input ; Questa direttiva comunica al compilatore l intenzione di usare nel programma la classe Input del package jbook.util, come in effetti avviene nella linea 11. Approfondiremo il ruolo dei package, delle clausole di importazione e della classe Input nelle Sezioni 2.4 e Le linee 7 14 contengono la dichiarazione della classe Hello. La sua intestazione, costituita dalla settima linea, comprende la parola chiave class seguita da un identificatore, il nome della classe, e preceduta dal modificatore di visibilità public di cui parleremo nel Capitolo 8. Il nome della classe è seguito da una parentesi graffa che viene chiusa nella linea 14: queste parentesi delimitano il corpo della classe. Il corpo della classe Hello contiene un solo membro: la dichiarazione del metodo di nome main, che ha una struttura simile a quella della classe: l intestazione del metodo nella linea 8 è seguita dal corpo del metodo nelle linee 9 12, delimitato dalle parentesi graffe nelle linee 8 e 13. Nell intestazione, il nome del metodo è preceduto da alcune parole chiave, ed è seguito dalla lista dei parametri formali racchiusa tra parentesi: illustreremo tutto questo nel Capitolo 8. Il (corpo del) metodo main contiene tre istruzioni o comandi e una dichiarazione:

9 2.2 La compilazione 21 9 System. out. print (" Come ti chiami? "); // stampa 10 String persona ; 11 persona = Input. readstring (); // legge 12 System. out. println (" Ciao " + persona + '!'); // stampa Le istruzioni delle linee 9 e 12 sono due invocazioni o chiamate di metodi: vengono chiamati i metodi print e println dell oggetto System.out, passando come argomenti delle stringhe, e precisamente la costante letterale "Come ti chiami? " e l espressione "Ciao "+ persona + '!'. La linea 10 è una dichiarazione di variabile: viene dichiarata una variabile chiamata persona, il cui tipo è la classe String. Infine la linea 11 contiene un comando di assegnamento, costituito dalla variabile persona seguita dall operatore di assegnamento =, seguito a sua volta dell invocazione del metodo readstring() della classe Input. La dot notation Nel listato del programma Hello ci sono diverse occorrenze del separatore punto, cioè del carattere., con significati diversi. La dot notation, ovvero l uso del punto (dot in inglese) come selettore, è tipica dei linguaggi di programmazione e dei formalismi orientati agli oggetti mentre è usata meno spesso in altri paradigmi: essa necessita quindi di una breve spiegazione. In generale, la notazione nome1. nome2 dove sia nome1 che nome2 sono identificatori, rappresenta la proprietà o entità nome2 nel contesto del significato di nome1. Il significato preciso dipende da cosa rappresentano gli identificatori. Per esempio, Input.readString() denota il metodo readstring() contenuto nella classe Input. Analogamente, System.out denota la variabile out contenuta nella classe System. Infine jbook.util denota il sottopackage util contenuto nel package jbook (si veda la Sezione 2.4). La dot notation può essere iterata. Per esempio, System.out.println() denota il metodo println() dell oggetto denotato da System.out, mentre jbook.util.input denota la classe Input del package jbook.util. Nel descrivere alcuni metodi offerti dalle API di Java tenderemo a specificare se si tratta di metodi statici o di metodi d istanza. La differenza tra i due concetti sarà chiarita nei Capitoli 7 e 10, quando i temi della programmazione orientata a oggetti saranno approfonditi. Per il momento ci basti sapere che i metodi statici vengono invocati usando come prefisso un nome di classe (per esempio jbook.util.input.readint() invoca il metodo statico readint() della classe jbook.util.input) mentre quelli d istanza seguono un oggetto che di fatto costituisce un parametro implicito del metodo (System.out.println() invoca il metodo d istanza println() sull oggetto System.out).

10 22 Scrivere ed eseguire un programma Java La notazione per i metodi Java permette di definire e usare più varianti di metodi che hanno lo stesso nome ma che differiscono per il numero e/o tipo dei parametri che ricevono. Questa caratteristica, chiamata overloading di simboli, è molto importante e verrà discussa più approfonditamente nel Capitolo 8. Come verrà spiegato nella Sezione 8.3, la firma di un metodo consiste del nome del metodo e della lista dei tipi dei suoi argomenti. Quindi l overloading permette la coesistenza di metodi con lo stesso nome ma firma diversa. A livello di notazione, nel riferire un metodo tramite il nome faremo uso delle seguenti convenzioni sintattiche: (1) quando intendiamo riferire un particolare metodo indicheremo la firma completa (per esempio readint(string)); (2) quando è utile riferire esplicitamente nel testo un particolare argomento del metodo inseriremo anche un identificatore per ciascun parametro (per esempio il nome msg in readint(string msg)); (3) quando intendiamo riferire l intera famiglia di metodi, indipendentemente dal numero e tipo dei parametri useremo semplicemente il nome del metodo seguito dalla coppia di parentesi tonde, come nel caso del metodo senza parametri (per esempio readint()). 2.3 L esecuzione Lanciando il comando java Hello viene mandata in esecuzione la JVM che interpreta i bytecode del file Hello.class generato dal compilatore. Lo studio del formato e del significato dei bytecode esula dagli obiettivi di questo libro, e quindi seguiremo la prassi comune di descrivere l esecuzione del programma facendo riferimento direttamente al codice sorgente della classe Hello.java. L interprete java inizia l esecuzione dal metodo main della classe passata come argomento. Se tale classe non avesse un metodo main (con intestazione analoga a quella della linea 8 di Hello.java) verrebbe segnalato un errore. L esecuzione del metodo consiste, nel caso in esame, nell esecuzione sequenziale delle linee Il primo comando, 9 System. out. print (" Come ti chiami? "); // stampa invoca una funzionalità fornita dalle librerie di Java, e ha l effetto di scrivere in una opportuna finestra dello schermo la stringa Come ti chiami? Più precisamente, System.out (la variabile out contenuta nella classe System) rappresenta lo standard output, che normalmente è una finestra sullo schermo del calcolatore. L esecuzione del metodo print() invocato su di esso ha l effetto di scrivere sullo standard output la stringa passata per argomento, cioè racchiusa tra parentesi dopo il nome del metodo.

11 2.4 I package e la direttiva import 23 La dichiarazione di variabile della linea 10 e il successivo comando di assegnamento 10 String persona ; 11 persona = Input. readstring (); // legge hanno il seguente effetto. Dapprima viene riservata una zona di memoria cui viene associato il nome persona, di dimensione adatta a contenere un riferimento a una stringa (un oggetto di tipo String). Successivamente viene invocato il metodo readstring() della classe Input che ha l effetto di leggere una stringa terminata da un ritorno a capo dallo standard input, che tipicamente vuol dire dalla tastiera, e di restituirla come risultato; infine viene messo un riferimento a questa stringa nella zona di memoria associata al nome persona. Per concludere, il comando 12 System. out. println (" Ciao " + persona + '!'); // stampa per prima cosa valuta l espressione "Ciao "+ persona + '!'. In Java l operatore + applicato a due stringhe ne restituisce la concatenazione, cioè una stringa costituita dai caratteri della prima seguiti dai caratteri della seconda. Pertanto in questo caso il risultato è la stringa ottenuta concatenando le stringhe "Ciao ", quella memorizzata nella variabile persona e il singolo carattere '!'. Infine viene stampata questa stringa sullo standard output passandola come argomento al metodo System.out.println(). Quindi se l utente ha scritto da tastiera Maria seguita da invio, l interazione completa con il programma risulta essere la seguente: Come ti chiami? Maria Ciao Maria! 2.4 I package e la direttiva import Anche i più semplici programmi Java hanno bisogno, per essere compilati ed eseguiti, di altre classi, oltre naturalmente a quella che contiene il metodo main. Per esempio, il programma Hello usa direttamente le classi System, String e Input. Durante la compilazione di una classe, quando il compilatore incontra il nome di un altra classe esso controlla che la classe esista, e se non è già compilata la compila a sua volta. Le classi di Java sono organizzate in package, i quali formano uno spazio di nomi gerarchico: un package può contenere classi e/o altri package. Per semplicità si può pensare ai package come alle cartelle di un file system, ma questa analogia è solo concettuale: concretamente i package e le classi in essi contenute potrebbero anche essere memorizzati in un database oppure in un singolo file (come un archivio.jar). Per le regole sintattiche del linguaggio il nome di un package può essere un qualunque identificatore ammissibile (si veda la Sezione 2.2.3), ma normalmente si usano solo lettere minuscole. Il nome completo di un package è formato dalla sequenza

12 24 Scrivere ed eseguire un programma Java dei nomi dei package che lo contengono, separati dal carattere '.'. Per esempio, java.util.concurrent è il nome completo del package concurrent, sottopackage del package util, a sua volta contenuto nel package java. La distribuzione di Java comprende centinaia di classi organizzate in decine di package. Queste classi forniscono un ricco insieme di librerie e di tipi di dati che possono essere usati liberamente da ogni programmatore per rendere i propri programmi più compatti ed efficienti: non c è bisogno di riprogrammare funzionalità già offerte nelle classi della distribuzione, e comunque sarebbe difficile realizzarle in modo più efficiente. Ogni classe Java appartiene a un package, che deve essere dichiarato con una opportuna direttiva prima della dichiarazione della classe, e prima di eventuali direttive di importazione. Per esempio, il file Input.java del package jbook.util inizia nel seguente modo: 1 package jbook. util ; 2 3 import java.io. BufferedReader ; 4 import java.io. InputStreamReader ; 5 import java.io. IOException ; 6 import java. util. Vector ; 7 8 /** 9 Una semplice classe per leggere stringhe e numeri 10 dallo standard input. 11 */ 12 p u b l i c c l a s s Input { La direttiva package jbook.util; dichiara appunto che la classe appartiene al package jbook.util. Questa direttiva può mancare, come nel caso della nostra classe Hello: in tal caso la classe è considerata appartenere a un package senza nome (unnamed). Le classi contenute in uno stesso package devono avere nomi diversi, ma si possono avere classi con lo stesso nome in package diversi. Un programma può far riferimento a un altra classe usando il suo nome semplice solo se essa si trova nel suo stesso package oppure nel package java.lang, le cui classi sono parte integrante della definizione del linguaggio Java (come String e System, usate nell esempio). Altrimenti occorre usare il nome completo della classe, che comprende anche il package che la contiene, oppure si può usare una direttiva di importazione. Nel caso del programma Hello, la presenza della direttiva di linea 5 permette di invocare il metodo readstring() della classe jbook.util.input semplicemente come Input.readString() in linea 11. Alternativamente si potrebbe eliminare la direttiva, a patto di sostituire la chiamata del metodo con jbook.util.input.readstring().

13 2.5 Cosa può andare male? Cosa può andare male? Quando si scrive un programma, è del tutto normale commettere degli errori, che possono essere di varia natura e gravità. Gli errori sintattici e quelli di semantica statica sono rilevati dal compilatore: se il programma non è generabile dalla grammatica di Java oppure non rispetta tutte le regole di semantica statica, allora la compilazione fallisce, il bytecode non viene generato, e il compilatore stampa una sequenza di messaggi indicando gli errori individuati. È estremamente importante imparare a leggere i messaggi di errore del compilatore, per individuare e correggere rapidamente gli errori. Per questo motivo quasi tutti i capitoli di questo libro contengono una sezione come la presente, in cui vengono presentati alcuni messaggi di errore tipici, rilevanti per i concetti introdotti nel capitolo stesso. Questi messaggi, anche se differiscono a seconda del compilatore che si usa, sono in genere molto precisi, e indicano sia la natura dell errore che il punto del programma dove esso si è verificato. Noi descriveremo alcuni messaggi di errore prodotti dal compilatore della distribuzione JDK 7.0 di Java. Data la complessità del linguaggio e del compilatore, sarebbe impossibile presentare tutte le possibili tipologie di messaggi di errore: ci limiteremo quindi a considerare quelle che, nella nostra esperienza, un programmatore incontra più frequentemente. Nome di file errato. Supponiamo di aver salvato il programma Hello in un file chiamato Ciao.java. La compilazione del file produce il seguente output: $ javac Ciao. java Ciao. java :7: error : class Hello is public, should be declared in a file named Hello. java public class Hello { 1 error Il messaggio di errore ci ricorda che la classe Hello è pubblica, e deve essere dichiarata in un file chiamato Hello.java. Questa regola vale per tutte le classi pubbliche, cioè quelle la cui dichiarazione comincia con la parola chiave public: parleremo di questo nel Capitolo 10. Errata dichiarazione del metodo main. Nella Sezione 2.3 abbiamo accennato al fatto che l interprete inizia l esecuzione con il metodo main della classe passatagli come argomento, e che questo metodo deve avere l intestazione simile a quella della linea 8 del programma Hello, cioè: 8 p u b l i c s t a t i c v o i d main ( String [] args ){

14 26 Scrivere ed eseguire un programma Java Senza anticipare il significato delle varie parti dell intestazione che saranno discusse successivamente, da un punto di vista puramente sintattico l intestazione del metodo main deve soddisfare le seguenti condizioni: main deve essere preceduto da void; void deve essere preceduto da public e da static, in qualunque ordine; il contenuto delle parentesi dopo main deve cominciare con String, seguito da un coppia di parentesi quadre ([]) o da tre punti (...), e infine un qualunque identificatore. L identificatore può anche precedere le parentesi quadre. Se una classe sintatticamente corretta non contiene un metodo main che soddisfi tutte queste condizioni, quando si lancia l esecuzione l interprete segnalerà un errore: $ java Prova Error : Main method not found in class Prova, please define the main method as: public static void main ( String [] args ) Omissione di separatori. Supponiamo ora che scrivendo il programma Hello sia stato omesso il separatore ; alla fine della direttiva import di linea 5: 1 /* 2 Un programma che chiede il tuo nome e ti saluta 3 */ 4 5 import jbook. util. Input 6 7 p u b l i c c l a s s Hello { In questo caso la compilazione del programma Hello produce il seguente output: Hello. java :5: error : ';' expected import jbook. util. Input 1 error La prima linea del messaggio di errore comunica all utente in quale linea di codice è stato individuato l errore (Hello.java:5, cioè la quinta linea del file Hello.java), nonché la tipologia dell errore: ';'expected, cioè ci si aspettava il carattere ';'. Le due linee successive indicano precisamente dove, all interno della linea incriminata, è stato individuato l errore: prima viene riportata integralmente la linea Hello.java:5, e poi l unico carattere della linea successiva, il caret, si trova esattamente sotto la posizione dove dovrebbe trovarsi il ;. Naturalmente per correggere l errore basta mettere un ; dove richiesto.

15 2.5 Cosa può andare male? 27 Errori di battitura in parole chiave o identificatori. Supponiamo di aver scritto Public invece di public in linea 7, nell intestazione della classe. L output del compilatore sarà Hello. java :7: error : class, interface, or enum expected Public class Hello { 1 error confermando il fatto che Java è case sensitive: nella posizione indicata è illegale la presenza del token Public, che viene interpretato come un identificatore, mentre sarebbe stata legittima un occorrenza dalla parola chiave public. Un altro errore sintattico molto frequente consiste nello scrivere in modo errato un identificatore, che può essere il nome di una classe, di una variabile, di un metodo, eccetera. In questo caso, il compilatore non trova una definizione associata all identificatore. Per esempio, il seguente messaggio di errore viene ottenuto compilando il programma Hello dopo aver cambiato readstring() in redstring(): Hello. java :11: error : cannot find symbol persona = Input. redstring (); // legge symbol : method redstring () location : class Input 1 error Nella prima linea del messaggio di errore il compilatore segnala la linea di codice rilevante e il tipo di errore: cannot find symbol, non trovo il simbolo. Nelle due linee successive spiega qual è il simbolo che non trova, cioè il metodo redstring(), e dove dovrebbe trovarsi il metodo cercato, cioè nella classe jbook.util.input. Infine il consueto indica la posizione dove è stato trovato il simbolo non riconosciuto. Errori multipli. In base a quanto abbiamo visto nella Sezione 2.2, possiamo dividere concettualmente il lavoro del compilatore in tre fasi: l analisi sintattica, l analisi di semantica statica e la generazione del bytecode. In generale la compilazione non si ferma appena trova un errore, ma procede fino alla fine della fase corrente cercando di individuare eventuali altri errori, e stampando alla fine un messaggio per ognuno degli errori individuati. Ne segue che una fase di compilazione non viene iniziata se vi sono degli errori nella fase precedente. Vediamo un esempio. Supponiamo di aver modificato Hello.java in modo che le linee 10 e 11 siano: 10 String persona 11 person = Input. readstring () // legge

16 28 Scrivere ed eseguire un programma Java Manca il separatore ; alla fine delle linee 10 e 11, due errori sintattici, e l identificatore person in linea 11 non è dichiarato, perché è diverso dalla variabile persona della linea 10, un errore di semantica statica. Compilando otteniamo: Hello. java :10: error : ';' expected String persona Hello. java :11: error : ';' expected person = Input. readstring () // legge 2 errors Quindi vengono riportati solo i due errori sintattici. Se li correggiamo entrambi e ricompiliamo, otteniamo come previsto la segnalazione che person non è riconosciuto: Hello. java :11: error : cannot find symbol person = Input. readstring (); // legge symbol : variable person location : class Hello 1 error Nel caso il compilatore segnali più errori, una buona prassi consiste nel cercare di individuare e correggere gli errori nell ordine in cui vengono segnalati, ricompilando frequentemente il programma. Infatti alcuni errori segnalati potrebbero essere solo una conseguenza di errori precedenti. Purtroppo non sempre i messaggi di errore del compilatore risultano chiari e informativi come quelli visti sopra. Per esempio, se nel solito programma Hello dimentichiamo la parentesi graffa aperta alla fine dell intestazione del metodo main in linea 8, l output della compilazione segnalerà ben 10 errori tra cui i seguenti: Hello. java :8: error : ';' expected public static void main ( String [] args ) Hello. java :11: error : <identifier > expected persona = Input. readstring (); // legge Hello. java :12: error : <identifier > expected System. out. println (" Ciao " + persona + '!'); // stampa... Hello. java :14: error : class, interface, or enum expected } 10 errors

17 2.6 Esercizi 29 In questo caso solo il primo messaggio di errore è significativo, ma solo in parte. Il programmatore dovrà riconoscere che alla fine della linea 8 manca in realtà un {, e non un ; come indicato: correggendo e ricompilando si vedrà che anche gli altri errori spariscono. 2.6 Esercizi Esercizio 2.1 Dire quali delle seguenti affermazioni sono vere e quali false: javac è un compilatore di programmi javac è un editor di programmi javac è un interprete di programmi java è un sistema operativo java è un IDE java è un interprete di programmi eclipse è un IDE eclipse è un sistema operativo Esercizio 2.2 Si scriva, compili ed esegua la classe Hello presentata nel testo, e se ne verifichi il funzionamento come atteso. Esercizio 2.3 Si modifichi la classe Hello presentata nel testo in modo che essa chieda all utente, separatamente, nome e cognome, e saluti con un più formale Buongiorno seguito da nome e cognome. Si compili ed esegua poi il programma per verificarne il funzionamento. Esercizio 2.4 Si identifichino nel seguente frammento di codice Java i vari token, distinguendoli in parole chiave, separatori, operatori, costanti letterali e identificatori. public static void uno () { if ( x == 1) System. out. println ("x vale 1"); else { x - -; flag = true ; } return ;} Esercizio 2.5 Si riscriva il codice dell esercizio 2.4 con la formattazione adeguata, seguendo lo stile degli altri esempi presentati nel testo. Esercizio 2.6 Si identifichino i vari token (distinti in parole chiave, separatori, operatori, costanti letterali, identificatori) nel sorgente della classe Hello: /* */ Un programma che chiede il tuo nome e ti saluta import jbook. util. Input ; public class Hello { public static void main ( String [] args ){ System. out. print (" Come ti chiami? "); // stampa

18 30 Scrivere ed eseguire un programma Java } } String persona ; persona = Input. readstring (); // legge System. out. println (" Ciao " + persona + '!'); // stampa Esercizio 2.7 Per ciascuna delle seguenti sequenze di caratteri, si dica se si tratta di un identificatore legale in Java oppure no, giustificando la risposta: pippo Pippo PIPPO pippo "pippo" 'pippo' _pippo_ <pippo> paolo3 p1n0 3ug3n10 B0 int program Else null Pino&Laura Pino e Laura Pino_e_Laura Pino_<3_Laura Carlo_Motta CarloMotta Carlo.Motta Carlo-Motta $HOME $_$_$_$ dubbio...atroce pagina 6 Esercizio 2.8* 4 Si identifichino, nel codice seguente della classe Errori.java, tutti gli errori di sintassi. Si provi dapprima a farlo su carta, senza l aiuto del compilatore, e si verifichi poi il risultato provando a compilare il programma. import java. util. Input : */ un programma che contiene molti errori /* public class Errori { pubblic static void Main ( String {} args ) { String a; a = Input, readstring (); / legge Sting b = Imput. readstring (); system. out. println ( a + b) // stampa return ; } Esercizio 2.9* L ordine delle istruzioni è importante. Quali permutazioni delle linee 9-12 che compongono il programma Hello sarebbero accettate dal compilatore? Quali avrebbero senso? 4 Gli esercizi marcati con un asterisco sono di maggiore difficoltà rispetto ad altri; è raccomandabile affrontarli dopo aver acquisito sufficiente familiarità con l oggetto del capitolo.

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

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

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

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

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

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

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

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

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

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

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

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

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

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Appunti di Informatica www.mimmocorrado.it 1

Appunti di Informatica www.mimmocorrado.it 1 Installare Java Il programma può essere scaricato dal seguente indirizzo: http://www.java.com/it/download/windows_ie.jsp?locale=it&host=www.java.com Per installare la JDK è necessario: 1. scaricare il

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

2 - Introduzione al linguaggio Java

2 - Introduzione al linguaggio Java 2 - Introduzione al linguaggio Java 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

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

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann permette l esecuzione di un programma, cioè di una sequenza di istruzioni descritte nel linguaggio interpretabile dal calcolatore

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

Informa(ca Appun% dal laboratorio 2

Informa(ca Appun% dal laboratorio 2 Informa(ca Appun% dal laboratorio 2 Conce- fondamentali Esistono programmi, come Microso8 Word oppure Acrobat Reader, che vengono usa% dagli uten% per far eseguire al computer determinate operazioni (come

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

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

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

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

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

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

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

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

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

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

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

STAMPA DI UNA PAGINA SEMPLICE

STAMPA DI UNA PAGINA SEMPLICE Pagina 11 copiati nel proprio sistema (disco fisso o floppy). Questa operazione è detta download o scaricamento. Il modo più semplice per effettuare un download di un file (a meno che non sia specificato

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

5.3 TABELLE 5.3.1 RECORD 5.3.1.1 Inserire, eliminare record in una tabella Aggiungere record Eliminare record

5.3 TABELLE 5.3.1 RECORD 5.3.1.1 Inserire, eliminare record in una tabella Aggiungere record Eliminare record 5.3 TABELLE In un sistema di database relazionali le tabelle rappresentano la struttura di partenza, che resta poi fondamentale per tutte le fasi del lavoro di creazione e di gestione del database. 5.3.1

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

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

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

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

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

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

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

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

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto ed elementi lessicali del linguaggio C Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2015-2016 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

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

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

Analizzatore lessicale o scanner

Analizzatore lessicale o scanner Analizzatore lessicale o scanner Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner, attraverso un esame carattere per carattere dell'ingresso,

Dettagli

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse Prova Finale a.a. 2011/2012 Laboratorio 1: Introduzione a Java e Eclipse 1 Java 6 Standard Edition Linguaggio Java (... (javac, Tool di sviluppo Librerie per l'interfaccia grafica Librerie di base Macchina

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

www.filoweb.it STAMPA UNIONE DI WORD

www.filoweb.it STAMPA UNIONE DI WORD STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere

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

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass 0_Iniziare con GRASS Avvio di Grass e creazione della cartella del Database di GRASS Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Dettagli

La selezione binaria

La selezione binaria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per

Dettagli

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare

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

Java? Sì, grazie. Scopo del corso

Java? Sì, grazie. Scopo del corso Modulo di Java? Sì, grazie Il linguaggio di Internet? Portabilità su qualunque piattaforma (non solo calcolatori): It works everywhere Supporto e disponibilità di strumenti, librerie e documentazione garantiti

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

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

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Il software per gli esami ICON può essere eseguito su qualunque computer dotato di Java Virtual Machine aggiornata.

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012 GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012 L unità di Milano Città Studi del Centro matematita propone anche per l a.s. 2011-2012 una serie di problemi pensati per

Dettagli

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS CONTENUTI: CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS Creazione database vuoto Creazione tabella Inserimento dati A) Creazione di un database vuoto Avviamo il programma Microsoft Access. Dal menu

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

MANUALE EDICOLA 04.05

MANUALE EDICOLA 04.05 MANUALE EDICOLA 04.05 Questo è il video che si presenta avviando il programma di Gestione Edicola. Questo primo video è relativo alle operazioni di carico. CARICO Nello schermo di carico, in alto a sinistra

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

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

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

3.5.1.1 Aprire, preparare un documento da utilizzare come documento principale per una stampa unione.

3.5.1.1 Aprire, preparare un documento da utilizzare come documento principale per una stampa unione. Elaborazione testi 133 3.5 Stampa unione 3.5.1 Preparazione 3.5.1.1 Aprire, preparare un documento da utilizzare come documento principale per una stampa unione. Abbiamo visto, parlando della gestione

Dettagli

Introduzione al Python

Introduzione al Python Andrea Passerini passerini@disi.unitn.it Informatica Caratteristiche procedurale si specifica la procedura da eseguire sui dati strutturato concetto di visibililtà delle variabili orientato agli oggetti

Dettagli

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa. La finestra di Excel è molto complessa e al primo posto avvio potrebbe disorientare l utente. Analizziamone i componenti dall alto verso il basso. La prima barra è la barra del titolo, dove troviamo indicato

Dettagli

Word è un elaboratore di testi in grado di combinare il testo con immagini, fogli di lavoro e

Word è un elaboratore di testi in grado di combinare il testo con immagini, fogli di lavoro e Word è un elaboratore di testi in grado di combinare il testo con immagini, fogli di lavoro e grafici, tutto nello stesso file di documento. Durante il lavoro testo e illustrazioni appaiono sullo schermo

Dettagli

Manuale Utente Amministrazione Trasparente GA

Manuale Utente Amministrazione Trasparente GA Manuale Utente GA IDENTIFICATIVO DOCUMENTO MU_AMMINISTRAZIONETRASPARENTE-GA_1.0 Versione 1.0 Data edizione 03.05.2013 1 Albo Pretorio On Line TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione

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

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 Programmazione 1 Capitolo 01: Concetti Elementari

Corso Programmazione 1 Capitolo 01: Concetti Elementari Corso Programmazione 1 Capitolo 01: Concetti Elementari Docente: Roberto Sebastiani - roberto.sebastiani@unitn.it Esercitatori: Mario Passamani - mario.passamani@unitn.it Alessandro Tomasi - alessandro.tomasi@unitn.it

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans

Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans Prima di tutto va installato il compilatore, ottenibile scaricando ed installando MinGW o CygWin. MinGW: http://www.mingw.org/download.shtml CygWin:

Dettagli

Il database management system Access

Il database management system Access Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio

Dettagli

Matematica in laboratorio

Matematica in laboratorio Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a

Dettagli

Alla scoperta della nuova interfaccia di Office 2010

Alla scoperta della nuova interfaccia di Office 2010 Alla scoperta della nuova interfaccia di Office 2010 Una delle novità più eclatanti della versione 2007 era la nuova interfaccia con la barra multifunzione. Office 2010 mantiene questa filosofia di interfaccia

Dettagli

Il calendario di Windows Vista

Il calendario di Windows Vista Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative

Dettagli

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

Dettagli

Le stringhe. Le stringhe

Le stringhe. Le stringhe Informatica: C++ Gerboni Roberta Stringhe di caratteri (esempi di utilizzo dei vettori) Nel linguaggio C++ una stringa è semplicemente un vettore di caratteri Vettori di caratteri La stringa "hello" è

Dettagli

Eclipse - Nozioni Base

Eclipse - Nozioni Base Eclipse - Nozioni Base 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

Panoramica: che cosa è necessario

Panoramica: che cosa è necessario Scheda 02 L installazione dell SDK G IOVANNI PULITI Panoramica: che cosa è necessario Per poter lavorare con applicazioni Java o crearne di nuove, il programmatore deve disporre di un ambiente di sviluppo

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Corso Eclipse. Prerequisiti. 1 Introduzione

Corso Eclipse. Prerequisiti. 1 Introduzione Corso Eclipse 1 Introduzione 1 Prerequisiti Uso elementare del pc Esecuzione ricerche su Internet Esecuzione download Conoscenza elementare della programmazione 2 1 Cos è Eclipse Eclipse è un IDE (Integrated

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

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente. Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito

Dettagli