Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia...

9
Introduzione Programmazione in Rete e Laboratorio 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 2 Chi sono? Come contattarmi? Matteo Baldoni Dipartimento di Informatica Università degli Studi di Torino Corso Svizzera, 185 I-10149 Torino (ITALY) e-mail: baldoni @di.unito. it URL: http://www.di.unito.it/~baldoni Tel.: +39 011 670 67 56 Fax.: +39 011 75 16 03 Pagina del corso: http://www.di.unito.it/~baldoni/didattica/ Sono nato a Torino nel 1968, nel febbraio 1993 mi sono laureato con lode in Scienze dellInformazione e nel febbraio 1998 sono diventato Dottore in Ricerca in Informatica. Dal luglio 1999 sono ricercatore in Informatica presso il Dipartimento di Informatica dellUniversità degli Studi di Torino.3 Bibliografia Horstmann C. S. - Cornell G. Java 2 I fondamenti - seconda edizione, Mc Graw Hill, ISBN 88-386-4181-1, Giugno 2001, pp. 826 con CD-ROM (Euro 54,00) Java 2 tecniche avanzate, Mc Graw Hill, ISBN 88-386-4071-8, Aprile 2000 , pp. 842 con CD- ROM (Euro 55,50) 4 Bibliografia Eckel, B.Thinking in Java. Second Edition. Prentice-Hall Computer Books, 2000. ISBN: 0130273635 (anche on- line: http://www.bruceeckel.co m) Schimdt, D. Programming Principles in Java: Architectures and Interfaces. (On-line: http://www.cis.ksu.edu/~s chmidt/CIS200/) 5 Bibliografia Cay S. Horstman. Concetti di Informatica e fondamenti di Java 2. Apogeo, 2001. ISBN: 88-7303-668-6 Si veda anche: http://www.apogeonline.com/libri /00668/scheda Nel 2002 e` uscita la seconda edizione. 6 Bibliografia Fowler M. UML Distilled prima edizione italiana, Guida rapida allo standard Object Modeling Language, Addison Wesley, pp 157, ISBN 88-7192-087-2, Settembre 2000 (Euro 24,79) UML Distilled (2nd ed.), Addison Wesley Longman, Inc., 2000.

Transcript of Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia...

Page 1: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

1

IntroduzioneProgrammazione in Rete e Laboratorio

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

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

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/

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

3

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)

4

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/)

5

Bibliografia■ Cay S. Horstman.

Concetti di Informatica efondamenti di Java 2.Apogeo, 2001.ISBN: 88-7303-668-6Si veda anche:http://www.apogeonline.com/libri/00668/scheda

Nel 2002 e` uscita la secondaedizione.

6

Bibliografia■ Fowler M.

◆ UML Distilled prima edizioneitaliana, Guida rapida allostandard Object ModelingLanguage, Addison Wesley, pp157, ISBN 88-7192-087-2,Settembre 2000 (Euro 24,79)

◆ UML Distilled (2nd ed.), AddisonWesley Longman, Inc., 2000.

Page 2: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

2

7

Bibliografia■ Matteo Baldoni.

Un’introduzione alparadigma ad oggettiattraverso lo schema“Kernel-Modulo”.Rapporto Tecnico del Dip.Di Informatica e comparsonei numeri settembre,ottobre e novembre 2002 diMokabyte(http://www.mokabyte.it)

8

JAVA:dove e come

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)

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

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

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 3: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

3

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)

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

15

Installazione di Java

■ Per Windows bastano due “click”

■ Per Linux è sufficiente lanciare lo script di installazione

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

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

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◆ jipe (http://jipe.sourceforge.org), syntax enlightment, compile

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

18

Il Tutorial■ Una semplice guida alla

programmazione in Java

■ È un ipertesto in HTML quindiconsultabile mediante unqualsiasi browser

Page 4: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

4

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 diJava

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

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 contenutadal file 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

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 !

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

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 5: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

5

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

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à

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

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

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

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 6: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

6

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

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: ( )

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

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”);[…]

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

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 7: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

7

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]);[…]

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”);[…]

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”); 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”);[…]

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

42

Array

■ Gli array sono oggetti veri e propri (e quindi vanno primacreati esplicitamente dal programmatore per essereutilizzati)

■ Hanno una dimensione fissa (dopo la creazione)■ Esistono solo unidimensionali (ma e` possibile definire

array di array)■ Il primo elemento ha indice “0”■ La creazione avviene mediante l’operatore new■ Gli elementi di un array possono essere oggetti qualsiasi■ Libreria Java Collection (Vector, List, Map, ecc.)

Page 8: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

8

43

Array■ Es.: la dichiarazione di un array che puo` contenere

100 numeri interi■ Gli elementi saranno indicizzati da 0 a 99■ Controllo a run time sul valore dell’indice

int[] arrayOfInt = new int[100];

operatore che permette di creare un oggetto

numero dielementi dell’arraynome dell’array

tipo di un elementodell’array

tipo array

arrayOfInt[5]

indice

44

Array

■ Il nome dell’array e` un puntatore ad una strutturacontenente i vari elementi

■ ma differenza del C/C++ il nome dell’array non indicaanche il primo elemento dell’array stesso (non esisteun’aritmetica dei puntatori)

■ In Java non esistono analoghi di & e * del C/C++

int array_interi[];int *array_interi;

array_interi[2]*(array_interi + 2)

in C/C++ sono equivalenti

in C/C++ sono equivalenti

45

Array■ Se assegno un array ad un altro non copio gli

elementi che esso contiene ma semplicemente ilvalore del puntatore, i due array condivideranno lastessa struttura (esiste pero` arraycopy nella classeSystem)

■ length restituisce la lunghezza di un array

int[] arrayOfInt = new int[6];[…]int[] altroArrayOfInt;[…]altroArrayOfInt = arrayOfInt;[…]System.out.println(arrayOfInt.length);

stampa 6

arrayOfInt

altroArrayOfInt

46

Inizializzazione di array

■ Mediante un loop (tipicamente un ciclo for)■ oppure durante la definizione stessa■ array anonimi come parametri attuali

int[] arrayOfInt = new int[100];for (int i=0; i<100; i++) arrayOfInt[i] = i;

int[] arrayOfInt = {1, 2, 4, 10}; utile per array conpochi elementi

new int[] {1, 2, 4, 10} utile per essere passatocome parametro attualedi un metodo senza dovercreare solo per questo unavariabile

[…]a.metodo(new int[] {1, 2, 4, 10});[…]

47

Array multidimensionali

■ Ossia array di array (ma non matrici!)■ Ossia un elemento di un array puo` essere a sua volta un

array

int[][] arrayOfArrayOfInt = new int[10][5];

int[][] arrayOfArrayOfInt = new int[10][];for (int i=0; i<10; i++) arrayOfArrayOfInt[i] = new int[5];

int[][] arrayOfArrayOfInt = new int[10][];for (int i=0; i<10; i++) arrayOfArrayOfInt[i] = new int[i];

quadrato dielementi 10 x 5

triangolo di elementi

48

Il metodo toString()

■ E` il metodo che viene automaticamente richiamato per laconversione di un oggetto in una stringa da stampare

■ Puo` essere ridefinito per adattarlo alle proprie esigenze

Page 9: Introduzione - di.unito.itbaldoni/didattica/aa0304/ProgInRete/Introduzione.pdf · 2 7 Bibliografia Matteo Baldoni. Un’introduzione al paradigma ad oggetti attraverso lo schema “Kernel-Modulo”.

9

49

Il metodo toString()public class Counter {

public Counter() { nomeContatore = "Contatore anonimo";

}public Counter(int val){

c = val;nomeContatore = "Contatore anonimo";

}public Counter(int val, String nome){

c = val;nomeContatore = nome;

}[…]

public void setName(String nome) {nomeContatore = nome;

}public String toString(){

return ("Valore contatore " + nomeContatore + ": " + c);}private int c;private String nomeContatore;

}

overriding dell’omonimometodo nella classe Object

Un nome al contatore

50

Metodi e Parametri

■ Il passaggio dei parametri in un metodo avviene solo esempre per valore

■ Ad un metodo possono essere passati oggetti comeparametri

■ Attenzione! Gli oggetti sono in pratica puntatori quindi e` ilpuntatore che viene passato per valore non l’oggetto cherappresenta

■ Array come parametri (gli array sono oggetti!)