• Non ci sono risultati.

dalla teoria alla programmazione

Nel documento Le basi della programmazione (pagine 21-37)

linguaggio, networking, I/O interfacce grafi che, programmazione concorrente ANDREA GINI – PAOLO AIELLO – LORENZO BETTINI – GIOVANNI PULITI

© MokaByte srl via Baracca, 132 50127 Firenze

http://www.mokabyte.it e-mail: info@mokabyte.it

© 2003, Tecniche Nuove via Eritrea, 21

20157 Milano

http://www.tecnichenuove.com Redazione:

tel. 0239090254 – 0239090257, fax 0239090255 e-mail: libri@tecnichenuove.com

Vendite:

tel. 0239090251 – 0239090252, fax 0239090373 e-mail: vendite-libri@tecnichenuove.com

ISBN 88-481-1553-5

Immagine di copertina: grafi ca Hops Libri su progetto di Lorenzo Pacini Realizzazione editoriale a cura di Escom – Milano

Tutti i diritti sono riservati a norma di legge e a norma delle convenzioni internazionali.

Nomi e marchi citati nel testo sono generalmente depositati o registrati dalle rispettive case produttrici.

Hops Libri è un marchio registrato Tecniche Nuove spa

Prefazione ... xv

Introduzione a Java... xvii

Le basi della programmazione...xvii Programma e linguaggio di programmazione...xvii Compilatore e Virtual Machine ...xviii Il primo approccio con la programmazione... xix I costrutti della programmazione ... xxii Struttura base di un programma Java ... xxii Commenti... xxiii Istruzione elementare... xxiii Sequenza...xxiv Variabili intere...xxv Struttura di controllo decisionale: il costrutto if - else ...xxvi Struttura di controllo iterativa: l’istruzione while...xxviii Programmi di esempio... xxx Cosa si può fare con questi costrutti?... xxxii

Capitolo 1 - Tipi di dati ... 1

Tipi interi...1 Tipi numerici fl oating point...2 Assegnamento di variabili fl oating point...3 Booleano...3 Assegnamento su variabili booleane...4 Caratteri...5 Promozioni e casting...5 Autoincremento e autodecremento...6

Capitolo 2 - Array... 9

Dichiarazione di array...10 Assegnamento...10 Dereferenziazione ...11 Differenza tra assegnamento e dereferenziazione...12 Inizializzazione automatica di un vettore ...14 Lunghezza di un vettore ...14 Un esempio di manipolazione di vettori ...14 Vettori multidimensionali ...16 Vettori incompleti ...17 Inizializzazione automatica di un vettore multidimensionale ...18

Capitolo 3 - Strutture di controllo decisionali... 21

Condizioni booleane ...21 Blocco di istruzioni e variabili locali...22 if – else...23 if – else annidati ...24 if – else concatenati ...25 Il costrutto switch – case...26 Espressioni condizionali ...27

Capitolo 4 - Strutture di controllo iterative ... 29

Ciclo while...29 Ciclo do – while...30 Ciclo for...30 Uso del for con parametri multipli...31 Cicli nidifi cati ...33 Uso di break ...34 L’istruzione continue...34 Uso di break e continue in cicli nidifi cati...35 Uso di break e continue con label ...35

Capitolo 5 - Uso degli oggetti... 37

La metafora degli oggetti ...37 Lo stato di un oggetto e i suoi attributi...38 Le modalità di utilizzo di un oggetto ...39 La metafora degli oggetti nella programmazione...39 Creazione di un oggetto...40 Il comportamento di un oggetto e i suoi metodi ...42

Gli attributi di un oggetto e il suo stato ...42 Interazione complessa tra oggetti...43 Oggetti di sistema...43 Stringhe ...44 Le stringhe e Java: creazione, concatenazione e uguaglianza...44 Vettori dinamici...49 Estrazione dell’insieme di chiavi o valori ...54 Wrapper class ...54

Capitolo 6 - Le classi in Java ... 57

Incapsulamento ...58 Dichiarazione di metodo...59 Dichiarazione di metodo con parametri ...60 Chiamata a metodo: la dot notation ...60 Parametro attuale e parametro formale...62 Passaggio di parametri by value e by ref ...63 Visibilità delle variabili: variabili locali...64 Identifi catori speciali this e super...72 Binding dinamico ...74 Upcasting, downcasting e operatore instanceof...75 Equals e operatore ==...76

Capitolo 7 - Costrutti avanzati ... 77

Classi astratte...77 Il contesto statico: variabili e metodi di classe...79

Interfacce...80 Interfacce per defi nire il comportamento ...80 Dichiarazione e implementazione di interfacce ...82 Un esempio concreto ...83 Tipi e polimorfi smo...85 Classi e interfacce interne ...85 I package...86 Dichiarazione di package...86 Compilazione ed esecuzione...87 Dichiarazione import ...88 Convenzioni di naming dei package...89 Principali package del JDK ...89 Modifi catori...90 Mofi catori di accesso...90 Final...91 Native ...92 Strictfp...92 Transient, volatile e synchronized ...92

Capitolo 8 - Eccezioni... 93

Errori ed eccezioni ...93 Gestione delle eccezioni...94 Costrutto try – catch – fi nally ...95 Gerarchia delle eccezioni...96 Propagazione: l’istruzione throws ...97 Lancio di eccezioni: il costrutto throw...98 Catene di eccezioni ...99 Eccezioni defi nite dall’utente ...100 Esempio riepilogativo ...101

Capitolo 9 - Assert in Java: tecniche e fi losofi a d’uso... 103

Cosa sono le assert ...103 Sherlock Holmes e la fi losofi a delle Assert ...104 Sintassi delle assert...106 Compilazione ed esecuzione di codice con assert ...106 Abilitazione e disabilitazione selettiva...108

Capitolo 10 - Input/Output... 109

Introduzione...109

Stream...109 Le classi FilterOutputStream e FilterInputStream ...117 Le classi DataOutputStream e DataInputStream ...117 Descrizione classe DataOutputStream...118

I fi le...127 Le classi FileOutputStream e FileInputStream ...131 Descrizione classe FileOutputStream ...131 Le classi PrintStream e PrintWriter ...134 Altre classi e metodi deprecati...134

Capitolo 11 - Programmazione concorrente

e gestione del multithread in Java... 135

Introduzione...135 Processi e multitasking...135 Thread e multithreading ...138 I thread e la Java Virtual Machine ...139 La programmazione concorrente in Java ...140 Creazione e terminazione di un thread ...141 L’interfaccia Runnable ...142 Identifi cazione del thread ...146 Maggior controllo sui thread ...146 Una fi ne tranquilla: uscire da run() ...146 Bisogno di riposo: il metodo sleep()...147 Gioco di squadra: il metodo yield() ...148 La legge non è uguale per tutti: la priorità...149 E l’ultimo chiuda la porta: il metodo join() ...151 Interruzione di un thread ...154 Metodi deprecati...155 La sincronizzazione dei thread ...156 Condivisione di dati fra thread...156 Competizione fra thread...158

Lock e sincronizzazione...162 Visibilità del lock...164 Deadlock ...165 Class lock e sincronizzazione di metodi statici ...166 Comunicazione fra thread...167 Condivisione di dati ...167 Utilizzo dei metodi wait() e notify() ...170 Il metodo notifyAll()...172 Deamon thread...172 I gruppi di thread...173 Informazioni sui thread e sui gruppi...174 Thread group e priorità ...174 Progettazione top down di interfacce grafi che ...188 La gestione degli eventi...188 Uso di adapter nella defi nizione degli ascoltatori ...190 Classi anonime per defi nire gli ascoltatori ...191

Capitolo 13 - Bottoni e menu ... 193

Pulsanti ...193

JPopupMenu...207 Gestire gli eventi con le action ...210 Descrizione dell’API...210 Uso delle Action...211

Capitolo 14 - Controlli per inserimento dati ... 213

Tipologie di controlli...213 JTextField...213 JPasswordField ...214 JComboBox...215 JList ...217 JSlider ...222 JTextArea...226

Capitolo 15 - Pannelli, accessori e decorazioni... 229

Pannelli...229 JTabbedPane ...233 Accessori e decorazioni...235 JOptionPane...235 JFileChooser...238 Colori e JColorChooser ...240 Font e FontChooser...242 Pluggable look & feel...246 Border...249 Un’applicazione grafi ca complessa...251

Capitolo 16 - Il disegno in Java ... 257

Il disegno in Java ...257 JComponent e il meccanismo di disegno ...257 L’oggetto Graphics...258 Adattare il disegno alle dimensioni del clip ...260 Disegnare immagini ...262 Disegnare il testo...263 Eventi di mouse...266 Eventi di tastiera ...269 Disegno a mano libera ...272

Capitolo 17 - Networking... 275

I messaggi HTTP GET e POST...284 La classe Socket...285 Nuove estensioni e classi di utility presenti nella piattaforma Java 2...299 La classe HttpURLConnection ...299 Metodi ...299 La classe JarURLConnection...300 Metodi ...301

Capitolo 18 - JavaBeans... 303

La programmazione a componenti...303 La specifi ca JavaBeans ...304 Il modello a componenti JavaBeans ...304 Proprietà...304 Metodi ...304 Introspezione...305 Personalizzazione ...305 Persistenza...305 Eventi...305 Deployment...306 Guida all’implementazione dei JavaBeans ...306 Le proprietà...306 Un esempio di Bean con proprietà bound...310 Eventi Bean ...315 Un esempio di Bean con eventi ...319 Introspezione: l’interfaccia BeanInfo ...322 Esempio...323 Personalizzazione dei Bean...325 Serializzazione ...329

Appendice A - Installazione dell’SDK... 331

Scelta del giusto SDK...331 Installazione su Windows ...332 Installazione su Linux ...336 Bibliografi a ...337

Appendice B - Ginipad, un ambiente di sviluppo per principianti... 339

Caratteristiche principali ...340 Tabella riassuntiva dei comandi...341 Installazione ...342 Cosa fare se Ginipad non trova il JDK ...343

Appendice C - Parole chiave ... 345

Appendice D - Diagrammi di classe e sistemi orientati agli oggetti ... 347

Classi e interfacce UML...348 Ereditarietà e realizzazione ...349

Associazione ...350 Aggregazione ...351 Dipendenza ...352

Indice analitico... 353

Esiste, fra chi si occupa di didattica dell’informatica, un accordo pressoché generale su quali concetti siano essenziali per una introduzione alla programmazione: programmi, variabili, istruzioni di assegnamento e di controllo, procedure e quant’altro.

Esiste un accordo quasi altrettanto generale sul fatto che la programmazione orientata agli oggetti e in particolare il linguaggio Java siano ormai essenziali nella formazione di un buon programmatore.

Storicamente la didattica della programmazione è stata impostata utilizzando linguaggi impe-rativi relativamente semplici, come Pascal o C. La programmazione a oggetti veniva introdotta in una fase successiva, e comportava il passaggio a un linguaggio diverso (Java o C++).

Da qualche tempo si è verifi cata la possibilità di utilizzare direttamente Java come “primo linguaggio” di programmazione, esaminandone prima gli aspetti elementari e subito dopo quelli più evoluti, legati in particolare al concetto di oggetto. Questo approccio ha dato risultati sod-disfacenti, in quanto evita le dispersioni derivanti dall’uso di contesti linguistici differenti. Si è però scontrato con la carenza di testi introduttivi basati su Java.

Questo manuale risponde all’esigenza di introdurre alla programmazione partendo “da zero”

e appoggiandosi direttamente su Java. Risponde anche a un’altra esigenza: spiegare i concetti in modo accessibile ma rigoroso, evitando sia le banalizzazioni, sia il ricorso a un eccesso di formalismo. Si tratta di un equilibrio diffi cile, che sembra essere stato qui raggiunto in modo effi cace. In concreto: il manuale ha le dimensioni, la comprensibilità, la precisione adeguate per consentire di acquisire in un tempo ragionevole le conoscenze e le competenze di base sulla programmazione in generale e su Java in particolare.

FRANCESCO TISATO

Professore Ordinario di Informatica Coordinatore dei Corsi di Studio in Informatica Università degli Studi di Milano-Bicocca

Capitolo 1

Nel documento Le basi della programmazione (pagine 21-37)

Documenti correlati