programmazione 2 3. primi passi in java - persone -...
TRANSCRIPT
![Page 1: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/1.jpg)
1PR22017-2018
PROGRAMMAZIONE23.PrimipassiinJava
![Page 2: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/2.jpg)
WhyJava?
• Java offre moltissime cose utili – Usato a livello industriale – Librerie vastissime – Complicato ma necessariamente complicato
• Obiettivo di Programmazione II – Presentare le caratteristiche essenziali della programmazione
Object-Oriented – Illustrare come le tecniche OO aiutano nella soluzione di
problemi – Sperimentare con Java
2PR22017-2018
![Page 3: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/3.jpg)
Ogge.eclassi
• Ogge$o:insiemestru:uratodivariabilidiistanza(stato)emetodi(operazioni)
• Classe:modello(template)perlacreazionediogge.
OBJECT
STATO(NASCOSTO)
METODI(PUBBLICI)
3PR22017-2018
![Page 4: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/4.jpg)
Ogge.eclassi
• Ladefinizionediunaclassespecificao Tipoevaloriinizialidellostatolocaledegliogge.
(levariabilidiistanza)o Insiemedelleoperazionichepossonoessereeseguite(metodi)
o Costru:ori(unoopiù):codicechedeveessereeseguitoalmomentodellacreazionediunogge:o
• Ogniogge:oèunaistanzadiunaclasseepuò(opzionalmente)implementareunainterfaccia
4PR22017-2018
![Page 5: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/5.jpg)
Ogge.eclassi
5PR22017-2018
![Page 6: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/6.jpg)
Ogge.eclassi
6PR22017-2018
![Page 7: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/7.jpg)
Unprimoesempio
publicclassCounter{//nomedellaclasseprivateintcnt;//lostatolocale//metodocostru:orepublicCounter(){cnt=0;}//metodopublicintinc(){cnt++;returncnt;}//metodopublicintdec(){cnt--;returncnt;}}
DICHIARAZIONEDICLASSE
public=visibilefuoridell’ogge:oprivate=visibilesoloall’internodell’ogge:o
7PR22017-2018
![Page 8: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/8.jpg)
EsecuzionediJava
UnprogrammaJavaèmandatoinesecuzioneinvocandounmetodospecialechiamatomain
publicclassFirst{publicstaccvoidmain(String[]args){Counterc=newCounter();System.out.println(c.inc());System.out.println(c.dec());}}
8PR22017-2018
![Page 9: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/9.jpg)
Compilareedeseguire
prompt$javacCounter.java
VienecreatoilbytecodeCounter.classprompt$javacFirst.java
VienecreatoilbytecodeFirst.classprompt$javaFirst10prompt$
9PR22017-2018
![Page 10: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/10.jpg)
CosaèilJavabytecode?
• ÈillinguaggiodellaJavaVirtualMachine• Load&store(e.g.aload_0,istore)• Arithmecc&logic(e.g.ladd,fcmpl)• Objectcreacon&manipulacon(new,puqield)• Operandstackmanagement(e.g.swap,dup2)• Controltransfer(e.g.ifeq,goto)• Methodinvocacon&return(e.g.invokespecial,areturn)• Visualizzabileconjavap!!
– Eancheeditabile:adesempiol’appenarilasciatoBCEL
10PR22017-2018
![Page 11: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/11.jpg)
Creareogge.
DichiarareunavariabiledicpoCounterInvocareilcostru:orepercrearel’ogge:odicpoCounter
Counterc;c=newCounter()
Soluzionealternacva:faretu:oinunpasso!!
Counterc=newCounter();
11PR22017-2018
![Page 12: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/12.jpg)
Costru:oriconparametri
publicclassCounter{//nomedellaclasseprivateintcnt;//lostatolocale//metodocostru:orepublicCounter(intv0){cnt=v0;}//metodopublicintinc(){cnt++;returncnt;}//metodopublicintdec(){cnt--;returncnt;}}
DICHIARAZIONEDICLASSE
public=visibilefuoridell’ogge:oprivate=visibilesoloall’internodell’ogge:o
12PR22017-2018
![Page 13: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/13.jpg)
Costru:oriconparametri
publicclassFirst{publicstaccvoidmain(String[]args){Counterc=newCounter(25);System.out.println(c.inc());System.out.println(c.dec());}}
13PR22017-2018
![Page 14: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/14.jpg)
Stru:uremutabili
Ognivariabilediogge:oinJavadenotaunaenctàmutabile
CounterC;C=newCounter(5);C=newCounter(10);C.inc();//qualeèilvaloredellostatolocale?
14PR22017-2018
![Page 15: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/15.jpg)
IlvaloreNULL
Ilvalorenullègenericoepuòessereassegnatoaqualunquevariabiledicporiferimento
Counterc=cercaContatore();if(C==null)System.out.println("contatorenontrovato");
A:enzione:comeinC=singolo:assegnamento==doppio:testdiuguaglianza
Resctuisceunogge:odicpoCounteronullsenonlotrova
15PR22017-2018
![Page 16: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/16.jpg)
Nelloheap…
• Gliogge.Javasonomemorizzacnelloheap• Nelloheapvengonoallocate
o variabilidiistanza,quandosicreaunogge:oo variabilistacche(odiclasse),quandoècaricataunaclasse
• Levariabiliallocatenelloheapsonoinizializzatedalsistemao con0(zero),perlevariabilidicpinumericio confalse,perlevariabilidicpobooleano connull,perlevariabilidicporiferimento
• Levariabilidichiaratelocalmenteinmetodi/costru:orinonvengonoinizializzateperdefault:bisognaassegnarelorounvaloreprimadileggerle
16PR22017-2018
![Page 17: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/17.jpg)
Statolocale
• Modificatori:meccanismopercontrollarel’accessoallostatolocaledell’ogge:oo Public:visibile/accessibiledaognipartedelprogrammao Private:visibile/accessibilesoloall’internodellaclasse
• DesignPa:ern(suggerimentogrossolano)o Tu:elevariabilidiistanza:privateo Costru:oriemetodi:public
17PR22017-2018
![Page 18: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/18.jpg)
Riassunto…
• Il“frammentoimperacvo”diJavarichiamadavicinolasintassidelC
– intx=3; //dichiaraxeloinizializzaalvalore3– inty;//dichiarayeglivieneassegnatoilvaloredidefault0– y=x+3;//assegnaayilvaloredixincrementatodi3
λ //dichiaraunogge:oCdicpoCountereloinizializzaconλ //ilcostru:oreλ Counterc=newCounter();
λ Counterd;//dichiaradeilsuovaloredidefaultènull
λ d=c;//assegnaadl’ogge:odenotatodac=>Aliasing!
18PR22017-2018
![Page 19: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/19.jpg)
Alcunicomandi…
• Condizionali– if(cond)stmt1;– if(cond){stmt1;stmt2;}– if(cond){stmt1;stmt2;}else{stmt3;stmt4;}
• Iteracvi– while(exp){stmt1;stm2;}– do{stmt1;stm2;}unYl(exp);– for(init;term;inc}{stmt1;stm2;}
19PR22017-2018
![Page 20: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/20.jpg)
Demo
classForDemo{publicstaccvoidmain(String[]args){
for(inti=1;i<11;i++)System.out.println("Countis:"+i);}}
classWhileDemo{publicstaccvoidmain(String[]args){ intcount=1; while(count<11){ System.out.println("Countis:"+count);
count++; }}}
20PR22017-2018
![Page 21: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/21.jpg)
Demo2
classBreakDemo{publicstaccvoidmain(String[]args){int[]arrayOfInts={32,87,3,589,12,1076,2000,8,622,127};inti,searchfor=12;booleanfoundIt=false;for(i=0;i<arrayOfInts.length;i++){ if(arrayOfInts[i]==searchfor){ foundIt=true; break; }}if(foundIt)System.out.println("Found"+searchfor+"atindex"+i);elseSystem.out.println(searchfor+"notfoundinthearray");}}
21PR22017-2018
![Page 22: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/22.jpg)
Tipiprimicvi
• int//standardintegers• byte,short,long//otherflavorsofintegers• char,float//unicodecharacters• double//floa;ng-pointnumbers• boolean//trueandfalse• Stringnonèun+poprimi+vo(maquasi…)
22PR22017-2018
![Page 23: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/23.jpg)
InterfacceinJava
23PR22017-2018
![Page 24: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/24.jpg)
TipiinJava
• Javaèunlinguaggiofortementecpato(ognienctàhauncpo)
• Leclassidefinisconoilcpodegliogge.o Classecomedefinizionedelcontra:odiusodegliogge.cheappartengonoaquellaclasse
• Javaprevedeunulterioremeccanismoperassociareilcpoagliogge.:leinterfacce
24PR22017-2018
![Page 25: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/25.jpg)
JavaInterface
• Unainterfacciadefinisceilcpodegliogge.inmododichiaracvo:nonvienepresentatoilde:agliodellaimplementazione
• Interfaccia=Contra:od’usodell’ogge:o
25PR22017-2018
![Page 26: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/26.jpg)
Esempio
publicinterfaceDisplaceable{publicintgetX();publicintgetY();publicvoidmove(intdx,intdy);}
Nome
Dichiarazionedeicpideimetodi
26PR22017-2018
![Page 27: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/27.jpg)
PR22017-2018
Unaimplementazione…
publicclassPointimplementsDisplaceable{privateintx,y;publicPoint(intx0,inty0){ x=x0; y=y0;}publicintgetX(){returnx;}publicintgetY(){returny;}publicvoidmove(intdx,intdy){ x=x+dx; y=y+dy;}}
Devonoessereimplementactu.imetodidell’interfaccia
27
![Page 28: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/28.jpg)
Un’altra!!
classColorPointimplementsDisplaceable{privatePointp;privateColorc;ColorPoint(intx0,inty0,Colorc0){ p=newPoint(x0,y0);c=c0;}publicvoidmove(intdx,intdy){ p.move(dx,dy);}publicintgetX(){returnp.getX();}publicintgetY(){returnp.getY();}publicColorgetColor(){returnc;}}
Ogge.cheimplementanolastessainterfacciapossonoaverestatolocaledifferente
Delegaall’ogge:opoint
Numeromaggioredimetodidiquellipreviscdalcontra:o
28PR22017-2018
![Page 29: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/29.jpg)
Tipieinterfacce
• Dichiararevariabilichehannoilcpodiunainterfacce
Diplaceabled; d=newPoint(1,2); d.move(-1,1)
• Assegnareunaimplementazione
d=newColorPoint(1,2,newColor("red")); d.move(-1,1);
29PR22017-2018
![Page 30: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/30.jpg)
So:o-cpi
• Lasituazionedescri:aillustrailfenomenodelsubtyping(so:o-cpo):uncpoAèunso:o-cpodiBseunogge:odicpoAingradodisoddisfaretu.gliobblighichepotrebberoessererichiescdall’interfaccia(ounaclasse)B
• Intuicvamente,unogge:odicpoApuòfarequalsiasicosa
chepuòfare(unogge:odicpo)B• Maggioride:agliinseguito(quandoColorPointpotrà
essereso$o-classediPoint!!)
30PR22017-2018
![Page 31: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/31.jpg)
Interfaccemulcple
publicinterfaceArea{publicdoublegetArea();}
publicclassCircleimplementsDisplaceable,Area{privatePointcenter;privateintrad;
publicCircle(intx0,inty0,intr0){ rad=r0;center=newPoint(x0,y0);}
publicdoublegetArea(){returnMath.PI*rad*rad;
}
publicintgetRadius(){returnrad;}publicgetX(){returncenter.getX();}publicgetY(){returncenter.getY();}publicmove(intdx,intdy){center.move(dx,dy);}}
31PR22017-2018
![Page 32: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/32.jpg)
Esempid’uso
Circlec=newCircle(10,10,5);Displaceabled=c;Areaa=c;Rectangler=newRectangle(10,10,5,20);d=r;a=r;
32PR22017-2018
![Page 33: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/33.jpg)
MetodistaYci
33PR22017-2018
![Page 34: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/34.jpg)
Unaprimaanalisi
• Alcunecara:eriscchediJavarichiedonounaconoscenzade:agliatadellelibrerie
• SistemidisupportofornisconomolcstrumencperprogrammareconJava(Eclipseèunesempiosignificacvo)
• Lanostrarisposta:affroncamoilproblemainterminidiproblemsolving
34PR22017-2018
![Page 35: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/35.jpg)
Espressionivs.Comandi
• Javahasiaespressionichecomandi!o Leespressioniresctuisconovalorio Icomandioperanoviasideeffect
35PR22017-2018
![Page 36: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/36.jpg)
Metodistacci
publicclassMax{publicstaccintmax(intx,inty){if(x>y)returnx;elsereturny;}publicstaccintmax3(intx,inty,intz){returnmax(max(x,y),z);}}
publicclassTest{publicstaccvoidmain(String[]args){System.out.println(Max.max(3,4));}}
similealladefinizionediunafunzione
36PR22017-2018
![Page 37: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/37.jpg)
Metodistacci
• Sonometodiindipendencdall’ogge:o(valgonopertu.gliogge.dellaclasse)– Nonpossonodipenderedaivaloridellevariabilidiistanza
• Quandodevonoessereusac?– PerlaprogrammazionenonOO– Perilmetodomain
• Imetodinonstaccisonoenctàdinamiche!– Devonoconoscereelavoraresullevariabilidiistanzadegliogge.
37PR22017-2018
![Page 38: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/38.jpg)
Metodistacci
• Imetodistaccisono“funzioni”definiteglobalmente• Variabilidiistanzasta;csonovariabiliglobaliaccessibilitramiteilnomedellaclasse
• Variabilidiistanzastacchenonpossonoessereinizializzatenelcostru:oredellaclasse(datochenonpossonoessereassociateaogge.istanzadellaclasse)
38PR22017-2018
![Page 39: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/39.jpg)
Esempio
publicclassC{privatestaccintbig=23;publicstaccintm(intx){returnbig+x;//OK}}
39PR22017-2018
publicclassC{privatestaccintbig=23;privateintnonStaccField;privatevoidsetIt(intx){nonStaccField=x+x;}publicstaccintm(intx){setIt(x); //Errore:unmetodosta;cnonpuò
//accedereametodinonsta;ciea //variabilidiistanzanonsta;che
}}
![Page 40: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/40.jpg)
Quindi?
• Imetodistaccisonouclizzacperimplementarequellefunzionalitàchenondipendonodallostatodell’ogge:o
• EsempisignificacvinellaAPIMathcheforniscefunzionimatemacchecomeMath.sin
• Altriesempiosonodacdallefunzionidiconversione:Integer.toStringeBoolean.valueOf
40PR22017-2018
![Page 41: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/41.jpg)
JavaDemo
41PR22017-2018
![Page 42: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/42.jpg)
42
ListeinJava(àlaOCaML)interfaceStringList{publicbooleanisNil();publicStringhd();publicStringListtl();}
classConsimplementsStringList{privateStringhead;privateStringListtail;publicCons(Stringh,StringListt){head=h;tail=t;}publicbooleanisNil(){returnfalse;}publicStringhd(){returnhead;}publicStringListtl(){returntail;}}
classNilimplementsStringList{publicbooleanisNil(){returntrue;}publicStringhd(){returnnull;}publicStringListtl(){returnnull;}}
![Page 43: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/43.jpg)
Operaresuliste
StringListx=newCons(”Cowa",newCons(“Bunga",newNil()))
• Regolepragmacchegeneralio Perognicpodidatodefinirelarelacvainterfacciao Aggiungereunaclasseperognicostru:ore
43PR22017-2018
![Page 44: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/44.jpg)
44PR22017-2018
Operaresuliste
• Conricorsione…
• …oiterazione!
publicstaccintnumberOfStrings(StringListpl){if(pl.isNil()){return0;}else{return1+numberOfStrings(pl.tl());}}
publicstaccintnumberOfStrings(StringListpl){intcount=0;StringListcurr=pl;while(!Curr.isNil()){count=count+1;curr=curr.tl();}returncount;}
Usarevariabilidiistanzapervalue-orientedprogramming
![Page 45: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/45.jpg)
Higher-order?!?
publicstaccStringListMap(???f,StringListpl){if(pl.isNil()){returnnewNil();}else{returnnewCons(???,Map(f,pl.tl()));}}publicstacctestMap(){StringListx=newCons(“CowaBunga”,newNil()):StringListy=map(???,x);assertEqual(y.hd(),“COWABUNGA”);}
45PR22017-2018
![Page 46: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/46.jpg)
PR22017-2018
Conleinterfacce!!InterfaceFun{publicstaccStringapply(Stringx);}ClassUpperCaseFunimplementsFun{publicstaccStringapply(Stringx){returnx.toUpperCase();}}
publicstaccStringListMap(Funf,StringListpl){if(pl.isNil()){returnnewNil();}else{returnnewCons(f.apply(pl.hd()),Map(f,pl.tl()));}}publicstacctestMap(){StringListx=newCons(“CowaBunga”,newNil()):StringListy=map(newUpperCaseFun(),x);assertEqual(y.hd(),“COWABUNGA”);}
![Page 47: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/47.jpg)
LestringheinJava
47PR22017-2018
![Page 48: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/48.jpg)
JavaString
• Lestringhe(sequenzedicara:eri)inJavasonounaclassepredefinitao "3"+""+"Volte3"equivalea"3Volte3"o Il"+"èanchel’operatorediconcatenazionedistringhe
• Lestringhesonoogge.immutabili(alàOCaml)
48PR22017-2018
![Page 49: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/49.jpg)
Uguaglianza
• Javahadueoperatoripertestarel’uguaglianzao o1==o2resctuiscetrueselevariabilio1eo2denotanolostessoriferimento(pointerequality)
o o1.equals(o2)resctuiscetrueselevariabilio1eo2denotanodueogge.idencci(deepequality)
• Esempioo String("test").equals("test")-->trueo newString("test")=="test"-->falseo newString("test")==newString("test")-->false
49PR22017-2018
![Page 50: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/50.jpg)
Unquesitointeressante…
Strings1="Java";Strings2="Java";
s1.equals(s2)//true…perché?s1==s2//true…perché?
50PR22017-2018
[approfondiregli“Stringliterals”]
![Page 51: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/51.jpg)
Unquesitopiùstandard…
Stringstr1=newString("Java");Stringstr2=newString("Java");str1.equals(str2)//true:stessocontenutostr1==str2//false:ogge.differenc
51PR22017-2018
![Page 52: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/52.jpg)
String:ogge.immutabili!
publicclassTest{publicstaccvoidmain(String[]args){ Strings1="Cowa"; if(s1.equals(s1.concat("Bunga"))System.out.println("True!"); else System.out.println("False!");}}
52PR22017-2018
![Page 53: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/53.jpg)
JavaAssert
53PR22017-2018
![Page 54: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/54.jpg)
Assert
• Javafornisceunaprimicvalinguisccaper“testare”proprietàdiunprogramma
• Ilcomandoasserto assertbooleanExpression;o valutal’espressionebooleanao sel’espressionevienevalutatatrueilcomandonon
modificalostato,sel’espressionerescctuiscefalsevienesollevatal’eccezioneAsserYonError
54PR22017-2018
![Page 55: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/55.jpg)
Assert
• assertbooleanExpression:expression;• Inquestocaso,sel’espressionebooleanavienevalutatafalselasecondaespressioneèuclizzataall’internodelmessaggiodiAsserYonError
• Lasecondaespressionepuòaverequalunquecpoconl’eccezionedelcpovoid
55PR22017-2018
![Page 56: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/56.jpg)
Invarianc
if(i%3==0){...}elseif(i%3==1){...}else{//weknow(i%3==2)...}
if(i%3==0){...}elseif(i%3==1){...}else{asserti%3==2:i;}
SelavariabileihavalorenegaYvol’assertsollevaunerrore
56PR22017-2018
![Page 57: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/57.jpg)
Assertecontra.
• Noiuclizzeramoilcomandoassertpersupportarelaprogrammazione“bycontract”– Precondizioni– Postcondizioni– Invariancdirappresentazione
57PR22017-2018
![Page 58: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/58.jpg)
Esempio
privatevoidsetRefreshRate(intrate){@REQUIRES(rate<=0||rate>MAX_REFRESH_RATE)
::
}
privatevoidsetRefreshInterval(intrate){assertrate>0&&rate<=1000:rate;
::
}
58PR22017-2018
![Page 59: PROGRAMMAZIONE 2 3. Primi passi in Java - Persone - …pages.di.unipi.it/gadducci/PR2-17/PR2-17-003.pdf · 2017-09-24 · PROGRAMMAZIONE 2 3. Primi passi in Java ... { cnt = 0; }](https://reader035.vdocuments.mx/reader035/viewer/2022062911/5c66093709d3f2d12a8ba19e/html5/thumbnails/59.jpg)
Abilitareassert
• IlcomandoassertnellanormaleesecuzionediapplicazioniJavanonhaalcuneffe:o
• Leasserzionidevonoessereabilitateo prompt$java-enableasserconsprogo prompt$java-eaprog
59PR22017-2018