14/10/17
1
PROGRAMMAZIONE21.Introduzione
PR22017-2018 1
PRESENTAZIONI
• GianluigiFerrario [email protected] WebhFp://pages.di.unipi.it/ferrari/
o Dicosamioccupo(ricerca)o FormalmethodsinSoCwareEngineering
ü VerificaQon,modelchecking,andstaQcanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
ü Serviceoriented&CloudcompuQngü ProgramminglanguagesforIoT
o Securityü Language-basedsecurity
PR22017-2018 2
14/10/17
2
PRESENTAZIONI
• FabioGadduccio [email protected] WebhFp://pages.di.unipi.it/gadducci/
• Dicosamioccupo(ricerca)o FormalmethodsinSoCwareEngineering
ü VerificaQon,modelchecking,andstaQcanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
ü ServiceorientedcompuQngü TheoreQcalfoundaQons
o Visualmodelingü GraphicalspecificaQonsandmodeltransformaQons
PR22017-2018 3
PROGRAMMAZIONE2
QualisonogliargomenQdelcorso?DuetemaQcheprincipali
PR22017-2018 4
14/10/17
3
ProgrammazioneOO
• TecnicheperlaprogrammazioneOO(inpiccolo)o Specifica,implementazione,correQezza
o ProgeQareeprogrammareunsistemao DimostrarelacorreQezzadiunaimplementazioneètantoimportantequantoprogrammare
o Programmazioneconcorrente(sepossibile)• EsemplificateuQlizzandoJava
– Nonècompitodiquestocorsointrodurreillinguaggionellasuainterezza…nétantomenolesuelibrerie(cheimpareretedasoli,quandoviservono)
PR22017-2018 5
Unavalangadilibri…
PR22017-2018 6
14/10/17
4
Materialedidahco(testodiriferimento)
B. Liskov, J. Guttag Program development in Java (Addison Wesley 2000) Datato, ma copre tutti gli aspetti
concettuali fondamentali
PR22017-2018 7
Materialedidahco(perchiècurioso)
F. Carrano, T. Henry Data Structures and Abstractions
with Java (Pearson 2017)
PR22017-2018 8
14/10/17
5
Materialedidahco
R. Bruni, A. Corradini, V. Gervasi Programmazione in Java (Apogeo 2011)
Ottima introduzione per chi pensa di avere lacune con la programmazione
PR22017-2018 9
Online
• OracleJavatutorials,docs.oracle.com/javase/tutorial/java/
• DavidEck,Introduc2ontoprogrammingusingJava,math.hws.edu/javanotes/
• OnlinenetrovatemolQaltri…• …senQteviliberidiseguirelavostracuriosità
PR22017-2018 10
14/10/17
6
LINGUAGGIDIPROGRAMMAZIONE
PR22017-2018 11
Comescegliereunlinguaggio
Scelta?…1. Lelibrerie2. AmbienQdiprogrammazione3. Le“bestpracQce”aziendali
NostroobieVvo:fornireglistrumenXchevipermeQerannodifarescelteconsapevoli
PR22017-2018 12
14/10/17
7
LinguaggidiProgrammazione
• Studiareiprincipichestannoallabasedeilinguaggidiprogrammazione
• EssenzialepercomprendereilprogeFo,larealizzazioneel’applicazionepraQcadeilinguaggi
• Nonciinteressarisponderealladomanda“JavaèmegliodiC#”?
PR22017-2018 13
TanQaspehimportanQ…
• ParadigmilinguisXci:– ImperaXvo,funzionale,orientatoaglioggeV
• Implementazione:struFureatempodiesecuzione– QualisonolestruFuredelrun-Qme?– ComevengonogesQte?– QualisonolerelazionitraparadigmilinguisQciestruFuredelrun-Qme?
• Ilnostroapproccio:ladescrizionedell’implemementazionedellinguaggioèguidatadallasemanQcaformale!– StruFuradelrun-QmesimulatainOcaml
• CisononumerosilibrisultemachesonouQliperilcorso…mameFeremoadisposizionedellenote
PR22017-2018 14
14/10/17
8
Materialedidahco(testodiriferimento)
M. Gabbrielli, S. Martini Linguaggi di programmazione (McGraw-Hill 2006)
PR22017-2018 15
Materialedidahco(perchiècurioso)
M. Scott Programming language pragmatics (Morgan Kaufmann 2009)
PR22017-2018 16
14/10/17
9
Materialedidahco(perchiècurioso)
P. Sestoft Programming language concepts (Springer 2012)
PR22017-2018 17
PR2:istruzioniperl’uso
• IlmaterialedidahcodellelezionisaràdisponibilesullapaginawebcosìcometuhiprogrammiOCamleJavacheverrannodiscussinelleesercitazioni
• Provadiesame=progeQo+provascriQa+oraleo ammissioneall’oraleconvotazione>=16/30nelloscriFo&
valutazioneposiQvadelprogeFoo 2proveintermediepossonososQtuirelaprovascriFao 2progehintermedipossonososQtuireilprogeFo
• Consiglio seguireilcorsomantenendosialpassoconlostudioo partecipare(ahvamente)alezioniedesercitazionio sostenereleproveintermedie
PR22017-2018 18
14/10/17
10
Competenzerichieste(nostreaspeFaQve)
• Familiaritàcoiconcehbasediprogrammazionefunzionale(OCaML)eimperaQva(C)o Programmazione1elaboratorioo Logicaperlaprogrammazione
• FamiliaritàalgoritmicaenellaprogrammazioneconlestruFuredaQdibase(liste,pile,code,alberi,hashtable,…)o Algoritmicaelaboratorio
PR22017-2018 19
Linguaggieastrazione
• Ilinguaggidiprogrammazionesonoilpiùpotentestrumentodiastrazionemessoadisposizionedeiprogrammatori– IlinguaggisisonoevoluQtrasformandoincostruhlinguisQci(erealizzandoliunavoltapertuFenell’implementazione)
• seQoridiapplicazioni(basididaQ,webapplicaQons,intelligenzaarQficiale,simulazione,etc.)
• Difondamentaleimportanzal’introduzionedimeccanismidiastrazione,chepermeFonodiestendereunlinguaggioprogrammandonuoveoperazioni,Qpididato,etc.
PR22017-2018 20
14/10/17
11
LinguaggidiProgrammazione
PR22017-2018 21
TanQlinguaggi.Perché?
• Prendiamoilmiglioreebasta!!!– ComevedreteaCalcolabilitàeComplessità,ilinguaggidi
programmazionesonotuh(Turing)equivalenQ:stessapotenzaespressiva
• ImigliorisonotanQ…– VisioneOracle-Sun:Java– VisioneMicrosow:C#,F#– VisionedellosviluppatoreWeb:JavaScript,– VisionedatascienQst:Python
• TantemoQvazionidiverse:alcunilinguaggimegliosiadaFanoaunparQcolarecontesto– PROLOG:AI
PR22017-2018 22
14/10/17
12
Adayinthelifeofawebprogrammer
• Webapps– ApplicaQonframework(e.g.Mozilla)
• Clientsideprogrammingo JavaScript(funzionalità)
• Serversideprogrammingo CGIscriptso ScripQng(PHP,Pearl,Ruby,…)o Javao Databaseaccess(SQL)o XMLperwebservices
• SenzadimenQcareunsistemadiversioning(e.g.GIT)
PR22017-2018 23
Navigatesulweb
• Ilsitowww.scriptol.com/programming/fibonacci.phpdescriveilprogrammachecalcolainumeridiFibonaccineiprincipalilinguaggidiprogrammazione
• Ilsitowww.99-boFles-of-beer.netdecrivecomeprogrammarein1500linguaggidiprogrammazioneiltestodi“99Bo8lesofBeer”
PR22017-2018 24
14/10/17
13
Unaclassifica…
TIOBEindex2016
PR22017-2018 25
Un’altraclassifica:PYPL
PopularityofProgrammingLanguages
PR22017-2018 26
14/10/17
14
Unaterzaclassifica
• Analisi quantitativa dei progetti disponibili sulla piattaforma Github – http://githut.info/
PR22017-2018 27
Unpo’distoriadeilinguaggidiprogrammazione
PR22017-2018 28
14/10/17
15
Linguaggidiprogrammazione
Ilinguaggidiprogrammazione“nascono”conlemacchinediTuring(fondazione)eVonNeumann(aprogrammamemorizzato)• iprogrammisonounparQcolareQpodidatorappresentatonellamemoriadellamacchina
• lamacchinapossiedeuninterpretecapacedieseguireilprogrammamemorizzato,equindidiimplementareognialgoritmodescrivibilenel“linguaggiomacchina”
• unlinguaggiomacchinadotatodisemplicioperazioniprimiQveperlasceltaeperiterare(osimili)èTuring-equivalente,cioépuòdescriveretuhglialgoritmi
PR22017-2018 29
Anni’50
• FORTRANeCOBOL(sempreverdi)– notazionisimbolicheorientaterispehvamentealcalcoloscienQfico(numerico)eallagesQonedaQ(anchesumemoriasecondaria)
– astrazioneprocedurale(soFoprogrammi,maconcaraFerisQchemoltosimiliaicostruhforniQdailinguaggimacchina)
– meccanismilinguisXciperintrodurrenuoveoperazioniestruQuredaX(peresempio,gliarrayinFORTRANeirecordinCOBOL)
– all’occhiomoderno:nulladisignificaQvamentediversodailinguaggimacchina
PR22017-2018 30
14/10/17
16
Ifavolosi’60:LISPeALGOL
ü FondamenX(teoria)ü formalizzazionedegliaspehsintahciü primirisultaQsemanQcibasaQsullambda-calcolo
ü CaraQerisXchecomuniü introduzionedellanozionediambienteperlagesQonedegliidenQficatorieleregolediscope
ü veraastrazioneproceduraleconricorsioneü ALGOL60
ü primolinguaggioimperaQvoveramenteadaltolivelloü scopingstaQcoegesQonedinamicadellamemoriaastack
ü LISP(sempreverde)ü primolinguaggiofunzionale,direFamenteispiratoallambda-calcolo(lateoriaritorna)
ü scopingdinamico,struFuredaQdinamiche,gesQonedinamicadellamemoriaaheapcongarbagecollector
PR22017-2018 31
Eperalprecisione…
• ALGOL60,proto9podeilinguaggiimpera9vi• LISP,proto9podeilinguaggilogiciefunzionali
• AnalizzandoiduelinguaggiciaccorgiamocheoriginanoconcehsimilinonacasobasaQsullateoria• lagesQonedell’ambientetramitelostack
• Gliapproccirestanodiversieoriginanoduefiloni• ilfiloneimpera2vo(e.g.C)• ilfilonefunzionale(e.g.OCaML)
PR22017-2018 32
14/10/17
17
Lafinedeglianni‘60
• PL/I:primotentaQvodilinguaggio“globale”(targaIBM)• tentaQvodisintesifraLISP,ALGOL60eCOBOL• fallitopermancanzadiunavisionesemanQcaunitaria
• SIMULA67:nascedifaFolaprogrammazioneaoggeB• estensionediALGOL60orientatoallasimulazionediscreta• quasisconosciuto,riscoperto15annidopo
PR22017-2018 33
EvoluzionedelfiloneimperaQvo
• Glianni’70• metodologiediprogrammazione,QpididaQastrah,modularità,classieoggeh
• programmazionedisistemainlinguaggiadaltolivello:eccezionieconcorrenza
• Unesempio:PASCAL• estensionediALGOL60condefinizionediQpi(nonastrah),usoesplicitodipuntatoriegesQonedinamicadellamemoriaaheap(senzagarbagecollector)
• sempliceimplementazionemista(conP-Code,antesignanodelbytecode),facilmenteportabile
PR22017-2018 34
14/10/17
18
IldopoPASCAL
• C:PASCAL+moduli+Qpiastrah+eccezioni+interfacciaperinteragireconilsistemaoperaQvo
• ADA:ilsecondotentaQvodilinguaggio“totalitario”(targatoUSDoD)• C+concorrenza+costruhperlaprogrammazioneintemporeale
• progeFoambizioso:grandeenfasisusemanQcastaQca(proprietàverificabilidalcompilatore)
• C++:C+classieoggeh(allocaQsulloheap,ancorasenzagarbagecollector)
PR22017-2018 35
Laprogrammazionelogica
PROLOG• implementazionediunframmentodelcalcolodeipredicaQdelprimoordine(lateoriacheaiuta)
• struFuredaQmoltoflessibili(termini)concalcoloeffeFuatodall’algoritmodiunificazione
• computazioninon-determinisQche• gesQonememoriaaheapcongarbagecollector
CLP(ConstraintLogicProgramming)• PROLOG+calcolosudominidiversi(e.g.numerici)conopportunialgoritmidisoluzionedivincoli
PR22017-2018 36
14/10/17
19
Laprogrammazionefunzionale
ML:implementazionedellambda-calcoloQpato• definizionedinuoviQpiricorsivi,icuivalorisonoterminichepossonoesserevisitaQconunmeccanismodipaFernmatching(versionesemplificatadell’unificazione)
• scopingstaQco(adifferenzadiLISP)• semanQcastaQcapotente(inferenzaecontrollodeiQpi)
• unprogramma“correFo”perlasemanQcastaQcaquasisemprevabene
• gesQonememoriaaheapcongarbagecollector
HASKELL:MLconregoladivalutazione“lazy”
PR22017-2018 37
• MoltecaraFerisQchedalfiloneimperaQvo• essenzialmentetuFequellediC++
• AlcunecaraFerisQchedeilinguaggilogico-funzionali• gesQonedellamemoriacongarbagecollector
• UsodelmeccanismodiclassiedereditarietàperridurreilnumerodimeccanismiprimiQvi• quasituFoèrealizzatoconclassipredefinitenellelibrerie
• Implementazionemista,Qpicadelfilonelogico• chenefacilitalaportabilitàelorendemoltoadaFoaessereintegratonelleapplicazionidirete
JAVA
PR22017-2018 38
14/10/17
20
C#
• C#:linguaggiodiprogrammazioneaoggehsviluppatoperlaprogrammazionenelframework.NETo il“meglio”diJavaeC++
• IQpiprimiQvidellinguaggiohannounacorrispondenzaprecisaconiQpidisponibiliarun-Qme
PR22017-2018 39
SCALA
• Scalasmoothlyintegratesfeaturesofobject-orientedandfuncQonallanguages
PR22017-2018 40
14/10/17
21
F#
• MLspiegatoalpopolo
PR22017-2018 41
Evoluzionedeilinguaggi
a. UnecosistemadiapplicazionidifferenQb. Enfasicrescentesulleastrazioniperilprogrammatorec. CaraFerisQchesignificaQve:migliorarelaaffidabilità,
lamanutenibilitàelasicurezzadelsowwared. Aspehmoderni:astrazionipermobilitàedistribuzionee. PrimiQvelinguisQcheeastrazioniperparallelismoe
concorrenzaf. Trend:mul2-paradigmprogramming
PR22017-2018 42
14/10/17
22
Unesempio:PYTHON
• Pythonlinguaggiodiprogrammazionesviluppatoafineanni‘80daGuidovanRossum(CWI)
• Uno“scripQnglanguage”• LinguaggiomulQ-paradigma:supportainmodonaQvooggehefunzionidiordinesuperioreQpichedellaprogrammazionefunzionale
• TipidinamiciegesQonedinamicadellamemoria
PR22017-2018 43
Unaltroesempio:RUBY
• RubylinguaggiodiscripQngsviluppatoafineanni’90daYukihiroMatsumoto
• InfluenzatodaPerlandSmalltalk• MulQ-paradigma:funzionale,aoggeh,imperaQvoconmeccanismidimeta-programmazione(LISPritorna!)
• Ruby(comelodescrivono)o everythingisanobjecto everyopera2onisamethodcallo allprogrammingismeta-programming
• Usatonellosviluppodiapplicazioniweb
PR22017-2018 44
14/10/17
23
ParadigmafunzionaleperJAVAeC#
• Java8:laversionecorrentediJava• IntroduzionedimeccanismilinguisQciperlaprogrammazionefunzionale:Lambda– Problema:introdurreLambdasenzadoverricompilareicodicibinariesistenQ
• EspressioniLambdasonodisponibiliancheinC#– …conilmedesimoscopo
PR22017-2018 45
Modellicomputazionali
² Comevedremomeglionellasecondapartedelcorsoaognilinguaggioèassociatounmodellodicalcolo
² ImperaXvo:Fortran(1957)
² Funzionale:Lisp(1958)
² AoggeV:Simula(1967)
² Logico:Prolog(1972)
² Relazionale:SQL(1974)
PR22017-2018 46