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!!