Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
PROGRAMMAZIONE21.Introduzione
1
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
PRESENTAZIONI
• FrancescaLevio [email protected] Webhttp://pages.di.unipi.it/levi/
• Dicosamioccupo(ricerca)o FormalmethodsinSoftwareEngineering
✓Verification,modelchecking,andstaticanalysisofprogramso Programminglanguages&modelsforConcurrent/DistributedSystems
✓Systemsbiology✓Theoreticalfoundations
3
PROGRAMMAZIONE2
Qualisonogliargomentidelcorso?Duetematicheprincipali
4
ProgrammazioneOO
• TecnicheperlaprogrammazioneOO(inpiccolo)o Specifica,implementazione,correttezza
o Progettareeprogrammareunsistemao Dimostrarelacorrettezzadiunaimplementazioneètantoimportantequantoprogrammare
o Programmazioneconcorrente(sepossibile)
• EsemplificateutilizzandoJava– Nonècompitodiquestocorsointrodurreillinguaggionellasuainterezza…
nétantomenolesuelibrerie(cheimpareretedasoli,quandoviservono)
5
Unavalangadilibri…
6
Materialedidattico(testodiriferimento)
B. Liskov, J. Guttag Program development in Java (Addison Wesley 2000)
Datato, ma copre tutti gli aspetti concettuali fondamentali
7
Materialedidattico(perchiècurioso)
F. Carrano, T. Henry Data Structures and Abstractions
with Java (Pearson 2017)
8
Materialedidattico
R. Bruni, A. Corradini, V. Gervasi Programmazione in Java (Apogeo 2011)
Ottima introduzione per chi pensa di avere lacune con la programmazione
9
Online
• OracleJavatutorials,docs.oracle.com/javase/tutorial/java/
• DavidEck,IntroductiontoprogrammingusingJava,math.hws.edu/javanotes/
• Onlinenetrovatemoltialtri…• …sentiteviliberidiseguirelavostracuriosità
10
LINGUAGGIDIPROGRAMMAZIONE
11
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
LinguaggidiProgrammazione
• Studiareiprincipichestannoallabasedeilinguaggidiprogrammazione
• Essenzialepercomprendereilprogetto,larealizzazioneel’applicazionepraticadeilinguaggi
• Nonciinteressarisponderealladomanda“JavaèmegliodiC#”?
13
Tantiaspettiimportanti…
• Paradigmilinguistici:– Imperativo,funzionale,orientatoaglioggetti
• Implementazione:struttureatempodiesecuzione– Qualisonolestrutturedelrun-time?– Comevengonogestite?– Qualisonolerelazionitraparadigmilinguisticiestrutturedelrun-time?
• Ilnostroapproccio:ladescrizionedell’implemementazionedellinguaggioèguidatadallasemanticaformale!– Strutturadelrun-timesimulatainOcaml
• Cisononumerosilibrisultemachesonoutiliperilcorso…mametteremoadisposizionedellenote
14
Materialedidattico(testodiriferimento)
M. Gabbrielli, S. Martini Linguaggi di programmazione (McGraw-Hill 2006)
15
Materialedidattico(perchiècurioso)
M. Scott Programming language pragmatics (Morgan Kaufmann 2009)
16
Materialedidattico(perchiècurioso)
P. Sestoft Programming language concepts (Springer 2012)
17
PR2:istruzioniperl’uso
• Ilmaterialedidattico(inclusiilucidi)dellelezionisaràdisponibilesullapaginaweb(incostruzione)cosìcometuttiiprogrammiOCamleJavacheverrannodiscussinelleesercitazioni
• Provadiesame=progetto+provascrittao scritto&valutazionepositivadelprogettoo 2proveintermediepossonosostituirelaprovascrittao 2progettiintermedipossonosostituireilprogetto
• Consiglio seguireilcorsomantenendosialpassoconlostudioo partecipare(attivamente)alezioniedesercitazionio sostenereleproveintermedie
18
Competenzerichieste(nostreaspettative)
• Familiaritàcoiconcettibasediprogrammazionefunzionale(OCaML)eimperativa(C)o Programmazione1elaboratorioo Logicaperlaprogrammazione
• Familiaritàalgoritmicaenellaprogrammazioneconlestrutturedatidibase(liste,pile,code,alberi,hashtable,…)o Algoritmicaelaboratorio
19
Linguaggieastrazione
• Ilinguaggidiprogrammazionesonoilpiùpotentestrumentodiastrazionemessoadisposizionedeiprogrammatori– Ilinguaggisisonoevolutitrasformandoincostruttilinguistici(erealizzandoli
unavoltapertuttenell’implementazione)
• settoridiapplicazioni(basididati,webapplications,intelligenzaartificiale,simulazione,etc.)
• Difondamentaleimportanzal’introduzionedimeccanismidiastrazione,chepermettonodiestendereunlinguaggioprogrammandonuoveoperazioni,tipididato,etc.
20
LinguaggidiProgrammazione
21
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
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
Navigatesulweb
• Ilsitowww.scriptol.com/programming/fibonacci.phpdescriveilprogrammachecalcolainumeridiFibonaccineiprincipalilinguaggidiprogrammazione
• Ilsitowww.99-bottles-of-beer.netdecrivecomeprogrammarein1500linguaggidiprogrammazioneiltestodi“99BottlesofBeer”
24
Unaclassifica…
TIOBE index 2016
25
Un’altraclassifica:PYPL
Popularity of Programming Languages
26
Unaterzaclassifica
• Analisi quantitativa dei progetti disponibili sulla piattaforma Github – http://githut.info/
27
Unpo’distoriadeilinguaggidiprogrammazione
28
Linguaggidiprogrammazione
Ilinguaggidiprogrammazione“nascono”conlemacchinediTuring(fondazione)eVonNeumann(aprogrammamemorizzato)• iprogrammisonounparticolaretipodidatorappresentatonellamemoriadella
macchina• lamacchinapossiedeuninterpretecapacedieseguireilprogrammamemorizzato,
equindidiimplementareognialgoritmodescrivibilenel“linguaggiomacchina”• unlinguaggiomacchinadotatodisemplicioperazioniprimitiveperlasceltaeper
iterare(osimili)èTuring-equivalente,cioépuòdescriveretuttiglialgoritmi
29
Anni’50
• FORTRANeCOBOL(sempreverdi)– notazionisimbolicheorientaterispettivamentealcalcoloscientifico(numerico)eallagestionedati(anchesumemoriasecondaria)
– astrazioneprocedurale(sottoprogrammi,maconcaratteristichemoltosimiliaicostruttifornitidailinguaggimacchina)
– meccanismilinguisticiperintrodurrenuoveoperazioniestrutturedati(peresempio,gliarrayinFORTRANeirecordinCOBOL)
– all’occhiomoderno:nulladisignificativamentediversodailinguaggimacchina
30
Ifavolosi’60:LISPeALGOL
✓ Caratteristichecomuni✓ introduzionedellanozionediambienteperlagestionedegliidentificatorieleregolediscope
✓ veraastrazioneproceduraleconricorsione✓ ALGOL60✓ primolinguaggioimperativoveramenteadaltolivello✓ scopingstaticoegestionedinamicadellamemoriaastack
✓ LISP(sempreverde)✓ primolinguaggiofunzionale,direttamenteispiratoallambda-calcolo(lateoriaritorna)
✓ scopingdinamico,strutturedatidinamiche,gestionedinamicadellamemoriaaheapcongarbagecollector
✓ Fondamenti(teoria)✓ formalizzazionedegliaspettisintattici✓ primirisultatisemanticibasatisullambda-calcolo
31
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
Lafinedeglianni‘60
• PL/I:primotentativodilinguaggio“globale”(targaIBM)• tentativodisintesifraLISP,ALGOL60eCOBOL• fallitopermancanzadiunavisionesemanticaunitaria
• SIMULA67:nascedifattolaprogrammazioneaoggetti• estensionediALGOL60orientatoallasimulazionediscreta• quasisconosciuto,riscoperto15annidopo
33
Evoluzionedelfiloneimperativo
.Glianni’70• metodologiediprogrammazione,tipididatiastratti,modularità,classie
oggetti• programmazionedisistemainlinguaggiadaltolivello:eccezionie
concorrenza
• Unesempio:PASCAL• estensionediALGOL60condefinizioneditipi(nonastratti),usoesplicitodi
puntatoriegestionedinamicadellamemoriaaheap(senzagarbagecollector)
• sempliceimplementazionemista(conP-Code,antesignanodelbytecode),facilmenteportabile
34
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
Laprogrammazionelogica
PROLOG• implementazionediunframmentodelcalcolodeipredicatidelprimoordine(lateoriacheaiuta)
• strutturedatimoltoflessibili(termini)concalcoloeffettuatodall’algoritmodiunificazione
• computazioninon-deterministiche• gestionememoriaaheapcongarbagecollector
CLP(ConstraintLogicProgramming)PROLOG+calcolosudominidiversi(e.g.numerici)con
opportunialgoritmidisoluzionedivincoli
36
Laprogrammazionefunzionale
ML:implementazionedellambda-calcolotipato• definizionedinuovitipiricorsivi,icuivalorisonoterminichepossonoessere
visitaticonunmeccanismodipatternmatching(versionesemplificatadell’unificazione)
• scopingstatico(adifferenzadiLISP)• semanticastaticapotente(inferenzaecontrollodeitipi)
• unprogramma“corretto”perlasemanticastaticaquasisemprevabene• gestionememoriaaheapcongarbagecollector
HASKELL:MLconregoladivalutazione“lazy”
37
• Moltecaratteristichedalfiloneimperativo• essenzialmentetuttequellediC++
• Alcunecaratteristichedeilinguaggilogico-funzionali• gestionedellamemoriacongarbagecollector
• Usodelmeccanismodiclassiedereditarietàperridurreilnumerodimeccanismiprimitivi• quasituttoèrealizzatoconclassipredefinitenellelibrerie
• Implementazionemista,tipicadelfilonelogico• chenefacilitalaportabilitàelorendemoltoadattoaessereintegratonelleapplicazionidirete
JAVA
38
C#
• C#:linguaggiodiprogrammazioneaoggettisviluppatoperlaprogrammazionenelframework.NETo il“meglio”diJavaeC++
• Itipiprimitividellinguaggiohannounacorrispondenzaprecisaconitipidisponibiliarun-time
39
SCALA
• Scalasmoothlyintegratesfeaturesofobject-orientedandfunctionallanguages
40
F#
• MLspiegatoalpopolo
41
Evoluzionedeilinguaggi
a. Unecosistemadiapplicazionidifferentib. Enfasicrescentesulleastrazioniperilprogrammatorec. Caratteristichesignificative:migliorarelaaffidabilità,la
manutenibilitàelasicurezzadelsoftwared. Aspettimoderni:astrazionipermobilitàedistribuzionee. Primitivelinguisticheeastrazioniperparallelismoe
concorrenzaf. Trend:multi-paradigmprogramming
42
Unesempio:PYTHON
• Pythonlinguaggiodiprogrammazionesviluppatoafineanni‘80daGuidovanRossum(CWI)
• Uno“scriptinglanguage”• Linguaggiomulti-paradigma:supportainmodonativooggettiefunzionidiordinesuperioretipichedellaprogrammazionefunzionale
• Tipidinamiciegestionedinamicadellamemoria
43
Unaltroesempio:RUBY
• Rubylinguaggiodiscriptingsviluppatoafineanni’90daYukihiroMatsumoto
• InfluenzatodaPerlandSmalltalk• Multi-paradigma:funzionale,aoggetti,imperativoconmeccanismidimeta-programmazione(LISPritorna!)
• Ruby(comelodescrivono)o everythingisanobjecto everyoperationisamethodcallo allprogrammingismeta-programming
• Usatonellosviluppodiapplicazioniweb
44
ParadigmafunzionaleperJAVAeC#
• Java8:laversionecorrentediJava• Introduzionedimeccanismilinguisticiperlaprogrammazionefunzionale:Lambda– Problema:introdurreLambda– senzadoverricompilareicodicibinariesistenti
• EspressioniLambdasonodisponibiliancheinC#– …conilmedesimoscopo
45
Modellicomputazionali
◇ Comevedremomeglionellasecondapartedelcorsoaognilinguaggioèassociatounmodellodicalcolo◇ Imperativo:Fortran(1957)
◇ Funzionale:Lisp(1958)
◇ Aoggetti:Simula(1967)
◇ Logico:Prolog(1972)
◇ Relazionale:SQL(1974)
46
IlprogettodiPR2
• Unmetodoefficacepercomprenderecosasignifica“modellodicomputazione”èprogettareesviluppareunlinguaggiodiprogrammazioneo IlprogettodiPR2siproponequestoobiettivo!!
• Esercitazionididuetipi:esercitazioniditeoria(orientatealloscritto)epratiche(noninlaboratorio)
47
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
Pagina Web
» Lucididellelezioni(voltapervolta)» Testidialcuniscrittidegliesamidianniprecedenti» LinkperscaricareJavaeOcaml» Ilmaterialedidatticopotrebberisultareunpo’dispersivoquindiper
ogniargomentolezioneilriferimentoallapartecorrispondentenelmaterialedidatticoconsigliato
o Webhttp://pages.di.unipi.it/levi/PR2levi2019.html
49