PROGRAMMAZIONE 2 1.Introduzionepages.di.unipi.it/levi/PR2-19-01.pdf · 2019-09-16 · introduzione...

Preview:

Citation preview

PROGRAMMAZIONE21.Introduzione

1

PRESENTAZIONI

• GianluigiFerrario Emailgian-luigi.ferrari@unipi.ito 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 Emailfrancesca.levi@unipi.ito 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

Recommended