Upload
vanliem
View
229
Download
0
Embed Size (px)
Citation preview
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.
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
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
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
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
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);[…]
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.)
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
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!)