• Guida compi a programmazion OJ>yri .-ht ~:> Ulri o I l<)CJlli · • ditl->rc S.p.A. 202() ''ir• IJ,JeJ>li f>, 2<>1'.ll {l1 ;1Jy) Mii~,,,,, t< I. I ~\!J ()2 Hf;it 871 - f ~1x I :J!) {)'.J 8() ,~HH<i J'>li @ltt>f'J>li .il <'·11tt.til l1c> www.hocplJ"editorc.it Clil'itli ll l~I cJi J<·~g<• 'fllf fj j SC)llC) l'ÌSC' l'Vél t i :1 ll C>J i11tc1 l! :\ 1)()J'llll\ clc~llc COll Vl'llZÌC) l'li lltl'l.i()f};tJi l " fcl1<1C<>J>i ~ 1>c1· ttti<> r>crs<Jt1al<· clc·J Jc·ll<JrC' J><JHH<>n<> cHRt:r<; pffc·tlu~Jf(• nf!j Jirnit i cJc] J >'>/t, di c..ia K;Un ' '<>l\1111c/ fa cic~c1lcl cli })t•riod1cc> clic•l1c J pagarr1c11lc> allH S JA J~ dc·l Cf>ITlf>'~ns<J f>I' v1bU> cjaJJ'art. 6~, con1111i •f e; 5, cl<~llét legge.• 22 (tprilc 1941 n . <>:~~3. Le fotocc>J>ic cffcttt1alc per finalità cli carattere profcaHi<Jnalc, (•con<>mic<> cc1mmcrcial" r; ' 11rnunque (J per uso diverso ,J<1 qt1cl lo personale posson<> cssc•rc cffclluatc aschruito di spcc1fica 11ne n1a· atJtorJZ'.i"..a/.1 sciai.a d'l CI. . EA l~~(li, CC'nlro Licenze Aulorizzazi<Jni per Jc Jliproduzionj .Editoriali; V>rbCJ di Porta C' Romana 108, 2()122 Milano, e-mail: autorizzazioni @clcarcdi.org e sito web: www.cJcarcdi.org. ISBN: 978-88-203-9930-6 rustampa: 4 3 2 1 2021 2022 2023 2024 Progetto editoriale: Emanuele Giuliani ([email protected]) Revisione linguistica: Marialuisa Grillo Copertina: Sara Taglialegne Per il fontjoW'••al Dingbats 3 si ringrazia Dieter Steffi11ann: https://www.1001fonts.com/users/steffmann/ Per Je icone si ringraziano: Gregor Cresnar: https://www.flaticon.com/authors/gregor-cresnar Freepik: https:// www.flaticon.com/a uthors/freepik Pauae()I: https://www.flaticon.com/authors/ pause08 Pixel perfect: https://www.flaticon.com/ authors/pixel-perfect Stampa: LegoDigit S.r.L., Lavis {TN) Printed in Italy I n d i c e e n e r a l e Prefazione XXIII Parte I - Le basi del linguaggio 1 Capitolo 1 - Introduzione a Java 3 1.1 Prerequisiti: concetti informatici di base 4 1.1. l Hardware 5 5 l.l.1.1 Processore 1.1.1.2 Memoria 6 1.1.2 Software 6 1.1.2. l Sistc1ni op erativi 6 1.1.2.2 Tipologie di software 6 1.1.3 Linguaggi di programmazione 7 8 1.1.3.1 Linguaggio macchina 8 1.1.3.2 Linguaggi compilati 10 1.1.3.3 Linguaggi interpretati 1.2 Introduzione a Java 11 11 1.2.1 Cos'èjava J 12 1.2.2 Caratteristiche del linguaggio ava 1.2.3 False convinzioni sujava 15 1.3 Il nostro primo programma 17 18 1.3.1 Ambienti di sviluppo 18 1.3.1.1 Soluzione classica 18 1.3. 1.2 Soluzione per esperti 19 1.3.1.3 Soluzione per chi inizia 20 1.3.2 Programmiamo 21 1.3.2. l Scrivere il codice sorgente 26 1.3.2.2 Salvare il file sorgente 26 1.3.2.3 Compilare il file sorgente 27 1.3.2.4 Eseguire il programma V !!)dice generale 1 .. 4 Il nostro secondo programma 2H J.'1.1 U11 )Jf(>gra1111Tia i11tcr,1ltivc) 2H I .•1 .2 A111,lisi ciel J)rog1,11nma rign r>er r ign 2~) I .4 .3 ']èstare il progr~1n11n'' :l~l 1.5 Il Java Development Kit :1jt 1.5.1 cJcIJDK Str•1ltt1r«t ~l!i l.!5.2 Gt1icl't J)Cl' svilt 1pp~trc })l\CJS<> clc>p<> JJn'>S<> :l<i l.!>.~1 ']èrzo progr,1m1n'' ccJ11.J I)[{ e 1\lc>ccc> Nc>I<! :17 l .5.4 I ,,1 11c>slrt.t i11tc1i tzic>11c co11 11 co111pl1te1 :38 Riepilogo :l~) Cap itolo 2 - Componenti fondamentall di un programma Java lf.:J 2.1 Cosa significa creare un programma Java 44 2.1. 1 I)robrrammazione e paradigmi 5 ~i 2.1.2 Introduzione alla programmazione ctd oggelli (OOI>) 46 2. .2. l Astrazione '17 J 2.1.3 Concelli alla base della sintassijava '18 2.1.4 Introduzione alle variabili injava .52 .53 2.1.4 .1 Dichiarazione di una variabile 2.1.4.2 Assehrnazione di un valore ad una variabile .54· 2.1.5 Introduzione ai metodi injava .5(> 2. 1. .5 .1 Dichiarazione di un melodo 5(> 2.1.5.2 Invocazione di un metodo (statico) 58 2.2 Le basi della programmazione object oriented: classi ed oggetti .59 2.2. l Classe ed oggetto: definizioni formali <>O 2.2.1.l La nostra prima vera classe (>0 2.2.1.2 I nostri primi veri oggetti f)2 2.2.1.3 Osservazione importante sulla classe Punto ().5 2.2.1.4 Osservazione importante sulla classe TestOgget ti Punto ()6 2.2.1.5 La classe Auto ()7 2.2.2 An cora sui m etodi inJ ava 69 2.2.2.1 Astrazione di un metodo 69 2.2.2.2 Invocazione di un metodo su un oggetto 72 2.2.2.3 Altre tipologie di metodi 73 2.2.3 An cora sulle variabili inJava 77 2.2.3. l Variabili d'istanza 77 2.2.3.2 Variabili locali 78 2.2.3.3 Parametri di un metodo 79 2.2.4 I m etodi costruttori 80 2.2.4. 1 Caratteristiche di un costruttore 80 2.2.4.2 Costruttore di default 83 VI Indice generale 2.3 Introduzione ai package • 85 2.3.l Le parole chia,,e p a c kage e import 85 2.3.2 G.es.tione manuale dei package 86 2.3.3 T1p1co schema di un file sorgen te 88 Riepilogo 88 Capitolo 3 - Stile di codifica, tipi di dato ed array 91 3.1 Stile di codifica 92 3.1.l Sch ema Libero e standard di formattazione 93 3.1.2 Commenti 94 3.1.2. l Tipologie di commenti 95 3.1.2.2 Quando utilizzare i commenti 96 3.1.3 Identificatori 98 3.1.3. l Regole per gli identificatori 98 3.1.3.2 Standard e convenzioni 101 3.2 Gestione della memoria 103 3.2.1 Byte 103 3.2.2 Memorizzazione dei numeri interi 105 3.2.2.l Sistemi numerici 105 3.2.2.2 M etodo del complemento a due 106 3.2.3 Caratteri e simboli: standard Unicode 107 3.2.4 Numeri decimali e standard IEEE-754 108 3.3 Tipi di dati primitivi 108 3.3.l Tipi di dati interi 109 111 3.3.1.1 Promozione automatica nelle espressioni 112 3.3.1.2 Cast 112 3.3.1.3 Operazioni con interi 3.3.2 Tipi di dati a virgola mobile, casting e promotion 114 116 3.3.2.1 Precisione dei nt1meri floating point (IEEE-754) 119 3.3.3 Underscore in tipi di dati n11merici 119 3.3.4 Tipo di dato logico - booleano 3.3.5 Tipo di dato primitivo letterale 120 121 3.3.5.1 Caratteri sulla tastiera stampabili 122 3.3.5.2 Fo11nato Unicode (notazione esadecimale) 122 3.3.5.3 Caratteri di escape speciali 3.4 Tipi di dati complessi: reference 124 3.4.1 Passaggio di parametri per valore 127 3.4.2 Inizializzazione delle variabili d'istanza 129 3.5 Introduzione alla libreria standard 130 3.5.1 Il comando import 131 VII ' .!i.2 1.,{l I •ssl S · ri11 l ~J3 'l 'i 2 1 I t • l~l~l \\11r1 ' '' ' • "' l\1\ W".lOI st1Ìl\S1 \ 'i 2 t) ' ' I: l 'I ' ·• • ·I~) fll'l nv.10111 l't.>11 lt• st 1 i11~l10 3.5.2.3 l lt• ~Il i11gl10 l ~l5 &l\lll\ltr1l'liliti\ '\\t\ I :~.5.2. I l itl t'ttl \it'llt' st 1i 1lgl1\' ~l(j :~.~.3 l \ <l ,1111 lil>tt't in st:111cl:1 rcl cli ,J:,va l ~J7 dOC'\i11l<'lltl\ZÌ<>11t' 3 .. l .. I :18 >.4 l> ~t1·1•111 ..' 11tt> jnvndoc 3 .. G Gli rray in Java I ~l!J l l I: i!) ~).(). llì~tt\\ZÌ(ll\t,' )1\. ,'.,) , (") , -l l ""t 1,i.<> '('è\.Zl()\\(.' l li 140 ~).(),,l 111?.in ?.'\Zllll\t' 3.(),4 ~Ìll(,\'\S\ ,\lte1 I il I llt.\(t' l' (lt l 111 ~l.6.,) l".1t,lttc.'ttst1cJ1(~ \ll'r'-'Y \lt'\ 3.6.tl 112 \rt'G)' 1\1t1ltidi111e11sio11,,li 1 3. >. 7 args [] 112 ~t 1·i11g 1 3. 7 Deduzione del tipo per le variabili locali: var 1411 3. 7.1 \ Terb(..1sit"\ e leggibilità l 11i1 3.7.2 J\pplicabilità 145 Riepilogo 147 Capitolo 4 - Operatori e gestione del flusso di esecuzione 151 4.1 Operatori Java 152 4.1.l Operatore d'assegnazione 152 4.1.2 Operatori aritmetici 153 4.1.2.l Operatori di assegnazione composti 154 4·.1.2.2 Operatori (unari) di pre e post-incremento (e decremento) 155 4.1.3 Operatori bitwise 15i 4.1.4 Operatori relazionali o di confronto 15i 4.1.5 Operatori logico - booleani 159 4.1.6 Concatenazione di stringhe con + 161 4.1. 7 Priorità degli operatori 162 4.2 Costrutti di programmazione semplici 163 • 165 4.2.1 II costrutto i f 169 4.2.2 Il costrutto while _ Costrutti di programmazione avanzati 170 4 3 170 4.3. l Il costrutto f or 172 4.~-J.1.1 for vs while? 174 4 .3 .2 I J costrutto do 175 4.3.~-J Ciclo f or migliora~o 177 4.3.4 L'operatore temano ""' Indice generale 4.3.5 '"'upporto ai co trutti di progrnn1111nzione break e continue 177 4.3.,5.l La parola chiu\•e break 178 4.3.,5.2 La paroln cl1iave continue 178 4.3.5.3 Etichette {label) 178 4.4 Il nuovo swi tch 180 4.4. l Perché swi tch è stato aggio1·11nto 180 4.4.2 Il costrutto swi tch tradizìo11ale (statc111c11t) 181 4.4.2 1 111tass1 182 4.4.2.2 Fall througl1 184 4.4.2.3 I\otazio11e freccia per swi tch 187 4.4 2.4 Come usare il costrutto s wi tch 188 4.4.3 Espressione s wi t c h 189 4.4.3.l Freccia ,.s due punti 191 4.4.3.2 Poi\ expression 192 4.4.3.3 E'\hausti\·eness (esaustività) 194 4.5 Programmare meglio 196 4.5.1 Approccio alla programmazione 196 4.5 .2 Algoritmo 197 4.5.3 Introduzione ad U ML 199 Riepilogo 202 Parte I l - Programmazione Object Oriented 2os Capitolo 5 - Incapsulamento e vislbllltà 207 5.1 Programmazione orientata agli oggetti (OOP) 208 208 5. 1.1 Paradigmi fondamentali 209 5.1.2 Astrazione 211 5.1.3 Riuso 212 5.1.4 UML: diagramma delle classi 5.2 Incapsulamento 214 5.2.l Separare l'interfaccia dall'implementazione degli oggetti 214 215 5.2.1.1 Case Study 5. 2.1.2 Soluzione (implementazione dell'incapsulamento) 215 5.2.1.3 Accesso ai dati controllato 218 219 5.2.1.4 Evoluzione del software 219 5.2.1.5 Metodi accessor e mutator 220 5.2.2 Il reference this 5.2.2.l Uso di this con variabili 220 222 5.2.2.2 Uso di this con metodi 5 .2.2.3 Uso di thi s con i costruttori 223 IX • l11dice ge eralc 11 3 ~ ·~· Q izz~l 22it ' ll\ 11<1 () t 1t i I re? l 'i11 c11I>sti1 :t tl l('t \ ( <} 22,f) ·~ \1sn1·~ J>i11c~t1)st1l:t111 ''· (.lllll: 'tll<l .:>.2.4. l ] 1) 225 1~ ' '"1'··,.,·) . '> ') 5.2 (i 2 l r: ... .G,J J · • r.:. <'' • '·' ·••>-L.I< Ili C1l tllC'1J)~\1 t\llll'l\((l .. >.2.4.3 ]l C<>1d 22<) 5.3 Modificatori d'accesso 227 5.3.J 11.1dificntt11 , public 227 T\ t d . f' r.: •) () .).,.>. e> tc;.1tor' prot ec ted 228 t 2:lo S.3.,~ Nt ss1111 111c>difict1tc11 cl,,1cct'SS<> l' 5.:3.it ~ l odifict1torl! priva te I 2~l 5.4 Il modificatore static 2~i2 5. 1. l t\1ttt>C11 4 t.1t1c1 2~J:i 5.4.2 \ 1a1·i:1bil1 (dt cli.1ssc) \(,1t1cl1<.' 2~iil 237 5.4 .3 I11izirtliz.1.;ato1 i statici cd i11i.lializzato11 d'ist<t11za 238 .5 1 3 I l11izi:11i73,;ltore d,1sla11zn 5.4. t St.1tic i111po1·t 23!) .5.4 .. Qt1<.111do t1sa1·e static 2•i0 ~ 2,io 5.4 .6 Desig11 palte1·n Si11gleton Riepilogo 2j12 Capitolo 6 - Ereditarietà ed Interfacce 6 .1 Ereditarietà 2•1(} 6.1.1 La parola chiave extends 2·16 6.1.2 Quando utilizzare l'ereditarietà: la relazione "is a" 248 6.1.3 Come usare l'ereditarietà: g·eneralizzazione e specializzazione 249 6.1.4 La classe Obj ect 250 6.2 Supporto del linguaggio all'ereditarietà 251 6.2. l Rapporto ereditai·ietà-incap sulamento 251 6.2.2 Ereditarietà e costruttori 252 6.2.3 La parola chiave super 254 254 6.2.3.1 super e costruttori 257 6.2.3.2 super e metodi 258 (J.:2.4 Ereditarietà e modificatori 6.2.4. J Modificatori d'accesso 2.1~) 2(11 .2 JJ modificatore stat ic (j.2 .4 262 .2.4.:-3 JJ modificatore f inal 6 263 f>.:2. . li modificatore sealed 4 4 264 r; Eredita1·ietà e record (1.2 .. 265 6.3 Il modificatore .abs trac t 266 6.3.1 Metodi astratti 266 Classi astratte t>.~~.2 X