Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione...

41
Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino [email protected] http://www.di.unito.it/~baldoni/didattica

Transcript of Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione...

Page 1: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

IntroduzioneFondamenti di programmazione Java

Matteo BaldoniDipartimento di InformaticaUniversita` degli Studi di TorinoC.so Svizzera, 185 I-10149 Torino

[email protected]://www.di.unito.it/~baldoni/didattica

Page 2: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

2

Chi sono? Come contattarmi?Matteo Baldoni

Dipartimento di InformaticaUniversità degli Studi di TorinoCorso Svizzera, 185I-10149 Torino (ITALY)

e-mail: [email protected]: http://www.di.unito.it/~baldoniTel.: +39 011 670 67 56Fax.: +39 011 75 16 03

Pagina del corso:http://www.di.unito.it/~baldoni/didattica/http://www.di.unito.it/~baldoni/didattica/aa0203/CorsoEnaip

“Sono nato a Torino nel 1968, nel febbraio1993 mi sono laureato con lode in Scienzedell’Informazione e nel febbraio 1998 sonodiventato Dottore in Ricerca in Informatica.Dal luglio 1999 sono ricercatore inInformatica presso il Dipartimento diInformatica dell’Università degli Studi diTorino.”

Page 3: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

3

Chi sono? Come contattarmi?Giovanni Bisceglia

Corso di Laurea in InformaticaUniversità degli Studi di TorinoCorso Svizzera, 185I-10149 Torino (ITALY)

e-mail: [email protected]: http://www.bice.it

Pagina del corso:http://www.bice.it/corsi/http://www.bice.it/corsi/CorsoEnaip

“Sono nato a Chivasso (TO) nel 1977, nelluglio 1996 ho conseguito la maturita`scientifica al liceo Newton di Chivasso. Stoconseguendo la laurea in Informaticapresso il Dipartimento di Informaticadell’Università degli Studi di Torino.”

Page 4: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

4

Bibliografia� Cay S. Horstman.

Concetti di Informatica efondamenti di Java 2. SecondaEdizione.Apogeo, 2002.ISBN: 88-503-2024-8Si veda anche:http://www.apogeonline.com/libri/02024/schedaCosto: 38 euro.

Page 5: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

5

Bibliografia

� Horstmann C. S. - Cornell G.

� Java 2 I fondamenti - secondaedizione, Mc Graw Hill, ISBN88-386-4181-1, Giugno 2001,pp. 826 con CD-ROM (Euro54,00)

� Java 2 tecniche avanzate, McGraw Hill, ISBN 88-386-4071-8,Aprile 2000 , pp. 842 con CD-ROM (Euro 55,50)

Page 6: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

6

Bibliografia� Eckel, B.Thinking in

Java. Second Edition.Prentice-Hall ComputerBooks, 2000. ISBN:0130273635 (anche on-line:http://www.bruceeckel.com)

� Schimdt, D.Programming Principlesin Java: Architecturesand Interfaces. (On-line:http://www.cis.ksu.edu/~schmidt/CIS200/)

Page 7: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

7

Bibliografia� Matteo Baldoni.

Un’introduzione alparadigma ad oggettiattraverso lo schema“Kernel-Modulo”. RapportoTecnico del Dip. DiInformatica e comparso neinumeri settembre, ottobre enovembre 2002 diMokabyte(http://www.mokabyte.it)

Page 8: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

8

JAVA:dove e come

Page 9: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

9

Cenni storici

� Il paradigma Object-Oriented (OO) non e` nuovo: Simula,Smalltalk, C++

� “Green”, 1991 della Sun Microsystem, linguaggio perdispositivi di consumo non legato ad un particolaremicroprocessore

� HotJava, 1994, un browser per internet� Netscape 2.0, 1995, abilitato all’uso di Java� Java 1.02, 1996� Java 1.1, 1997� Java 2, 1998 (versione 1.2 in poi)

Page 10: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

10

Java

� Le caratteristiche principali di Java

� Object oriented:� progettato per essere un linguaggio ad oggetti, anche se meno puro

di Smalltalk

� Robusto� non ci sono puntatori

� garbage collection

� Distribuito� costrutti per la concorrenza

Page 11: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

11

Java

� Indipendente dall'architettura� il compilatore genera codice intermedio (bytecode) che viene

interpretato

� Applicazioni su internet� applet� sicurezza

� Ambiente ricco di tipi di dati predefiniti� grafica� programmazione su internet� accesso a database

Page 12: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

12

Dove trovare Java?� Java e` disponibile

http://java.sun.com/j2se(Java 2 Standard Edition)

� Esistono versioni per:� Sun Solaris� Windows� Linux (anche in RPM)

� Java 2 RuntimeEnvironment

� Java 2 S.E. Documentation

Page 13: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

13

Dove trovare Java?� … spesso anche dal vostro

giornalaio (soluzione consigliatase non si ha un collegamento ainternet veloce)

� Java e` distribuito gratuitamentedalla Sun Microsystems

� Attualmente e` disponibile laversione 1.4.x

� Dalla versione 1.3.x tecnologiaHotSpot (just in time compiler)

� Compilatore e Java VM (con jitcompiler) della IBM

� jikes, compilatore opensourcedella IBM

� kaffe, Java VM opensource (conjit compiler)

� gcj, compilatore opensource incodice nativo della GNU (FreeSoftware Foundation)

Page 14: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

14

Cosa ci serve?

j2sdk1_3_0-win.exe(29,4 Mb)

j2sdk1_3_0-doc.zip(21,2 Mb)

tutorial.zip(9,15 Mb)

istruzioni di installazione

Page 15: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

15

Installazione di Java

� Per Windows bastano due “click”

� Per Linux è sufficiente lanciare lo script di installazione

� Si veda dettagli su:http://www.di.unito.it/~baldoni/didattica/aa0203/CorsoEnaip

� E` utile installarsi anche la documentazione e il tutorial informato HTML

Page 16: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

16

Installazione di Java: PATH

� Windows 9x (nell’autoexec.bat):� set PATH=%PATH%;C:\JDK1.3\BIN

� Windows NT/2000 (Risorse computer/Ambiente):� aggiungere la variabile utente PATH come per Win9x

� Linux/UNIX (nel .bashrc):� PATH=$PATH:/opt/jdk1.3/bin� EXPORT PATH

� Linux/UNIX (nel .cshrc):� aggiungere il path nella definizione della variabile PATH gia`

presente (set path=… )NOTA: controllare che non sia definita la variabile di ambiente

CLASSPATH

Page 17: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

17

Editor per Java

� La Sun distribuisce l’ambiente di sviluppo Forte (scritto inJava)

� Alcuni semplici editor disponibili nei nostri laboratori:� vim/gvim, syntax enlightment (opensource), windows e UNIX� TextPad, syntax enlightment, compile e run button

(shareware), solo per windows, shareware� jipe (http://jipe.sourceforge.org), syntax enlightment, compile

e run button, browsing dei metodi e delle classi (opensource),è scritto in Java, freeware

� Bluej (http://www.bluej.org), simula la creazione di oggetti el’interazione con esse (adatto per la didattica), freeware

Page 18: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

18

Il Tutorial� Una semplice guida alla

programmazione in Java

� È un ipertesto in HTML quindiconsultabile mediante unqualsiasi browser

Page 19: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

19

La Documentazione� Contiene TUTTE le

informazioni sulla versione inuso di Java

� In particolare contiene il Java 2Platform API Specification

� E` in formato HTML

� Nota: il tutorial e ladocumentazione NON sonoinclusi nell’installazione di Java

Page 20: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

20

JDK1.3: il direttorio

Gli eseguibili:• javac• java• javadoc• …

La documentazione sulleLibrerie (in HTML)

Il tutorial diJava (in HTML)

Esempi diprogrammi Java(e applet)

I sorgenti dellelibrerie

Il nome del direttorio di installazione

Page 21: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

21

Il primo programma in Java� Un semplice programma che da` il benvenuto nel mondo

della programmazione Java� Il linguaggio e` “case sensitive”� In un file di nome BenvenutoInJava.java (per convenzione

dello stesso nome dell’unica classe pubblica contenuta dalfile stesso)

public class BenvenutoInJava { public static void main(String[] args) { System.out.println("Benvenuto in Java!"); }}

BenvenutoInJava.java

nome della classe pubblica

metodooggetto di sistema

conclude unaistruzione

Page 22: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

22

Come usare javac e java

� Per compilare:� javac BenvenutoInJava.java

� … che produrra` un file BenvenutoInJava.class� per eseguire il programma:

� java BenvenutoInJava

javajavac

e` un compilatore e` un interprete

BenvenutoInJava.java BenvenutoInJava.class

Output

Bytecode !

Page 23: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

23

Interpretazione

� Interprete (JavaScript, Scheme, Prolog):Interazione. Più facile modificare un programmadurante l'esecuzione

Sparc/Solaris

Apple

Codice Sorgente

InterpreteSparc/Solaris

InterpreteMacOS

InterpreteIntel/GNU-Linux

Intel/GNU-LinuxIntel/Windows

Page 24: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

24

Interpretazione� Affinché le due persone di lingua

diversa possano dialogare tra diloro (nel caso nessuna delle dueconosca la lingua dell’altro) ènecessario che qualcunointerpreti (traduca sul momento)quanto dice una persona nellapropria lingua nella lingua di chiascolta

� Si interpreta quando ènecessario una strettainterazione, quando si desideradialogare e non solo trasmettereun messaggio

Page 25: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

25

Traduzione (o Compilazione)

� Compilazione (Pascal, C, Ada, C++):Efficienza di esecuzione. Il codice generatodal compilatore può essere ottimizzato,perché la compilazione è fatta una solavolta

Sparc/Solaris

Intel/GNU-LinuxIntel/Windows

Apple

Codice Sorgente

CompilatoreSparc/Solaris

CompilatoreMacOS

CompilatoreIntel/GNU-Linux

binario

binario

binario

Page 26: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

26

Traduzione (o Compilazione)� La traduzione è adatta per

comunicare messaggio, comead esempio una lettera

� Anche per effettuare unatraduzione è necessariol’intervento di qualcuno che siain grado di comprendere le frasidi un linguaggio e riportarle in unaltro ma questo può operare intempi separati rispetto lascrittura del messaggio e la sualettura

� La lettura è più rapida esemplice, il traduttore hasenz’altro avuto tempo permeglio adattare il testo

� ma si penalizza l’interattività

Page 27: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

27

Soluzione Mista: Java

� Soluzione mista (Java): Portabilità. Pereseguire un programma su macchinediverse è sufficiente implementarel'interprete del linguaggio intermedio, enon tutto il compilatore

Sparc/Solaris

Intel/GNU-Linux

Apple

Palm

Codice Java

Compilatore Java

bytecode

InterpreteJava/Solaris

InterpreteJava/MacOS

InterpreteJava/GNU-Linux

InterpreteJava/PalmOS

Page 28: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

28

Fondamenti

� La sintassi dei costrutti di base (dichiarazioni di variabili,istruzioni di base, ecc.) e` molto simile al linguaggio C

� Variabili e loro dichiarazione� Controllo del flusso

Page 29: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

29

Commenti

� Commenti su piu` linee possono essere fatti racchiudendolitra i simboli /* e */

� Commenti su di una sola linea possono essere fattifacendoli precedere dal simbolo //

� I commenti non compaiono nel codice eseguibile� Esiste anche il commento racchiuso tra /** e */

/* Commento su piu` linee */public class BenvenutoInJava { public static void main(String[] args) { System.out.println("Benvenuto in Java!"); // Commento su una sola linea }}

Page 30: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

30

Tipi primitivi

� Java e` un linguaggio fortemente tipato, ogni variabile deveavere un tipo dichiarato

� Esistono otto tipi primitivi, sei per i tipi di numeri, uno per icaratteri (codifica Unicode) e uno per boolean

� int (4 byte) - float (4 byte)� short (2 byte) - double (8 bytte)� long (8 byte) - char� byte (1 byte) - boolean

� I tipi primitivi non sono oggetti (puntatori)� Non dipendono dalla macchina di destinazione

Page 31: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

31

Dichiarazione di variabile

� identificatore = lettera (lettera | cifra)*� lettera e cifra nel senso “Unicode”� Lunghezza illimitata� Per convenzione si usano nomi che iniziano con una lettera

minuscola� L’inizializzazione e` come in C

int variabileIntera;long variabileInteraDi8byte;

double piGrecoApprossimato = 3.1415;boolean flag = false; // o false o true !

Assegnamento

Page 32: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

32

Operatori

� Operatori aritmetici: + - * / %� Assegnamento e operatori aritmetici: += -= *= /= %= (es. a

+= i;)� Operatori di incremento (in posizione di prefisso o di

suffisso di una variabile numerica): ++ e -- (es. i++; a=--i;)� Operatori relazionali e booleani: == != < > <= >= && || !� Operatori sui bit: & | ^ ~ >> <<� Parentesi: ( )

Page 33: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

33

Controllo del flusso

� Le stesse del C/C++� if then� if then else� while (loop indeterminato)� do while (loop indeterminato)� for (loop determinato)� switch� break

Page 34: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

34

If Then e If Then Else

� if (condizione) istruzione;� if (condizione) istruzione; else istruzione;� Al posto di un “istruzione;” puo` comparire un blocco di

istruzioni: { sequenza istruzioni }

[…]if (etaPersona > 18) { System.out.println(“Maggiorenne”); System.out.println(“Eta`: “ + etaPersona);}else System.out.println(“Minorenne”);[…]

Page 35: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

35

While

� while (condizione) { blocco di istruzioni }� Si puo` avere anche un’istruzione anziche` un blocco

(quindi conclusa come sempre da ;)

[…] int temp; while (z != w) { if (z < w) { temp = z; z = w; w = temp; } z -= w; } System.out.println(“Massimo Comune Divisore: “ + z);[…]

Calcola il MCDtra I numeri interi z e w

Page 36: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

36

Do While

� do { blocco istruzioni } while (condizione);� esegue il blocco di istruzioni almeno una volta� simile al repeat until del Pascal ma “cicla” per vero anziche`

per falso� e` usato piu` raramente rispetto al while[…] int i=0; int x=0; do { x = x * i; //oppure x = * i++; i++; } while (i<10);[…]

Page 37: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

37

For

� for (iniz.; condizione; step) { istruzioni }� Tipicamente utilizzato per la scansione di vettori (array)

[…]for (int i=0; i<n; i++) System.out.println(“Elemento” + i + “ : “ + elemento[i]);[…]

Page 38: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

38

Break

� Permette di uscire da un loop� break;� break etichetta;

[…]int i=0;for (i=0; i<n; i++) if (elemento[i] == elementoCercato) break;if (i != n) System.out.println(“Elemento trovato in pos.: “ + i);else System.out.println(“Elemento non trovato”);[…]

Page 39: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

39

Break

� Il codice precedente senza uso del break� il codice e` piu` complicato, ma …� … NON ABUSARNE

int i=0;boolean trovato = false;while (i<n && !trovato) { if (elemento[i] == elementoCercato) // oppure i++ trovato = true; i++;}if (trovato) System.out.println(“Elemento trovato in posizione: “ + i);else System.out.println(“Elemento non trovato”);

Page 40: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

40

Break� Serve per uscire da piu` loop annidati� Simile al famigerato “goto”, ma …� … NON ABUSARNE

[…]int i; int j;for_esterno:for (i=0; i<n; i++) for (j=0; j<m; j++) if (elemento[i][j] == elementoCercato) break for_esterno;if ((i != n) && (j != m)) System.out.println(“Elemento trovato in: “+i+“ “+j);else System.out.println(“Elemento non trovato”);[…]

Page 41: Introduzione - Dipartimento di Informatica …baldoni/didattica/aa0203/CorsoEnaip/...Introduzione Fondamenti di programmazione Java Matteo Baldoni Dipartimento di Informatica Universita`

41

Swicth

� Permette di gestire condizioni di scelta con moltealternative (cascata di if then else)

� In Java applicabile solo su valori di tipo char e numerici (manon long)

swicth (scelta){ case 1: … break; case 2: … break; case 3: … break; … default: … break;}

Senza break si eseguirebberole istruzioni dei casi successivia quello selezionato in cascata

sequenza di istruzioni