Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
PROGRAMMAZIONE21.Introduzione
AA2016-2017
1
GianluigiFerrario [email protected] Webh=p://pages.di.unipi.it/ferrari/
o Dicosamioccupo(ricerca)o FormalmethodsinSo?wareEngineering
! VerificaIon,modelchecking,andstaIcanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
! Serviceoriented&CloudcompuIng! ProgramminglanguagesforIoT
o Security! Language-basedsecurity
2
PRESENTAZIONI
FabioGadduccio [email protected] Webh=p://pages.di.unipi.it/gadducci/ Dicosamioccupo(ricerca)o FormalmethodsinSo?wareEngineering
! VerificaIon,modelchecking,andstaIcanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
! ServiceorientedcompuIng! TheoreIcalfoundaIons
o Visualmodeling! GraphicalspecificaIonsandmodeltransformaIons
3
PRESENTAZIONI
PROGRAMMAZIONE2
Cosastudiamo?DuetemaIcheprincipali
Tecnicheperlaprogrammazioneorientataadogge](inpiccolo)o Specifica,implementazione,correMezza
o ProgeMareeprogrammareunsistema! DimostrarelacorreMezzadiunaimplementazioneètantoimportantequantoprogrammare
o Programmazioneconcorrente(sepossibile)EsemplificateuIlizzandoJavao nonècompitodiquestocorsointrodurreillinguaggionellasuainterezza…
o nétantomenolesuelibrerie(cheimpareretedasoli,quandoviservono)
5
ProgrammazioneOO
Unavalangadilibri…
Materialedida]co
B.Liskov,J.GuMagProgramdevelopmentin
Java(AddisonWesley2000)Datato,macopretu]gli
aspe]conceMualifondamentali
Materialedida]co
M.Herlihy,N.ShavitTheartofmul5processor
programming(MorganKaufmann2012)Programmazione
concorrenteetecnichepermulI-core
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/ OnlinenetrovatemolIaltri… …senIteviliberidiseguirelavostracuriosità
Obie]vi
TanVLinguaggidiprogrammazioneo C,ML,Java,C#,…Python,Javascript,Ruby,Scala,F#.....
ObieYvo1:acquisirecompetenzegeneralichepossanoessereapplicateaunavarietàdilinguaggidiprogrammazione. ObieYvo2:acquisirelecompetenzeperimparare“prestoebene”unnuovolinguaggiodiprogrammazione.
LINGUAGGIDIPROGRAMMAZIONE
Comescegliereunlinguaggio
Scelta?…1. Lelibrerie2. AmbienIdiprogrammazione3. Le“bestpracIce”aziendali
NostroobieYvo:fornireglistrumenVchevipermeMerannodifarescelteconsapevoli
Studiareiprincipichestannoallabasedeilinguaggidiprogrammazione Essenzialepercomprendereilproge=o,larealizzazioneel’applicazionepraIcadeilinguaggi Nonciinteressarisponderealladomanda“JavaèmegliodiC#”?
14
LinguaggidiProgrammazione
ParadigmilinguisVci:o ImperaVvo,funzionale,orientatoaglioggeYImplementazione:stru=ureatempodiesecuzioneo Qualisonolestru=uredelrun-Ime?o ComevengonogesIte?o QualisonolerelazionitraparadigmilinguisIciestru=uredelkrunIme?
Ilnostroapproccio:ladescrizionedell’implemementazionedellinguaggioèguidatadallasemanIcaformale!o Stru=uradelrun-ImesimulatainOcaml.Cisononumerosilibrisull’argomentochesonouIliperilnostrocorso…mame=eremoadisposizionedellenote.
15
TanIaspe]importanI…
Materialedida]co
M.Gabbrielli,S.MarVniLinguaggidiprogrammazione(McGraw-Hill2006)
Materialedida]co
M.ScoMProgramminglanguagepragma5cs(MorganKaufmann2009)
Materialedida]co
P.Sesto?Programminglanguage
concepts(Springer2012)
Ilmaterialedida]codellelezionisaràdisponibilesullapaginawebcosìcometu]iprogrammiOCamleJavacheverrannodiscussinelleesercitazioni
Provadiesame=progeMo+provascriMa+oraleo ammissioneall’oraleconvotazione>=16/30nelloscri=o&
valutazioneposiIvadelproge=oo 2proveintermediepossonososItuirelaprovascri=ao 2proge]intermedipossonososItuireilproge=o
Consiglio seguireilcorsomantenendosialpassoconlostudioo partecipare(a]vamente)alezioniedesercitazionio sostenereleproveintermedie
19
PR2:istruzioniperl’uso
Familiaritàcoiconce]basediprogrammazionefunzionale(Caml)eimperaIva(C)o Programmazione1elaboratorioo Logicaperlaprogrammazione
Familiaritàalgoritmicaeprogrammazioneconlestru=uredaIdibase(liste,pile,code,alberi,hashtable,…)o Algoritmicaelaboratorio
Competenzerichieste(nostreaspe=aIve)
Linguaggieastrazione
Ilinguaggidiprogrammazionesonoilpiùpotentestrumentodiastrazionemessoadisposizionedeiprogrammatorio IlinguaggisisonoevoluItrasformandoincostru]linguisIci(e
realizzandoliunavoltapertu=enell’implementazione)seMoridiapplicazioni(basididaI,webapplicaIons,intelligenzaarIficiale,simulazione,etc.)
Difondamentaleimportanzal’introduzionedimeccanismidiastrazione,cheperme=onodiestendereunlinguaggioprogrammandonuoveoperazioni,Ipididato,etc.
21
IldiagrammaevoluIvo
22
TanIlinguaggi.Perché?
Prendiamoilmiglioreebasta!!!o ComevedreteaCalcolabilitàeComplessità,ilinguaggidiprogrammazionesonotu](Turing)equivalenI:stessapotenzaespressiva
ImigliorisonotanI…o VisioneOracle-Sun:Javao VisioneMicrosov:C#,F#o VisionedellosviluppatoreWeb:JavaScript,o VisionedatascienIst:PythonTantemoIvazionidiverse:alcunilinguaggimegliosiada=anoaunparIcolarecontestoo PROLOG:AI
Adayinthelifeofawebprogrammer
Developwebappso ApplicaIonframework(e.g.Mozilla) Clientsideprogrammingo Javascript(funzionalità), Serversideprogrammingo CGIscriptso ScripIng(PHP,Pearl,Ruby,…)o Javao Databaseaccess(SQL)o XMLperwebservicesSenzadimenIcareunsistemadiversioning(egGIT)
Navigatesulweb
Ilsitowww.scriptol.com/programming/fibonacci.phpdescriveilprogrammachecalcolainumeridifibonaccineiprincipalilinguaggidiprogrammazione
Ilsitowww.99-bo=les-of-beer.netdecrivecomeprogrammarein1500linguaggidiprogrammazioneiltestodi“99Bo>lesofBeer”
Unaclassifica…
TIOBEindex2016
Un’altraclassifica:PYPL
PopularitYofProgrammingLanguage
Unaterzaclassifica
AnalisiquanItaIvadeiproge]disponibilisullapia=aformaGithubo h=p://githut.info/
Unpo’distoriadeilinguaggidiprogrammazione
IlinguaggidiprogrammazionenasconoconlamacchinadidiTuring(fondazione)elamacchinadiVonNeumann(macchinaaprogrammamemorizzato)• iprogrammisonounparIcolareIpodidatorappresentatonellamemoriadellamacchina
• lamacchinapossiedeuninterpretecapacedieseguireilprogrammamemorizzato,equindidiimplementareognialgoritmodescrivibilenel“linguaggiomacchina”
• unlinguaggiomacchinadotatodisemplicioperazioniprimiIveperlasceltaeperiterare(osimili)èTuring-equivalente,cioépuòdescriveretu]glialgoritmi
30
Linguaggidiprogrammazione
31
Anni‘50
FORTRANeCOBOL(sempreverdi)o notazionisimbolicheorientaterispe]vamentealcalcoloscienIfico(numerico)eallagesIonedaI(anchesumemoriasecondaria)
o astrazioneprocedurale(so=oprogrammi,maconcara=erisIchemoltosimiliaicostru]forniIdailinguaggimacchina)
o meccanismilinguisVciperintrodurrenuoveoperazioniestruMuredaV(peresempio,gliarrayinFORTRANeirecordinCOBOL)
o all’occhiomoderno:nulladisignificaIvamentediversodailinguaggimacchina
! FondamenV(teoria)! formalizzazionedegliaspe]sinta]ci! primirisultaIsemanIcibasaIsullambda-calcolo
! CaraMerisVchecomuni! introduzionedellanozionediambienteperlagesIonedegliidenIficatorieleregolediscope
! veraastrazioneproceduraleconricorsione! ALGOL60
! primolinguaggioimperaIvoveramenteadaltolivello! scopingstaIcoegesIonedinamicadellamemoriaastack
! LISP(sempreverde)! primolinguaggiofunzionale,dire=amenteispiratoallambda-calcolo(lateoriaritorna)
! scopingdinamico,stru=uredaIdinamiche,gesIonedinamicadellamemoriaaheapcongarbagecollector
32
Ifavolosi‘60:LISPeALGOL
• ALGOL60,proto9podeilinguaggiimpera9vi• LISP,proto9podeilinguaggilogiciefunzionali
• Analizzandoiduelinguaggiciaccorgiamocheoriginanoconce]similinonacasobasaIsullateoria• lagesIonedell’ambientetramitelostack
• Gliapproccirestanodiversieoriginanoduefiloni• ilfiloneimpera5vo(esempioC)• ilfilonefunzionale(esempioOCaml)
33
Eperalprecisione…
• PL/I:primotentaIvodilinguaggio“globale”(targatoIBM)• tentaIvodisintesifraLISP,ALGOL60eCOBOL• fallitopermancanzadiunavisionesemanIcaunitaria
• SIMULA67:nascedifa=olaprogrammazioneaoggeC• estensionediALGOL60orientatoallasimulazionediscreta• quasisconosciuto,riscoperto15annidopo
34
Lafinedeglianni‘60
• Glianni’70• metodologiediprogrammazione,IpididaIastra],modularità,classieogge]
• programmazionedisistemainlinguaggiadaltolivello:eccezionieconcorrenza
• Unesempio:PASCAL• estensionediALGOL60condefinizionediIpi(nonastra]),usoesplicitodipuntatoriegesIonedinamicadellamemoriaaheap(senzagarbagecollector)
• sempliceimplementazionemista(conP-Code,antesignanodelbytecode),facilmenteportabile
35
EvoluzionedelfiloneimperaIvo
• C:PASCAL+moduli+Ipiastra]+eccezioni+interfacciaperinteragireconilsistemaoperaIvo
• ADA:ilsecondotentaIvodilinguaggio“totalitario”(targatoUSDoD)• C+concorrenza+costru]perlaprogrammazioneintemporeale
• proge=oambizioso:grandeenfasisusemanIcastaIca(proprietàverificabilidalcompilatore)
• C++:C+classieogge](allocaIsulloheap,ancorasenzagarbagecollector)
36
IldopoPASCAL
37
Laprogrammazionelogica
PROLOG• implementazionediunframmentodelcalcolodeipredicaIdelprimoordine(lateoriacheaiuta)
• stru=uredaImoltoflessibili(termini)concalcoloeffe=uatodall’algoritmodiunificazione
• computazioninon-determinisIche• gesIonememoriaaheapcongarbagecollector
CLP(ConstraintLogicProgramming)• PROLOG+calcolosudominidiversi(anchenumerici)conopportunialgoritmidisoluzionedivincoli
38
Laprogrammazionefunzionale
ML:implementazionedellambda-calcoloIpato• definizionedinuoviIpiricorsivi,ivalorideinuoviIpisonotermini,chepossonoesserevisitaIconunmeccanismodipa=ernmatching(versionesemplificatadell’unificazione)
• scopingstaIco(adifferenzadiLISP)• semanIcastaIcamoltopotente(inferenzaecontrollodeiIpi)• unprogramma“corre=o”perlasemanIcastaIcaquasisemprevabene
• gesIonememoriaaheapcongarbagecollector
HASKELL:MLconregoladivalutazione“lazy”
• Moltecara=erisIchedalfiloneimperaIvo• essenzialmentetu=equellediC++
• Alcunecara=erisIchedeilinguaggilogico-funzionali• gesIonedellamemoriacongarbagecollector
• UsodelmeccanismodiclassiedereditarietàperridurreilnumerodimeccanismiprimiIvi• quasitu=oèrealizzatoconclassipredefinitenellelibrerie
• Implementazionemista,Ipicadelfilonelogico• chenefacilitalaportabilitàelorendemoltoada=oadessereintegratonelleapplicazionidirete
39
Java
C#
C#:linguaggiodiprogrammazioneaogge]sviluppatoperlaprogrammazionenelframework.NETo il“meglio”diJavaeC++
IIpiprimiIvidellinguaggiohannounacorrispondenzaprecisaconiIpidisponibiliarun-Ime
SCALA
Scalasmoothlyintegratesfeaturesofobject-orientedandfuncIonallanguages
F#
MLspiegatoalpopolo
Evoluzionedeilinguaggi
a. UnecosistemadiapplicazionidifferenIb. Enfasicrescentesulleastrazioniperilprogrammatorec. Cara=erisIchesignificaIve:migliorarelaaffidabilità,
lamanutenibilitàelasicurezzadelsovwared. Aspe]moderni:astrazionipermobilitàedistribuzionee. PrimiIvelinguisIcheeastrazioniperparallelismoe
concorrenzaf. Trend:mul5-paradigmprogramming
Unesempio
Pythonlinguaggiodiprogrammazionesviluppatoafineanni‘80daGuidovanRossum(CWI) Uno“scripInglanguage” LinguaggiomulI-paradigma:supportainmodonaIvoogge]efunzionidiordinesuperioreIpichedellaprogrammazionefunzionale TipidinamiciegesIonedinamicadellamemoria
Ruby
RubylinguaggiodiscripIngsviluppatoafineanni’90daYukihiroMatsumoto InfluenzatodaPerlandSmalltalk MulI-paradigma:funzionale,aogge],imperaIvoconmeccanismidimeta-programmazione(LISPcheritorna) Ruby(comelodescrivono)o everythingisanobjecto everyopera5onisamethodcallo allprogrammingismeta-programming Usatonellosviluppodiapplicazioniweb
ParadigmafunzionaleperJavaeC#
Java8:laversionecorrentediJavaIntroduzionedimeccanismilinguisIciperlaprogrammazionefunzionale:Lambdao Problema:introdurreLambdasenzadoverricompilareicodicibinariesistenI.
EspressioniLambdasonodisponibiliancheinC#o …conilmedesimoscopo
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!!