AA2016-2017 PROGRAMMAZIONE2 1.Introduzione 1 PRESENTAZIONI GianluigiFerrari o o [email protected] Webh=p://pages.di.unipi.it/ferrari/ o Dicosamioccupo(ricerca) o o o FormalmethodsinSo?wareEngineering ! VerificaIon,modelchecking,andstaIcanalysisofprograms Programminglanguages&modelsforConcurrent/DistributedSystems ! Serviceoriented&CloudcompuIng ! ProgramminglanguagesforIoT Security ! Language-basedsecurity 2 PRESENTAZIONI FabioGadducci o o [email protected] Webh=p://pages.di.unipi.it/gadducci/ Dicosamioccupo(ricerca) o o o FormalmethodsinSo?wareEngineering ! VerificaIon,modelchecking,andstaIcanalysisofprograms Programminglanguages&modelsforConcurrent/DistributedSystems ! ServiceorientedcompuIng ! TheoreIcalfoundaIons Visualmodeling ! GraphicalspecificaIonsandmodeltransformaIons 3 PROGRAMMAZIONE2 Cosastudiamo? DuetemaIcheprincipali ProgrammazioneOO Tecnicheperlaprogrammazioneorientataad ogge](inpiccolo) o Specifica,implementazione,correMezza o ProgeMareeprogrammareunsistema ! DimostrarelacorreMezzadiunaimplementazione ètantoimportantequantoprogrammare o Programmazioneconcorrente(sepossibile) EsemplificateuIlizzandoJava o o nonècompitodiquestocorsointrodurreillinguaggio nellasuainterezza… nétantomenolesuelibrerie(cheimpareretedasoli, quandoviservono) 5 Unavalangadilibri… Materialedida]co B.Liskov,J.GuMag Programdevelopmentin Java (AddisonWesley2000) Datato,macopretu]gli aspe]conceMuali fondamentali Materialedida]co M.Herlihy,N.Shavit Theartofmul5processor programming (MorganKaufmann2012) Programmazione concorrenteetecniche permulI-core Materialedida]co R.Bruni,A.Corradini, V.Gervasi ProgrammazioneinJava (Apogeo2011) O]maintroduzioneper chipensadiaverelacune conlaprogrammazione Online OracleJavatutorials,docs.oracle.com/javase/ tutorial/java/ DavidEck,Introduc5ontoprogrammingusing Java,math.hws.edu/javanotes/ OnlinenetrovatemolIaltri… …senIteviliberidiseguirelavostracuriosità Obie]vi TanVLinguaggidiprogrammazione o C,ML,Java,C#,…Python,Javascript,Ruby,Scala, F#..... ObieYvo1:acquisirecompetenzegeneraliche possanoessereapplicateaunavarietàdi linguaggidiprogrammazione. ObieYvo2:acquisirelecompetenzeper imparare“prestoebene”unnuovolinguaggio diprogrammazione. LINGUAGGIDIPROGRAMMAZIONE Comescegliereunlinguaggio Scelta?… 1. Lelibrerie 2. AmbienIdiprogrammazione 3. Le“bestpracIce”aziendali NostroobieYvo:fornireglistrumenVche vipermeMerannodifarescelteconsapevoli LinguaggidiProgrammazione Studiareiprincipichestannoallabasedei linguaggidiprogrammazione Essenzialepercomprendereilproge=o,la realizzazioneel’applicazionepraIcadei linguaggi Nonciinteressarisponderealladomanda “JavaèmegliodiC#”? 14 TanIaspe]importanI… ParadigmilinguisVci: o ImperaVvo,funzionale,orientatoaglioggeY Implementazione:stru=ureatempodiesecuzione o o o Qualisonolestru=uredelrun-Ime? ComevengonogesIte? QualisonolerelazionitraparadigmilinguisIciestru=ure delkrunIme? Ilnostroapproccio:ladescrizione dell’implemementazionedellinguaggioèguidata dallasemanIcaformale! o Stru=uradelrun-ImesimulatainOcaml. Cisononumerosilibrisull’argomentochesonouIli perilnostrocorso…mame=eremoadisposizione dellenote. 15 Materialedida]co M.Gabbrielli,S.MarVni Linguaggidi programmazione (McGraw-Hill2006) Materialedida]co M.ScoM Programminglanguage pragma5cs (MorganKaufmann2009) Materialedida]co P.Sesto? Programminglanguage concepts (Springer2012) PR2:istruzioniperl’uso Ilmaterialedida]codellelezionisaràdisponibilesulla paginawebcosìcometu]iprogrammiOCamleJavache verrannodiscussinelleesercitazioni Provadiesame=progeMo+provascriMa+orale o o o ammissioneall’oraleconvotazione>=16/30nelloscri=o& valutazioneposiIvadelproge=o 2proveintermediepossonososItuirelaprovascri=a 2proge]intermedipossonososItuireilproge=o Consigli o o o seguireilcorsomantenendosialpassoconlostudio partecipare(a]vamente)alezioniedesercitazioni sostenereleproveintermedie 19 Competenzerichieste(nostreaspe=aIve) Familiaritàcoiconce]basediprogrammazione funzionale(Caml)eimperaIva(C) o o Programmazione1elaboratorio Logicaperlaprogrammazione Familiaritàalgoritmicaeprogrammazioneconle stru=uredaIdibase(liste,pile,code,alberi, hashtable,…) o Algoritmicaelaboratorio Linguaggieastrazione Ilinguaggidiprogrammazionesonoilpiùpotentestrumento diastrazionemessoadisposizionedeiprogrammatori o IlinguaggisisonoevoluItrasformandoincostru]linguisIci(e realizzandoliunavoltapertu=enell’implementazione) seMoridiapplicazioni(basididaI,webapplicaIons, intelligenzaarIficiale,simulazione,etc.) Difondamentaleimportanzal’introduzionedimeccanismidi astrazione,cheperme=onodiestendereunlinguaggio programmandonuoveoperazioni,Ipididato,etc. 21 IldiagrammaevoluIvo 22 TanIlinguaggi.Perché? Prendiamoilmiglioreebasta!!! o ComevedreteaCalcolabilitàeComplessità,ilinguaggidi programmazionesonotu](Turing)equivalenI:stessa potenzaespressiva ImigliorisonotanI… o o o o VisioneOracle-Sun:Java VisioneMicrosov:C#,F# VisionedellosviluppatoreWeb:JavaScript, VisionedatascienIst:Python TantemoIvazionidiverse:alcunilinguaggimegliosi ada=anoaunparIcolarecontesto o PROLOG:AI Adayinthelifeofawebprogrammer Developwebapps o ApplicaIonframework(e.g.Mozilla) Clientsideprogramming o Javascript(funzionalità), Serversideprogramming o o o o o CGIscripts ScripIng(PHP,Pearl,Ruby,…) Java Databaseaccess(SQL) XMLperwebservices SenzadimenIcareunsistemadiversioning(egGIT) Navigatesulweb Ilsito www.scriptol.com/programming/fibonacci.php descriveilprogrammachecalcolainumeridifibonacci neiprincipalilinguaggidiprogrammazione Ilsito www.99-bo=les-of-beer.net decrivecomeprogrammarein1500linguaggidi programmazioneiltestodi“99Bo>lesofBeer” Unaclassifica… TIOBEindex2016 Un’altraclassifica:PYPL PopularitYofProgrammingLanguage Unaterzaclassifica AnalisiquanItaIvadeiproge]disponibilisulla pia=aformaGithub o h=p://githut.info/ Unpo’distoriadei linguaggidiprogrammazione Linguaggidiprogrammazione Ilinguaggidiprogrammazionenasconoconlamacchinadi diTuring(fondazione)elamacchinadiVonNeumann (macchinaaprogrammamemorizzato) • iprogrammisonounparIcolareIpodidato rappresentatonellamemoriadellamacchina • lamacchinapossiedeuninterpretecapacedieseguire ilprogrammamemorizzato,equindidiimplementare ognialgoritmodescrivibilenel“linguaggiomacchina” • unlinguaggiomacchinadotatodisemplicioperazioni primiIveperlasceltaeperiterare(osimili)èTuringequivalente,cioépuòdescriveretu]glialgoritmi 30 Anni‘50 FORTRANeCOBOL(sempreverdi) o notazionisimbolicheorientaterispe]vamente alcalcoloscienIfico(numerico)eallagesIone daI(anchesumemoriasecondaria) o astrazioneprocedurale(so=oprogrammi,ma concara=erisIchemoltosimiliaicostru] forniIdailinguaggimacchina) o meccanismilinguisVciperintrodurrenuove operazioniestruMuredaV(peresempio,gli arrayinFORTRANeirecordinCOBOL) o all’occhiomoderno:nulladisignificaIvamente diversodailinguaggimacchina 31 Ifavolosi‘60:LISPeALGOL ! FondamenV(teoria) ! formalizzazionedegliaspe]sinta]ci ! primirisultaIsemanIcibasaIsullambda-calcolo ! CaraMerisVchecomuni ! introduzionedellanozionediambienteperlagesIone degliidenIficatorieleregolediscope ! veraastrazioneproceduraleconricorsione ! ALGOL60 ! primolinguaggioimperaIvoveramenteadaltolivello ! scopingstaIcoegesIonedinamicadellamemoriaastack ! LISP(sempreverde) ! primolinguaggiofunzionale,dire=amenteispiratoal lambda-calcolo(lateoriaritorna) ! scopingdinamico,stru=uredaIdinamiche,gesIone dinamicadellamemoriaaheapcongarbagecollector 32 Eperalprecisione… • ALGOL60,proto9podeilinguaggiimpera9vi • LISP,proto9podeilinguaggilogiciefunzionali • Analizzandoiduelinguaggiciaccorgiamoche originanoconce]similinonacasobasaIsulla teoria • lagesIonedell’ambientetramitelostack • Gliapproccirestanodiversieoriginanoduefiloni • ilfiloneimpera5vo(esempioC) • ilfilonefunzionale(esempioOCaml) 33 Lafinedeglianni‘60 • PL/I:primotentaIvodilinguaggio“globale”(targatoIBM) • tentaIvodisintesifraLISP,ALGOL60eCOBOL • fallitopermancanzadiunavisionesemanIcaunitaria • SIMULA67:nascedifa=olaprogrammazioneaoggeC • estensionediALGOL60orientatoallasimulazionediscreta • quasisconosciuto,riscoperto15annidopo 34 EvoluzionedelfiloneimperaIvo • Glianni’70 • metodologiediprogrammazione,IpididaI astra],modularità,classieogge] • programmazionedisistemainlinguaggiadalto livello:eccezionieconcorrenza • Unesempio:PASCAL • estensionediALGOL60condefinizionediIpi (nonastra]),usoesplicitodipuntatorie gesIonedinamicadellamemoriaaheap(senza garbagecollector) • sempliceimplementazionemista(conP-Code, antesignanodelbytecode),facilmenteportabile 35 IldopoPASCAL • C:PASCAL+moduli+Ipiastra]+eccezioni+ interfacciaperinteragireconilsistemaoperaIvo • ADA:ilsecondotentaIvodilinguaggio “totalitario”(targatoUSDoD) • C+concorrenza+costru]perla programmazioneintemporeale • proge=oambizioso:grandeenfasisusemanIca staIca(proprietàverificabilidalcompilatore) • C++:C+classieogge](allocaIsulloheap,ancora senzagarbagecollector) 36 Laprogrammazionelogica PROLOG • implementazionediunframmentodelcalcolodei predicaIdelprimoordine(lateoriacheaiuta) • stru=uredaImoltoflessibili(termini)concalcolo effe=uatodall’algoritmodiunificazione • computazioninon-determinisIche • gesIonememoriaaheapcongarbagecollector CLP(ConstraintLogicProgramming) • PROLOG+calcolosudominidiversi(anchenumerici) conopportunialgoritmidisoluzionedivincoli 37 Laprogrammazionefunzionale ML:implementazionedellambda-calcoloIpato • definizionedinuoviIpiricorsivi,ivaloridei nuoviIpisonotermini,chepossonoessere visitaIconunmeccanismodipa=ernmatching (versionesemplificatadell’unificazione) • scopingstaIco(adifferenzadiLISP) • semanIcastaIcamoltopotente(inferenzae controllodeiIpi) • unprogramma“corre=o”perlasemanIca staIcaquasisemprevabene • gesIonememoriaaheapcongarbagecollector HASKELL:MLconregoladivalutazione“lazy” 38 Java • Moltecara=erisIchedalfiloneimperaIvo • essenzialmentetu=equellediC++ • Alcunecara=erisIchedeilinguaggilogico-funzionali • gesIonedellamemoriacongarbagecollector • Usodelmeccanismodiclassiedereditarietàper ridurreilnumerodimeccanismiprimiIvi • quasitu=oèrealizzatoconclassipredefinitenelle librerie • Implementazionemista,Ipicadelfilonelogico • chenefacilitalaportabilitàelorendemolto ada=oadessereintegratonelleapplicazionidirete 39 C# C#:linguaggiodiprogrammazioneaogge] sviluppatoperlaprogrammazionenel framework.NET o il“meglio”diJavaeC++ IIpiprimiIvidellinguaggiohannouna corrispondenzaprecisaconiIpidisponibilia run-Ime SCALA ScalasmoothlyintegratesfeaturesofobjectorientedandfuncIonallanguages F# MLspiegatoalpopolo Evoluzionedeilinguaggi a. UnecosistemadiapplicazionidifferenI b. Enfasicrescentesulleastrazioniperilprogrammatore c. Cara=erisIchesignificaIve:migliorarelaaffidabilità, lamanutenibilitàelasicurezzadelsovware d. Aspe]moderni:astrazionipermobilitàedistribuzione e. PrimiIvelinguisIcheeastrazioniperparallelismoe concorrenza f. Trend:mul5-paradigmprogramming Unesempio Pythonlinguaggiodiprogrammazionesviluppato afineanni‘80daGuidovanRossum(CWI) Uno“scripInglanguage” LinguaggiomulI-paradigma:supportainmodo naIvoogge]efunzionidiordinesuperiore Ipichedellaprogrammazionefunzionale TipidinamiciegesIonedinamicadellamemoria Ruby RubylinguaggiodiscripIngsviluppatoafineanni ’90daYukihiroMatsumoto InfluenzatodaPerlandSmalltalk MulI-paradigma:funzionale,aogge],imperaIvo conmeccanismidimeta-programmazione(LISP cheritorna) Ruby(comelodescrivono) o everythingisanobject o everyopera5onisamethodcall o allprogrammingismeta-programming Usatonellosviluppodiapplicazioniweb ParadigmafunzionaleperJavaeC# Java8:laversionecorrentediJava IntroduzionedimeccanismilinguisIciperla programmazionefunzionale:Lambda o Problema:introdurreLambdasenzadoverricompilare icodicibinariesistenI. EspressioniLambdasonodisponibiliancheinC# o …conilmedesimoscopo Modellicomputazionali " Comevedremomeglionellasecondapartedelcorsoa ognilinguaggioèassociatounmodellodicalcolo " ImperaVvo:Fortran(1957) " Funzionale:Lisp(1958) " AoggeY:Simula(1967) " Logico:Prolog(1972) " Relazionale:SQL(1974) Ilproge=odiPR2 Unmetodoefficacepercomprenderecosa significa“modellodicomputazione”èproge=are esviluppareunlinguaggiodiprogrammazione o Ilproge=odiPR2siproponequestoobie]vo!!