59
1 PR2 2017-2018 PROGRAMMAZIONE 2 3. Primi passi in Java

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; }

  • Upload
    ledien

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

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; }

Abilitareassert

•  IlcomandoassertnellanormaleesecuzionediapplicazioniJavanonhaalcuneffe:o

•  Leasserzionidevonoessereabilitateo  prompt$java-enableasserconsprogo  prompt$java-eaprog

59PR22017-2018