PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione...
Transcript of PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione...
![Page 1: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/1.jpg)
PROGRAMMAZIONE21.Introduzione
1
![Page 2: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/2.jpg)
PRESENTAZIONI
• GianluigiFerrario [email protected] Webhttp://pages.di.unipi.it/ferrari/
o Dicosamioccupo(ricerca)o FormalmethodsinSoftwareEngineering
✓Verification,modelchecking,andstaticanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
✓Serviceoriented&Cloudcomputing✓ProgramminglanguagesforIoT
o Security✓ Language-basedsecurity
2
![Page 3: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/3.jpg)
PRESENTAZIONI
• FrancescaLevio [email protected] Webhttp://pages.di.unipi.it/levi/
• Dicosamioccupo(ricerca)o FormalmethodsinSoftwareEngineering
✓Verification,modelchecking,andstaticanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
✓Systemsbiology✓Theoreticalfoundations
3
![Page 4: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/4.jpg)
PROGRAMMAZIONE2
Qualisonogliargomentidelcorso?Duetematicheprincipali
4
![Page 5: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/5.jpg)
ProgrammazioneOO
• TecnicheperlaprogrammazioneOO(inpiccolo)o Specifica,implementazione,correttezza
o Progettareeprogrammareunsistemao Dimostrarelacorrettezzadiunaimplementazioneètantoimportantequantoprogrammare
o Programmazioneconcorrente(sepossibile)
• EsemplificateutilizzandoJava– Nonècompitodiquestocorsointrodurreillinguaggionellasuainterezza…
nétantomenolesuelibrerie(cheimpareretedasoli,quandoviservono)
5
![Page 6: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/6.jpg)
Unavalangadilibri…
6
![Page 7: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/7.jpg)
Materialedidattico(testodiriferimento)
B. Liskov, J. Guttag Program development in Java (Addison Wesley 2000)
Datato, ma copre tutti gli aspetti concettuali fondamentali
7
![Page 8: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/8.jpg)
Materialedidattico(perchiècurioso)
F. Carrano, T. Henry Data Structures and Abstractions
with Java (Pearson 2017)
8
![Page 9: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/9.jpg)
Materialedidattico
R. Bruni, A. Corradini, V. Gervasi Programmazione in Java (Apogeo 2011)
Ottima introduzione per chi pensa di avere lacune con la programmazione
9
![Page 10: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/10.jpg)
Online
• OracleJavatutorials,docs.oracle.com/javase/tutorial/java/
• DavidEck,IntroductiontoprogrammingusingJava,math.hws.edu/javanotes/
• Onlinenetrovatemoltialtri…• …sentiteviliberidiseguirelavostracuriosità
10
![Page 11: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/11.jpg)
LINGUAGGIDIPROGRAMMAZIONE
11
![Page 12: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/12.jpg)
Comescegliereunlinguaggio
Scelta? …
1.Le librerie 2.Ambienti di programmazione 3.Le “best practice” aziendali
Nostro obiettivo: fornire gli strumenti che vi permetteranno di fare scelte consapevoli
12
![Page 13: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/13.jpg)
LinguaggidiProgrammazione
• Studiareiprincipichestannoallabasedeilinguaggidiprogrammazione
• Essenzialepercomprendereilprogetto,larealizzazioneel’applicazionepraticadeilinguaggi
• Nonciinteressarisponderealladomanda“JavaèmegliodiC#”?
13
![Page 14: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/14.jpg)
Tantiaspettiimportanti…
• Paradigmilinguistici:– Imperativo,funzionale,orientatoaglioggetti
• Implementazione:struttureatempodiesecuzione– Qualisonolestrutturedelrun-time?– Comevengonogestite?– Qualisonolerelazionitraparadigmilinguisticiestrutturedelrun-time?
• Ilnostroapproccio:ladescrizionedell’implemementazionedellinguaggioèguidatadallasemanticaformale!– Strutturadelrun-timesimulatainOcaml
• Cisononumerosilibrisultemachesonoutiliperilcorso…mametteremoadisposizionedellenote
14
![Page 15: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/15.jpg)
Materialedidattico(testodiriferimento)
M. Gabbrielli, S. Martini Linguaggi di programmazione (McGraw-Hill 2006)
15
![Page 16: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/16.jpg)
Materialedidattico(perchiècurioso)
M. Scott Programming language pragmatics (Morgan Kaufmann 2009)
16
![Page 17: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/17.jpg)
Materialedidattico(perchiècurioso)
P. Sestoft Programming language concepts (Springer 2012)
17
![Page 18: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/18.jpg)
PR2:istruzioniperl’uso
• Ilmaterialedidattico(inclusiilucidi)dellelezionisaràdisponibilesullapaginaweb(incostruzione)cosìcometuttiiprogrammiOCamleJavacheverrannodiscussinelleesercitazioni
• Provadiesame=progetto+provascrittao scritto&valutazionepositivadelprogettoo 2proveintermediepossonosostituirelaprovascrittao 2progettiintermedipossonosostituireilprogetto
• Consiglio seguireilcorsomantenendosialpassoconlostudioo partecipare(attivamente)alezioniedesercitazionio sostenereleproveintermedie
18
![Page 19: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/19.jpg)
Competenzerichieste(nostreaspettative)
• Familiaritàcoiconcettibasediprogrammazionefunzionale(OCaML)eimperativa(C)o Programmazione1elaboratorioo Logicaperlaprogrammazione
• Familiaritàalgoritmicaenellaprogrammazioneconlestrutturedatidibase(liste,pile,code,alberi,hashtable,…)o Algoritmicaelaboratorio
19
![Page 20: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/20.jpg)
Linguaggieastrazione
• Ilinguaggidiprogrammazionesonoilpiùpotentestrumentodiastrazionemessoadisposizionedeiprogrammatori– Ilinguaggisisonoevolutitrasformandoincostruttilinguistici(erealizzandoli
unavoltapertuttenell’implementazione)
• settoridiapplicazioni(basididati,webapplications,intelligenzaartificiale,simulazione,etc.)
• Difondamentaleimportanzal’introduzionedimeccanismidiastrazione,chepermettonodiestendereunlinguaggioprogrammandonuoveoperazioni,tipididato,etc.
20
![Page 21: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/21.jpg)
LinguaggidiProgrammazione
21
![Page 22: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/22.jpg)
Tantilinguaggi.Perché?
• Prendiamoilmiglioreebasta!!!– ComevedreteaCalcolabilitàeComplessità,ilinguaggidi
programmazionesonotutti(Turing)equivalenti:stessapotenzaespressiva
• Imigliorisonotanti…– VisioneOracle-Sun:Java– VisioneMicrosoft:C#,F#– VisionedellosviluppatoreWeb:JavaScript,– Visionedatascientist:Python
• Tantemotivazionidiverse:alcunilinguaggimegliosiadattanoaunparticolarecontesto– PROLOG:AI
22
![Page 23: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/23.jpg)
Adayinthelifeofawebprogrammer
• Webapps– Applicationframework(e.g.Mozilla)
• Clientsideprogrammingo JavaScript(funzionalità)
• Serversideprogrammingo CGIscriptso Scripting(PHP,Pearl,Ruby,…)o Javao Databaseaccess(SQL)o XMLperwebservices
• Senzadimenticareunsistemadiversioning(e.g.GIT)
23
![Page 24: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/24.jpg)
Navigatesulweb
• Ilsitowww.scriptol.com/programming/fibonacci.phpdescriveilprogrammachecalcolainumeridiFibonaccineiprincipalilinguaggidiprogrammazione
• Ilsitowww.99-bottles-of-beer.netdecrivecomeprogrammarein1500linguaggidiprogrammazioneiltestodi“99BottlesofBeer”
24
![Page 25: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/25.jpg)
Unaclassifica…
TIOBE index 2016
25
![Page 26: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/26.jpg)
Un’altraclassifica:PYPL
Popularity of Programming Languages
26
![Page 27: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/27.jpg)
Unaterzaclassifica
• Analisi quantitativa dei progetti disponibili sulla piattaforma Github – http://githut.info/
27
![Page 28: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/28.jpg)
Unpo’distoriadeilinguaggidiprogrammazione
28
![Page 29: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/29.jpg)
Linguaggidiprogrammazione
Ilinguaggidiprogrammazione“nascono”conlemacchinediTuring(fondazione)eVonNeumann(aprogrammamemorizzato)• iprogrammisonounparticolaretipodidatorappresentatonellamemoriadella
macchina• lamacchinapossiedeuninterpretecapacedieseguireilprogrammamemorizzato,
equindidiimplementareognialgoritmodescrivibilenel“linguaggiomacchina”• unlinguaggiomacchinadotatodisemplicioperazioniprimitiveperlasceltaeper
iterare(osimili)èTuring-equivalente,cioépuòdescriveretuttiglialgoritmi
29
![Page 30: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/30.jpg)
Anni’50
• FORTRANeCOBOL(sempreverdi)– notazionisimbolicheorientaterispettivamentealcalcoloscientifico(numerico)eallagestionedati(anchesumemoriasecondaria)
– astrazioneprocedurale(sottoprogrammi,maconcaratteristichemoltosimiliaicostruttifornitidailinguaggimacchina)
– meccanismilinguisticiperintrodurrenuoveoperazioniestrutturedati(peresempio,gliarrayinFORTRANeirecordinCOBOL)
– all’occhiomoderno:nulladisignificativamentediversodailinguaggimacchina
30
![Page 31: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/31.jpg)
Ifavolosi’60:LISPeALGOL
✓ Caratteristichecomuni✓ introduzionedellanozionediambienteperlagestionedegliidentificatorieleregolediscope
✓ veraastrazioneproceduraleconricorsione✓ ALGOL60✓ primolinguaggioimperativoveramenteadaltolivello✓ scopingstaticoegestionedinamicadellamemoriaastack
✓ LISP(sempreverde)✓ primolinguaggiofunzionale,direttamenteispiratoallambda-calcolo(lateoriaritorna)
✓ scopingdinamico,strutturedatidinamiche,gestionedinamicadellamemoriaaheapcongarbagecollector
✓ Fondamenti(teoria)✓ formalizzazionedegliaspettisintattici✓ primirisultatisemanticibasatisullambda-calcolo
31
![Page 32: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/32.jpg)
E per la precisione
» LISP prototipo del paradigma logico e funzionale » ALGOL prototipo del filone imperativo
» Analizzando i due linguaggi ci accorgiamo che originano concetti simili non a caso basati sulla teoria• lagestionedell’ambientetramitelostack
» Gliapproccirestanodiversiegeneranoil• ilfiloneimperativo(e.g.C)• ilfilonefunzionale(e.g.OCaML)
32
![Page 33: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/33.jpg)
Lafinedeglianni‘60
• PL/I:primotentativodilinguaggio“globale”(targaIBM)• tentativodisintesifraLISP,ALGOL60eCOBOL• fallitopermancanzadiunavisionesemanticaunitaria
• SIMULA67:nascedifattolaprogrammazioneaoggetti• estensionediALGOL60orientatoallasimulazionediscreta• quasisconosciuto,riscoperto15annidopo
33
![Page 34: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/34.jpg)
Evoluzionedelfiloneimperativo
.Glianni’70• metodologiediprogrammazione,tipididatiastratti,modularità,classie
oggetti• programmazionedisistemainlinguaggiadaltolivello:eccezionie
concorrenza
• Unesempio:PASCAL• estensionediALGOL60condefinizioneditipi(nonastratti),usoesplicitodi
puntatoriegestionedinamicadellamemoriaaheap(senzagarbagecollector)
• sempliceimplementazionemista(conP-Code,antesignanodelbytecode),facilmenteportabile
34
![Page 35: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/35.jpg)
IldopoPASCAL
• C:PASCAL+moduli+tipiastratti+eccezioni+interfacciaperinteragireconilsistemaoperativo
• ADA:ilsecondotentativodilinguaggio“totalitario”(targatoUSDoD)• C+concorrenza+costruttiperlaprogrammazioneintemporeale• progettoambizioso:grandeenfasisusemanticastatica(proprietàverificabili
dalcompilatore)
• C++:C+classieoggetti(allocatisulloheap,ancorasenzagarbagecollector)
35
![Page 36: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/36.jpg)
Laprogrammazionelogica
PROLOG• implementazionediunframmentodelcalcolodeipredicatidelprimoordine(lateoriacheaiuta)
• strutturedatimoltoflessibili(termini)concalcoloeffettuatodall’algoritmodiunificazione
• computazioninon-deterministiche• gestionememoriaaheapcongarbagecollector
CLP(ConstraintLogicProgramming)PROLOG+calcolosudominidiversi(e.g.numerici)con
opportunialgoritmidisoluzionedivincoli
36
![Page 37: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/37.jpg)
Laprogrammazionefunzionale
ML:implementazionedellambda-calcolotipato• definizionedinuovitipiricorsivi,icuivalorisonoterminichepossonoessere
visitaticonunmeccanismodipatternmatching(versionesemplificatadell’unificazione)
• scopingstatico(adifferenzadiLISP)• semanticastaticapotente(inferenzaecontrollodeitipi)
• unprogramma“corretto”perlasemanticastaticaquasisemprevabene• gestionememoriaaheapcongarbagecollector
HASKELL:MLconregoladivalutazione“lazy”
37
![Page 38: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/38.jpg)
• Moltecaratteristichedalfiloneimperativo• essenzialmentetuttequellediC++
• Alcunecaratteristichedeilinguaggilogico-funzionali• gestionedellamemoriacongarbagecollector
• Usodelmeccanismodiclassiedereditarietàperridurreilnumerodimeccanismiprimitivi• quasituttoèrealizzatoconclassipredefinitenellelibrerie
• Implementazionemista,tipicadelfilonelogico• chenefacilitalaportabilitàelorendemoltoadattoaessereintegratonelleapplicazionidirete
JAVA
38
![Page 39: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/39.jpg)
C#
• C#:linguaggiodiprogrammazioneaoggettisviluppatoperlaprogrammazionenelframework.NETo il“meglio”diJavaeC++
• Itipiprimitividellinguaggiohannounacorrispondenzaprecisaconitipidisponibiliarun-time
39
![Page 40: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/40.jpg)
SCALA
• Scalasmoothlyintegratesfeaturesofobject-orientedandfunctionallanguages
40
![Page 41: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/41.jpg)
F#
• MLspiegatoalpopolo
41
![Page 42: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/42.jpg)
Evoluzionedeilinguaggi
a. Unecosistemadiapplicazionidifferentib. Enfasicrescentesulleastrazioniperilprogrammatorec. Caratteristichesignificative:migliorarelaaffidabilità,la
manutenibilitàelasicurezzadelsoftwared. Aspettimoderni:astrazionipermobilitàedistribuzionee. Primitivelinguisticheeastrazioniperparallelismoe
concorrenzaf. Trend:multi-paradigmprogramming
42
![Page 43: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/43.jpg)
Unesempio:PYTHON
• Pythonlinguaggiodiprogrammazionesviluppatoafineanni‘80daGuidovanRossum(CWI)
• Uno“scriptinglanguage”• Linguaggiomulti-paradigma:supportainmodonativooggettiefunzionidiordinesuperioretipichedellaprogrammazionefunzionale
• Tipidinamiciegestionedinamicadellamemoria
43
![Page 44: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/44.jpg)
Unaltroesempio:RUBY
• Rubylinguaggiodiscriptingsviluppatoafineanni’90daYukihiroMatsumoto
• InfluenzatodaPerlandSmalltalk• Multi-paradigma:funzionale,aoggetti,imperativoconmeccanismidimeta-programmazione(LISPritorna!)
• Ruby(comelodescrivono)o everythingisanobjecto everyoperationisamethodcallo allprogrammingismeta-programming
• Usatonellosviluppodiapplicazioniweb
44
![Page 45: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/45.jpg)
ParadigmafunzionaleperJAVAeC#
• Java8:laversionecorrentediJava• Introduzionedimeccanismilinguisticiperlaprogrammazionefunzionale:Lambda– Problema:introdurreLambda– senzadoverricompilareicodicibinariesistenti
• EspressioniLambdasonodisponibiliancheinC#– …conilmedesimoscopo
45
![Page 46: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/46.jpg)
Modellicomputazionali
◇ Comevedremomeglionellasecondapartedelcorsoaognilinguaggioèassociatounmodellodicalcolo◇ Imperativo:Fortran(1957)
◇ Funzionale:Lisp(1958)
◇ Aoggetti:Simula(1967)
◇ Logico:Prolog(1972)
◇ Relazionale:SQL(1974)
46
![Page 47: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/47.jpg)
IlprogettodiPR2
• Unmetodoefficacepercomprenderecosasignifica“modellodicomputazione”èprogettareesviluppareunlinguaggiodiprogrammazioneo IlprogettodiPR2siproponequestoobiettivo!!
• Esercitazionididuetipi:esercitazioniditeoria(orientatealloscritto)epratiche(noninlaboratorio)
47
![Page 48: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/48.jpg)
Concludendo
» Prima parte del corso: Metodologie di programmazione OO usando Java
» Seconda parte del corso: Linguaggi di programmazione ad alto livello e della loro implementazione
» Useremo Ocaml per implementare un interprete di un linguaggio didattico
48
![Page 49: PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione della nozione di ambiente per la gestione degli identificatori e le regole di scope](https://reader035.fdocuments.us/reader035/viewer/2022062921/5f040cca7e708231d40c120c/html5/thumbnails/49.jpg)
Pagina Web
» Lucididellelezioni(voltapervolta)» Testidialcuniscrittidegliesamidianniprecedenti» LinkperscaricareJavaeOcaml» Ilmaterialedidatticopotrebberisultareunpo’dispersivoquindiper
ogniargomentolezioneilriferimentoallapartecorrispondentenelmaterialedidatticoconsigliato
o Webhttp://pages.di.unipi.it/levi/PR2levi2019.html
49