Struttura di un programma Java



Documenti analoghi
Programmare in Java. Olga Scotti

Java: Compilatore e Interprete

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

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

Concetto di Funzione e Procedura METODI in Java

2 - Introduzione al linguaggio Java

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

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

Appunti di Informatica 1

Scrivere un programma in Java

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Le variabili. Olga Scotti

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

Eclipse. Avviare un progetto e compilare un semplice programma

Funzioni in C. Violetta Lonati

Programmazione in Java Parte I: Fondamenti

Primi programmi in Java. Lezione IV

LINGUAGGI DI PROGRAMMAZIONE

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

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

Corso di Informatica

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Fasi di creazione di un programma

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:

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione

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

Linguaggio C - Funzioni

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};

4 3 4 = 4 x x x 10 0 aaa

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

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Programmazione Orientata agli Oggetti in Linguaggio Java

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

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

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

Codifica: dal diagramma a blocchi al linguaggio C++

Introduzione alla programmazione in C

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011.

I file di dati. Unità didattica D1 1

Alcune regole di base per scrivere un programma in linguaggio C

Algoritmi di Ricerca. Esempi di programmi Java

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Da JavaScript a Java

ISTRUZIONI XCODE. Autore: Luca Florio (luca.florio<at>polimi.it)

Creare un sito Multilingua con Joomla 1.6

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

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


Utilizzo delle classi

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

Prova di Laboratorio di Programmazione

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

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

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Variabili e tipi di dato

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

SOMMARIO... 3 INTRODUZIONE...

Mac Application Manager 1.3 (SOLO PER TIGER)

Java? Sì, grazie. Scopo del corso

Aritmetica dei Calcolatori 2

Capitolo 2. Operazione di limite

4. Un ambiente di sviluppo per Java

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

Lezioni di Laboratorio sui Data Base

Guida all uso di Java Diagrammi ER

10 - Programmare con gli Array

MANUALE PARCELLA FACILE PLUS INDICE

Le command line di Java

STAMPA UNIONE DI WORD

Organizzazione degli archivi

UML Diagrammi delle classi. UML Diagramma classi 1

Sistema operativo: Gestione della memoria

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Soluzione dell esercizio del 2 Febbraio 2004

La selezione binaria

risulta (x) = 1 se x < 0.

Analizzatore lessicale o scanner

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

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

Modulo 4: Ereditarietà, interfacce e clonazione

Programmazione ad oggetti

Come costruire una presentazione. PowerPoint 1. ! PowerPoint permette la realizzazione di presentazioni video ipertestuali, animate e multimediali

Introduzione al Linguaggio C

NOZIONI BASE PER ESERCITAZIONI

Strumenti per la programmazione

Eclipse - Nozioni Base

Le query di raggruppamento

Laboratorio di programmazione

Introduzione a ROOT. 1. Informazioni generali

Come ragiona il computer. Problemi e algoritmi

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

Object Oriented Programming

Laboratorio di Informatica

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

MOBS Sistema di interscambio dati Mobilità Sanitaria Guida al linguaggio XSD

Come modificare la propria Home Page e gli elementi correlati

Esercizi su. Funzioni

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

Transcript:

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 contengono dichiarazioni ed istruzioni (terminate da ;). Un metodo implementa un sottoprogramma (in modo simile alle funzioni e procedure in linguaggi come C e Pascal). Un oggetto è un istanza di una classe. Un programma in Java può essere visto anche come una collezione di oggetti che soddisfano certi requisiti e che interagiscono tramite delle funzionalità rese pubbliche (tipo di dato astratto). Supponiamo di voler scrivere un semplice programma Java che stampa sul video la stringa (o sequenza di caratteri) Ciao!. Occorre una Java Virtual Machine (ovvero un interprete per Java). In queste note faremo riferimento a JDK (Java Development Kit), un ambiente di programmazione in Java molto spartano. Dopo aver creato una cartella (o directory) in cui mettere i file contenenti i primi esercizi in Java, tramite un editore di testo apriamo un file Ciao.java in cui viene scritto il seguente programma: class Ciao { System.out.println("Ciao!"); Notare che il nome della classe coincide con quello del file. La convenzione standard in Java consiste nell avere una sola classe per file ed il nome della classe coincide con il nome del file (terminato dal suffisso.java). Facciamo alcuni commenti sul programma appena scritto. Abbiamo detto che un programma Java è costituito da un insieme di classi. Qui abbiamo una sola classe la cui dichiarazione inizia con la parola riservata class seguita dal nome (identificatore) della classe Ciao e da una parentesi graffa aperta (che sarà chiusa alla fine della dichiarazione della classe). La classe Ciao contiene un metodo, che si chiama main. In Java ogni metodo può essere chiamato (invocato) solo all interno di un altro metodo. Quindi occorre un metodo iniziale per far partire l esecuzione del programma. Tale metodo iniziale è il metodo main, il quale deve essere sufficientemente generale. L intestazione del metodo main è public static void main (String[] args) ed è sempre la stessa 1. Il metodo main si caratterizza per le seguenti proprietà: - è pubblico (denotato tramite la parola riservata public), ovvero visibile da ogni altro punto del programma; - è statico (denotato tramite la parola riservata static), in quanto all inizio non sono stati creati ancora degli oggetti; - non restituisce niente (denotato tramite la parola riservata void), in quanto non vi è alcun metodo che lo chiama a cui restituire un valore; - i dati in ingresso sono visti come array di stringhe (oggetti della classe predefinita String). Riparleremo piú avanti di come dare i dati in input. Notiamo che nel programma riportato sopra non viene utilizzato alcun dato in input. Una volta salvato il file, dalla shell dei comandi è adesso possibile compilare il codice sorgente contenuto nel file Ciao.java tramite il comando javac nel modo seguente: 1 In alcuni testi la parte tra parentesi è scritta String argv[]. In Java il tipo array di String può essere denotato anche con le parentesi quadre messe dopo l identificatore di array (args o argv in tal caso), ma si sconsiglia fortemente questa scrittura suggerendo invece di usare la notazione in cui il tipo è scritto in modo compatto, ovvero String[]. Per quanto riguarda l uso di args o argv, in queste note si scriverà args, ma essendo questo il nome (identificatore) del parametro formale del metodo main, può essere scelto un qualsiasi identificatore legale.

javac Ciao.java La fase di compilazione ha successo (il codice è sintatticamente corretto) e la macchina ci presenta il prompt. Se invece il compilatore segnala delle situazioni di errori, occorre cercare di capire dove sono e quali sono le modifiche da fare. Una volta salvate le modifiche, il file Ciao.java può essere compilato nuovamente. Se la compilazione ha successo, si può vedere che la cartella contiene un file Ciao.class che viene generato dal compilatore e che rappresenta il codice Bytecode (per visualizzare il Bytecode occorre dare il comando javap -c Ciao). A questo punto è possibile eseguire il programma tramite il comando java seguito dal nome del file (senza suffisso) nel modo seguente: java Ciao Se non vi sono errori in fase di esecuzione (e questo è il caso), viene stampato Ciao! sul video, si va a capo e si ha un nuovo prompt. Infatti, nell istruzione System.out.println("Ciao!"); si ha la chiamata del metodo println della classe (predefinita) PrintStream sul campo out della classe System, che stampa la stringa (racchiusa tra i doppi apici) che compare dentro le parentesi e poi va a capo. Se si usa il metodo print al posto di println, viene stampata la stessa stringa Ciao!, ma non viene effettuato il ritorno a capo. Polimorfismo e overloading Dire che cosa viene stampato dal programma seguente: class ProvaStampa { System.out.println("start"); System.out.print("abc"); System.out.print(1); System.out.println(); Notare che sia il metodo print che il metodo println sono usati in vari modi diversi: si ha lo stesso nome, ma parametri in numero e/o tipo diversi. Si dice che il metodo è sovraccaricato (dall inglese overloaded). Piú in generale si dice che il metodo è polimorfico. Molti metodi predefiniti in Java sono polimorfici per lavorare diversamente su interi, numeri reali, stringhe, etc. Un classico esempio di operatore polimorfico è il + che denota sia la somma su numeri interi (int), numeri decimali (float, double), etc., che la concatenazione di stringhe. Ad esempio, dato il seguente programma Java: class Stampa { System.out.println("abc"); System.out.println(1+3); System.out.print("hello, "); System.out.print("world!"); System.out.println(); System.out.println("ab"+"cdef"); System.out.println("34"+"ciao"); System.out.println(34+"ciao"); System.out.println(7+3+"hip"); System.out.println(7+"hip"+3); System.out.println(7+(3+"hip"));

dopo averlo compilato tramite javac Stampa.java, l esecuzione tramite il comando java Stampa dà luogo al seguente output: abc 4 hello, world! abcdef 34ciao 34ciao 10hip 7hip3 73hip Da notare che in presenza dell operatore + e di una stringa tra i suoi operandi, anche gli altri operandi sono considerati come stringhe (va ricordato che in Java l operatore + è associativo a sinistra). N.B. Ogni metodo Java è seguito da una coppia di parentesi ( ), anche se il metodo non ha parametri (espliciti). Astrazione sui dati in input Supponiamo di voler scrivere un programma Java che calcola e stampa la somma di due numeri interi. Per esempio, se vogliamo sommare i numeri 7 e 4, possiamo scrivere: class Somma1 { System.out.println(7+4); La chiamata del metodo println con parametro attuale (o argomento) l espressione 7+4 viene eseguita valutando dapprima l espressione 7+4, dando come risultato 11, e quindi tale valore viene stampato sul video. Di nuovo però non abbiamo sfruttato la possibilità di dare in ingresso valori di volta in volta diversi, di cui si vuole calcolare la somma. I due valori che vogliamo passare come input al programma sono denotati tramite args[0] ed args[1], rispettivamente il primo ed il secondo elemento dell array args (come vedremo piú avanti, gli elementi di un array monodimensionale sono individuati tramite un indice che parte da 0). Possiamo quindi pensare di scrivere il seguente programma: class Conc { System.out.println(args[0]+args[1]); Una volta compilato, il programma viene eseguito passandogli come input una sequenza di valori cosí come richiesto dal programma. In questo caso il programma si aspetta due valori da sommare, quindi dovremo fornire due interi, che vengono semplicemente scritti l uno dopo l altro separati da uno spazio bianco: java Conc 7 4 Il risultato che viene stampato non è però 11, ma 74. Infatti, occorre ricordare che l input al programma (ovvero al metodo main) è un array di stringhe, quindi i due valori in input 7 e 4 sono considerati come stringhe e di conseguenza l operazione applicata (denotata tramite l operatore polimorfico +) è la concatenazione di stringhe. Da ciò segue il risultato dato dalla stringa 74. Facciamo qualche test di verifica:

java Conc abc defg abcdefg java Conc "abc" "defg" abcdefg java Conc abc 11 abc11 java Conc 13 65 1365 java Conc Exception in thread "main" java.lang.arrayindexoutofboundsexception: 0 at Conc.main(Conc.java:3) java Conc ab Exception in thread "main" java.lang.arrayindexoutofboundsexception: 1 at Conc.main(Conc.java:3) java Conc ab cd ef abcd Per effettuare la somma sui valori dati in ingresso, che sono sempre presi come stringhe, occorre convertire tali valori in interi tramite il metodo parseint della classe Integer. Modifichiamo quindi il programma ottenendo il seguente: class Somma { int x = Integer.parseInt(args[0]); int y = Integer.parseInt(args[1]); System.out.println(x+y); Occorre fare una conversione simile anche se si vuole sommare due numeri decimali: class SommaDouble { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); System.out.println(x+y); In tal caso avremo: javac SommaDouble.java java SommaDouble 3.5 7.4 10.9 mentre utilizzando il programma Conc si ha: javac Conc.java java Conc 3.5 7.4 3.57.4

Esercizi 1. Scrivere un programma Java che, dati in ingresso la base e l altezza di un rettangolo, stampa la sua area. class AreaRett { double b = Double.parseDouble(args[0]); double a = Double.parseDouble(args[1]); System.out.println(b*a); 2. Scrivere un programma Java che, dati in ingresso la base e l altezza di un triangolo, stampa la sua area. class AreaTriang { double b = Double.parseDouble(args[0]); double a = Double.parseDouble(args[1]); System.out.println((b*a)/2);