introduzione - diunitobaldoni/didattica/labpo0102/introduzione.pdf · 2 3 contenuti del corso...

25
1 Introduzione Laboratorio di Programmazione ad Oggeti 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 dell’Informazione e nel febbraio 1998 sono diventato Dottore in Ricerca in Informatica. Dal luglio 1999 sono ricercatore in Informatica presso il Dipartimento di Informatica dell’Università degli Studi di Torino.

Upload: others

Post on 21-Sep-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

1

IntroduzioneLaboratorio di Programmazione ad Oggeti

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 Informatica

Università degli Studi di Torino

Corso Svizzera, 185

I-10149 Torino (ITALY)

e-mail: [email protected]

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 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 2: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

2

3

Contenuti del corso� Paradigmi di programmazione: il ruolo dell’astrazione

� Java: dove e come

� Ogni oggetto ha un’interfaccia

� Ogni oggetto ha un tipo

� Riuso del software: composizione

� Riuso del software: ereditarieta`

� Polimorfismo e binding dinamico

� Gli oggetti prima di tutto: GUI, Event-driven programming el’architettura Model-View-Controller

� Package, Eccezioni e Thread

� I/O

� Java oltre: Applet, Servlet , RMI, ...

4

Bibliografia� Cay S. Horstman.

Concetti di Informatica efondamenti di Java 2.

Apogeo, 2001.

ISBN: 88-7303-668-6

Si veda anche:http://www.apogeonline.com/libri/00668/scheda

Page 3: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

3

5

Bibliografia� Eckel, B.

Thinking in Java.

Second Edition.

Prentice-Hall Computer Books,2000.

ISBN: 0130273635

� Disponibile anche gratuitamenteall’indirizzo

http://www.bruceeckel.com

dove e` possibile trovare anche“Thinking in C++” dello stessoautore

6

Bibliografia� Horstmann, C.

S.Cornell, G.

Core Java 2:Fundamentals.

Prentice Hall, 1999.

ISBN: 0130819336

Core Java 2:Advanced Features.

Prentice Hall, 1999.

ISBN: 0130819344

� Anche in italiano: Java2 i fondamenti. McGrawHill, 1999. e Java 2Tecniche avanzate.McGraw Hill, 2000.

Page 4: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

4

7

Bibliografia

Altri riferimenti:

� Schimdt, D. Programming Principles in Java: Architecturesand Interfaces. http://www.cis.ksu.edu/~schmidt/CIS200/

� Fowler, M. UML Distilled (2nd ed.), Addison WesleyLongman, Inc., 2000.

8

Paradigmi diProgrammazione:il ruolodell’astrazione

Page 5: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

5

9

Perché paradigmi diversi?

� Esistono numerose metodologie per lo sviluppo di software,che dipendono dalle applicazioni (studiate in Ingegneria delSoftware)

� La scelta opportuna di un linguaggio di programmazionepuò favorire l'adozione di una metodologia e facilitare lasoluzione di un problema

10

Astrazione

� Astrazione: identificare le proprietà importanti di unfenomeno, trascurando quelle irrilevanti

� Un programma realizza delle astrazioni. E' essenzialeconcentrarsi solo sulle proprietà rilevanti del fenomeno chesi vuole modellare

� La mente umana può ricordare solo pochi concetticontemporaneamente

� Lo sviluppo di un programma può procedere per livelli diraffinamento successivo delle astrazioni

Page 6: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

6

11

Il ruolo dell'astrazione

� Un linguaggio di programmazione deve esser il piùpossibile svincolato dalla macchina su cui viene eseguito,ed essere vicino al problema da risolvere

� Un linguaggio di programmazione deve fornire strumentiche facilitino lo sviluppo di astrazioni. In particolare:

� astrazioni sulle operazioni (procedure)

� astrazioni sui dati (moduli, tipi di dati astratti, classi)

12

Paradigmi

� Linguaggi imperativi: basati sulle nozioni di variabili eassegnamento - realizzano un astrazione sull'architetturadelle macchine

� Linguaggi funzionali e logici: basati su modelli astratti dicomputazione derivati da teorie formali (funzioni ricorsive,logica)

Page 7: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

7

13

Alcuni linguaggi Prolog

Lisp Scheme ML Miranda

Simula67 Smalltalk Java C#

C++

Cobol C Ada

Algol Pascal Modula2

Fortran

1960 1970 1980 1990 2000

14

Linguaggi ad oggetti

� I linguaggi di programmazione ad oggetti consentono diapplicare metodologie di sviluppo di programmi "objectoriented", ossia basate sugli oggetti (dati) che il sistemasoftware manipola.

� Questa metodologia si contrappone a quella piùtradizionale di sviluppare un programma secondo unapproccio funzionale (programmazione strutturata).

Page 8: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

8

15

Programmazione ad oggetti

� In molti casi l'organizzazione ad oggetti risulta la piùnaturale perché rispecchia in modo diretto il mondo che sivuole rappresentare:

� simulazione (automobili, semafori, aerei, …)

� software grafico (finestre, bottoni, menu, …)

� Progetto object oriented di software: costruzione di sistemisoftware come collezioni strutturate di implementazioni ditipi di dati astratti (B. Meyer)

16

I principali linguaggi ad oggetti

� Simula: progettato nel 1967 - capostipite dei linguaggi adoggetti

� Smalltalk: linguaggio ad oggetti "puro" - linguaggio"dinamico” non c'è controllo statico dei tipi

� C++: linguaggio "ibrido" - garantisce la compatibilità con il C

� Java: il più recente, creato dalla Sun

� C#: simile a Java, alla base della tecnologia .net diMicrosoft

Page 9: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

9

17

Caratteristiche dei linguaggi ad oggettiSette passi verso la felicità (secondo B. Meyer)

1. Struttura modulare basata sugli oggetti.

2. Gli oggetti sono implementazioni di tipi di dati  astratti.

3. Gestione automatica della memoria.(garbage collection)

4. Classi.Ogni tipo non semplice è un modulo, e ogni moduload alto livello è un tipo.

18

Caratteristiche dei linguaggi ad oggetti

5. Ereditarietà.

Una classe può essere definita come estensione orestrizione di un'altra.

6. Polimorfismo e binding dinamico.

Possibilità di fare riferimento ad oggetti di più diuna classe.

Le operazioni possono avere realizzazioni diversein classi diverse.

7. Ereditarietà multipla.Possibilità di ereditare da più di una classe.

Page 10: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

10

19

JAVA:dove e come

20

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

Page 11: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

11

21

Java

� Le caratteristiche principali di Java

� Object oriented:

� progettato per essere un linguaggio ad oggetti, anche se meno purodi Smalltalk

� Robusto

� non ci sono puntatori

� garbage collection

� Distribuito

� costrutti per la concorrenza

22

Java

� Indipendente dall'architettura

� il compilatore genera codice intermedio (bytecode) che vieneinterpretato

� Applicazioni su internet� applet

� sicurezza

� Ambiente ricco di tipi di dati predefiniti

� grafica

� programmazione su internet

� accesso a database

Page 12: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

12

23

Dove trovare Java?� Java e` disponibile

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

� Esistono versioni per:

� Sun Solaris

� Windows 95/98 e NT

� Linux (anche in RPM)

� Java 2 RuntimeEnvironment

� Java 2 S.E. Documentation

24

Dove trovare Java?

� … spesso anche dal vostro giornalaio (soluzioneconsigliata se non si ha un collegamento a internet veloce)

� Java e` distribuito gratuitamente dalla Sun Microsystems

� Noi useremo la versione per Windows

� Attualmente e` disponibile la versione 1.3

Page 13: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

13

25

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

26

Installazione di Java

� Per Windows… bastano due “click”

� Ricordarsi pero`:� set PATH=%PATH%;C:¥JDK1.3¥BIN

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

� Nota: la Sun NON distribuisce alcun ambiente di sviluppo,tutto viene eseguito dalla riga di comando

� Alcuni semplici editor sono (oltre il Notepad):� TextPad (http://www.textpad.com/)

� WinEdt (http://www.winedt.com/)

Page 14: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

14

27

Il Tutorial� Una semplice guida alla

programmazione in Java

� È un ipertesto in HTML quindiconsultabile mediante unqualsiasi browser

28

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 Java2

Page 15: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

15

29

JDK1.3: il direttorio

Gli eseguibili:• javac• java• javadoc• …

IMPORTANTE!!set PATH=%PATH%;C:¥JDK1.3¥BIN

La documentazione sulleLibrerie (in HTML)

Il tutorial diJava (in HTML)

Esempi diprogrammi Java(e applet)

I sorgenti dellelibrerie

Il nome del direttorio di installazione

30

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 convenzionedello 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 16: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

16

31

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 !

32

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 17: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

17

33

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

34

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 18: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

18

35

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à

36

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 19: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

19

37

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

38

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 20: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

20

39

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

40

Dichiarazione di variabile

� identificatore = lettera (lettera | cifra)*

� lettera e cifra nel senso “Unicode”

� Lunghezza illimitata

� Per convenzione si usano nomi che iniziano con una letteraminuscola

� L’inizializzazione e` come in C

int variabileIntera;long variabileInteraDi8byte;

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

Assegnamento

Page 21: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

21

41

Operatori

� Operatori aritmetici: + - * / %

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

� Operatori di incremento (in posizione di prefisso o disuffisso di una variabile numerica): ++ e -- (es. i++; a=--i;)

� Operatori relazionali e booleani: == != < > <= >= && || !

� Operatori sui bit: & | ^ ~ >> <<

� Parentesi: ( )

42

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 22: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

22

43

If Then e If Then Else

� if (condizione) istruzione;

� if (condizione) istruzione; else istruzione;

� Al posto di un “istruzione;” puo` comparire un blocco diistruzioni: { sequenza istruzioni }

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

44

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 23: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

23

45

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

46

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 24: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

24

47

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

48

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 25: Introduzione - DiUniTobaldoni/didattica/LabPO0102/introduzione.pdf · 2 3 Contenuti del corso Paradigmi di programmazione: il ruolo dell’astrazione Java: dove e come Ogni oggetto

25

49

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

50

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