Page 1
22/09/16
1
PROGRAMMAZIONE21.Introduzione
AA2016-2017
1
GianluigiFerrario [email protected] Webh?p://pages.di.unipi.it/ferrari/
o Dicosamioccupo(ricerca)o FormalmethodsinSo?wareEngineering
ü VerificaJon,modelchecking,andstaJcanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
ü Serviceoriented&CloudcompuJngü ProgramminglanguagesforIoT
o Securityü Language-basedsecurity
2
PRESENTAZIONI
Page 2
22/09/16
2
FabioGadduccio [email protected] Webpagesdi.unipi.it/gadducci Dicosamioccupo(ricerca)o FormalmethodsinSo?wareEngineering
ü VerificaJon,modelchecking,andstaJcanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
ü ServiceorientedcompuJngü TheoreJcalfoundaJons
o Visualmodelingü GraphicalspecificaJonsandmodeltransformaJons
3
PRESENTAZIONI
PROGRAMMAZIONE2
Cosastudiamo?DuetemaJcheprincipali
Page 3
22/09/16
3
Tecnicheperlaprogrammazioneorientataadogge^(inpiccolo)o Specifica,implementazione,correMezza
o ProgeMareeprogrammareunsistemaü DimostrarelacorreMezzadiunaimplementazioneètantoimportantequantoprogrammare
o Programmazioneconcorrente(sepossibile)EsemplificateuJlizzandoJavao nonècompitodiquestocorsointrodurreillinguaggionellasuainterezza…
o nétantomenolesuelibrerie(cheimpareretedasoli,quandoviservono)
5
ProgrammazioneOO
Unavalangadilibri…
Page 4
22/09/16
4
Materialedida^co
B.Liskov,J.GuMagProgramdevelopmentin
Java(AddisonWesley2000)Datato,macopretu^gli
aspe^conceMualifondamentali
Materialedida^co
M.Herlihy,N.ShavitTheartofmul5processor
programming(MorganKaufmann2012)Programmazione
concorrenteetecnichepermulJ-core
Page 5
22/09/16
5
Materialedida^co
R.Bruni,A.Corradini,V.GervasiProgrammazioneinJava(Apogeo2011)
O^maintroduzioneperchipensadiaverelacuneconlaprogrammazione
Online
OracleJavatutorials,docs.oracle.com/javase/tutorial/java/ DavidEck,Introduc5ontoprogrammingusingJava,math.hws.edu/javanotes/ OnlinenetrovatemolJaltri… …senJteviliberidiseguirelavostracuriosità
Page 6
22/09/16
6
Obie^vi
TanVLinguaggidiprogrammazioneo C,ML,Java,C#,…Python,Javascript,Ruby,Scala,F#.....
ObieYvo1:acquisirecompetenzegeneralichepossanoessereapplicateaunavarietàdilinguaggidiprogrammazione. ObieYvo2:acquisirelecompetenzeperimparare“prestoebene”unnuovolinguaggiodiprogrammazione.
LINGUAGGIDIPROGRAMMAZIONE
Page 7
22/09/16
7
Comescegliereunlinguaggio
Scelta?…1. Lelibrerie2. AmbienJdiprogrammazione3. Le“bestpracJce”aziendali
NostroobieYvo:fornireglistrumenVchevipermeMerannodifarescelteconsapevoli
Studiareiprincipichestannoallabasedeilinguaggidiprogrammazione Essenzialepercomprendereilproge?o,larealizzazioneel’applicazionepraJcadeilinguaggi Nonciinteressarisponderealladomanda“JavaèmegliodiC#”?
14
LinguaggidiProgrammazione
Page 8
22/09/16
8
ParadigmilinguisVci:o ImperaVvo,funzionale,orientatoaglioggeYImplementazione:stru?ureatempodiesecuzioneo Qualisonolestru?uredelrun-Jme?o ComevengonogesJte?o QualisonolerelazionitraparadigmilinguisJciestru?uredelkrunJme?
Ilnostroapproccio:ladescrizionedell’implemementazionedellinguaggioèguidatadallasemanJcaformale!o Stru?uradelrun-JmesimulatainOcaml.Cisononumerosilibrisull’argomentochesonouJliperilnostrocorso…mame?eremoadisposizionedellenote.
15
TanJaspe^importanJ…
Materialedida^co
M.Gabbrielli,S.MarVniLinguaggidiprogrammazione(McGraw-Hill2006)
Page 9
22/09/16
9
Materialedida^co
M.ScoMProgramminglanguagepragma5cs(MorganKaufmann2009)
Materialedida^co
P.Sesto?Programminglanguage
concepts(Springer2012)
Page 10
22/09/16
10
Ilmaterialedida^codellelezionisaràdisponibilesullapaginawebcosìcometu^iprogrammiOCamleJavacheverrannodiscussinelleesercitazioni
Provadiesame=progeMo+provascriMa+oraleo ammissioneall’oraleconvotazione>=16/30nelloscri?o&
valutazioneposiJvadelproge?oo 2proveintermediepossonososJtuirelaprovascri?ao 2proge^intermedipossonososJtuireilproge?o
Consiglio seguireilcorsomantenendosialpassoconlostudioo partecipare(a^vamente)alezioniedesercitazionio sostenereleproveintermedie
19
PR2:istruzioniperl’uso
Familiaritàcoiconce^basediprogrammazionefunzionale(Caml)eimperaJva(C)o Programmazione1elaboratorioo Logicaperlaprogrammazione
Familiaritàalgoritmicaeprogrammazioneconlestru?uredaJdibase(liste,pile,code,alberi,hashtable,…)o Algoritmicaelaboratorio
Competenzerichieste(nostreaspe?aJve)
Page 11
22/09/16
11
Linguaggieastrazione
Ilinguaggidiprogrammazionesonoilpiùpotentestrumentodiastrazionemessoadisposizionedeiprogrammatorio IlinguaggisisonoevoluJtrasformandoincostru^linguisJci(e
realizzandoliunavoltapertu?enell’implementazione)seMoridiapplicazioni(basididaJ,webapplicaJons,intelligenzaarJficiale,simulazione,etc.)
Difondamentaleimportanzal’introduzionedimeccanismidiastrazione,cheperme?onodiestendereunlinguaggioprogrammandonuoveoperazioni,Jpididato,etc.
21
IldiagrammaevoluJvo
22
Page 12
22/09/16
12
TanJlinguaggi.Perché?
Prendiamoilmiglioreebasta!!!o ComevedreteaCalcolabilitàeComplessità,ilinguaggidiprogrammazionesonotu^(Turing)equivalenJ:stessapotenzaespressiva
ImigliorisonotanJ…o VisioneOracle-Sun:Javao VisioneMicrosow:C#,F#o VisionedellosviluppatoreWeb:JavaScript,o VisionedatascienJst:PythonTantemoJvazionidiverse:alcunilinguaggimegliosiada?anoaunparJcolarecontestoo PROLOG:AI
Adayinthelifeofawebprogrammer
Developwebappso ApplicaJonframework(e.g.Mozilla) Clientsideprogrammingo Javascript(funzionalità), Serversideprogrammingo CGIscriptso ScripJng(PHP,Pearl,Ruby,…)o Javao Databaseaccess(SQL)o XMLperwebservicesSenzadimenJcareunsistemadiversioning(egGIT)
Page 13
22/09/16
13
Navigatesulweb
Ilsitowww.scriptol.com/programming/fibonacci.phpdescriveilprogrammachecalcolainumeridifibonaccineiprincipalilinguaggidiprogrammazione
Ilsitowww.99-bo?les-of-beer.netdecrivecomeprogrammarein1500linguaggidiprogrammazioneiltestodi“99Bo>lesofBeer”
Unaclassifica…
TIOBEindex2016
Page 14
22/09/16
14
Un’altraclassifica:PYPL
PopularitYofProgrammingLanguage
Unaterzaclassifica
AnalisiquanJtaJvadeiproge^disponibilisullapia?aformaGithubo h?p://githut.info/
Page 15
22/09/16
15
Unpo’distoriadeilinguaggidiprogrammazione
IlinguaggidiprogrammazionenasconoconlamacchinadidiTuring(fondazione)elamacchinadiVonNeumann(macchinaaprogrammamemorizzato)• iprogrammisonounparJcolareJpodidatorappresentatonellamemoriadellamacchina
• lamacchinapossiedeuninterpretecapacedieseguireilprogrammamemorizzato,equindidiimplementareognialgoritmodescrivibilenel“linguaggiomacchina”
• unlinguaggiomacchinadotatodisemplicioperazioniprimiJveperlasceltaeperiterare(osimili)èTuring-equivalente,cioépuòdescriveretu^glialgoritmi
30
Linguaggidiprogrammazione
Page 16
22/09/16
16
31
Anni‘50
FORTRANeCOBOL(sempreverdi)o notazionisimbolicheorientaterispe^vamentealcalcoloscienJfico(numerico)eallagesJonedaJ(anchesumemoriasecondaria)
o astrazioneprocedurale(so?oprogrammi,maconcara?erisJchemoltosimiliaicostru^forniJdailinguaggimacchina)
o meccanismilinguisVciperintrodurrenuoveoperazioniestruMuredaV(peresempio,gliarrayinFORTRANeirecordinCOBOL)
o all’occhiomoderno:nulladisignificaJvamentediversodailinguaggimacchina
ü FondamenV(teoria)ü formalizzazionedegliaspe^sinta^ciü primirisultaJsemanJcibasaJsullambda-calcolo
ü CaraMerisVchecomuniü introduzionedellanozionediambienteperlagesJonedegliidenJficatorieleregolediscope
ü veraastrazioneproceduraleconricorsioneü ALGOL60
ü primolinguaggioimperaJvoveramenteadaltolivelloü scopingstaJcoegesJonedinamicadellamemoriaastack
ü LISP(sempreverde)ü primolinguaggiofunzionale,dire?amenteispiratoallambda-calcolo(lateoriaritorna)
ü scopingdinamico,stru?uredaJdinamiche,gesJonedinamicadellamemoriaaheapcongarbagecollector
32
Ifavolosi‘60:LISPeALGOL
Page 17
22/09/16
17
• ALGOL60,proto9podeilinguaggiimpera9vi• LISP,proto9podeilinguaggilogiciefunzionali
• Analizzandoiduelinguaggiciaccorgiamocheoriginanoconce^similinonacasobasaJsullateoria• lagesJonedell’ambientetramitelostack
• Gliapproccirestanodiversieoriginanoduefiloni• ilfiloneimpera5vo(esempioC)• ilfilonefunzionale(esempioOCaml)
33
Eperalprecisione…
• PL/I:primotentaJvodilinguaggio“globale”(targatoIBM)• tentaJvodisintesifraLISP,ALGOL60eCOBOL• fallitopermancanzadiunavisionesemanJcaunitaria
• SIMULA67:nascedifa?olaprogrammazioneaoggeC• estensionediALGOL60orientatoallasimulazionediscreta• quasisconosciuto,riscoperto15annidopo
34
Lafinedeglianni‘60
Page 18
22/09/16
18
• Glianni’70• metodologiediprogrammazione,JpididaJastra^,modularità,classieogge^
• programmazionedisistemainlinguaggiadaltolivello:eccezionieconcorrenza
• Unesempio:PASCAL• estensionediALGOL60condefinizionediJpi(nonastra^),usoesplicitodipuntatoriegesJonedinamicadellamemoriaaheap(senzagarbagecollector)
• sempliceimplementazionemista(conP-Code,antesignanodelbytecode),facilmenteportabile
35
EvoluzionedelfiloneimperaJvo
• C:PASCAL+moduli+Jpiastra^+eccezioni+interfacciaperinteragireconilsistemaoperaJvo
• ADA:ilsecondotentaJvodilinguaggio“totalitario”(targatoUSDoD)• C+concorrenza+costru^perlaprogrammazioneintemporeale
• proge?oambizioso:grandeenfasisusemanJcastaJca(proprietàverificabilidalcompilatore)
• C++:C+classieogge^(allocaJsulloheap,ancorasenzagarbagecollector)
36
IldopoPASCAL
Page 19
22/09/16
19
37
Laprogrammazionelogica
PROLOG• implementazionediunframmentodelcalcolodeipredicaJdelprimoordine(lateoriacheaiuta)
• stru?uredaJmoltoflessibili(termini)concalcoloeffe?uatodall’algoritmodiunificazione
• computazioninon-determinisJche• gesJonememoriaaheapcongarbagecollector
CLP(ConstraintLogicProgramming)• PROLOG+calcolosudominidiversi(anchenumerici)conopportunialgoritmidisoluzionedivincoli
38
Laprogrammazionefunzionale
ML:implementazionedellambda-calcoloJpato• definizionedinuoviJpiricorsivi,ivalorideinuoviJpisonotermini,chepossonoesserevisitaJconunmeccanismodipa?ernmatching(versionesemplificatadell’unificazione)
• scopingstaJco(adifferenzadiLISP)• semanJcastaJcamoltopotente(inferenzaecontrollodeiJpi)• unprogramma“corre?o”perlasemanJcastaJcaquasisemprevabene
• gesJonememoriaaheapcongarbagecollector
HASKELL:MLconregoladivalutazione“lazy”
Page 20
22/09/16
20
• Moltecara?erisJchedalfiloneimperaJvo• essenzialmentetu?equellediC++
• Alcunecara?erisJchedeilinguaggilogico-funzionali• gesJonedellamemoriacongarbagecollector
• UsodelmeccanismodiclassiedereditarietàperridurreilnumerodimeccanismiprimiJvi• quasitu?oèrealizzatoconclassipredefinitenellelibrerie
• Implementazionemista,Jpicadelfilonelogico• chenefacilitalaportabilitàelorendemoltoada?oadessereintegratonelleapplicazionidirete
39
Java
C#
C#:linguaggiodiprogrammazioneaogge^sviluppatoperlaprogrammazionenelframework.NETo il“meglio”diJavaeC++
IJpiprimiJvidellinguaggiohannounacorrispondenzaprecisaconiJpidisponibiliarun-Jme
Page 21
22/09/16
21
SCALA
Scalasmoothlyintegratesfeaturesofobject-orientedandfuncJonallanguages
F#
MLspiegatoalpopolo
Page 22
22/09/16
22
Evoluzionedeilinguaggi
a. UnecosistemadiapplicazionidifferenJb. Enfasicrescentesulleastrazioniperilprogrammatorec. Cara?erisJchesignificaJve:migliorarelaaffidabilità,
lamanutenibilitàelasicurezzadelsowwared. Aspe^moderni:astrazionipermobilitàedistribuzionee. PrimiJvelinguisJcheeastrazioniperparallelismoe
concorrenzaf. Trend:mul5-paradigmprogramming
Unesempio
Pythonlinguaggiodiprogrammazionesviluppatoafineanni‘80daGuidovanRossum(CWI) Uno“scripJnglanguage” LinguaggiomulJ-paradigma:supportainmodonaJvoogge^efunzionidiordinesuperioreJpichedellaprogrammazionefunzionale TipidinamiciegesJonedinamicadellamemoria
Page 23
22/09/16
23
Ruby
RubylinguaggiodiscripJngsviluppatoafineanni’90daYukihiroMatsumoto InfluenzatodaPerlandSmalltalk MulJ-paradigma:funzionale,aogge^,imperaJvoconmeccanismidimeta-programmazione(LISPcheritorna) Ruby(comelodescrivono)o everythingisanobjecto everyopera5onisamethodcallo allprogrammingismeta-programming Usatonellosviluppodiapplicazioniweb
ParadigmafunzionaleperJavaeC#
Java8:laversionecorrentediJavaIntroduzionedimeccanismilinguisJciperlaprogrammazionefunzionale:Lambdao Problema:introdurreLambdasenzadoverricompilareicodicibinariesistenJ.
EspressioniLambdasonodisponibiliancheinC#o …conilmedesimoscopo
Page 24
22/09/16
24
Modellicomputazionali
² Comevedremomeglionellasecondapartedelcorsoaognilinguaggioèassociatounmodellodicalcolo
² ImperaVvo:Fortran(1957)
² Funzionale:Lisp(1958)
² AoggeY:Simula(1967)
² Logico:Prolog(1972)
² Relazionale:SQL(1974)
Ilproge?odiPR2
Unmetodoefficacepercomprenderecosasignifica“modellodicomputazione”èproge?areesviluppareunlinguaggiodiprogrammazioneo Ilproge?odiPR2siproponequestoobie^vo!!