PROGRAMMAZIONE 2 1.Introduzione



Documenti analoghi
PROGRAMMAZIONE II Corso B Introduzione al corso

PROGRAMMAZIONE 2 1.Introduzione

Linguaggi di programmazione e astrazione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione

1: Linguaggi di Programmazione

Informatica: Evoluzione dei Linguaggi di Specifica e Programmazione. Informatica: Evoluzione dei Linguaggi di Specifica e Programmazione

Corso Online Analista Programmatore Microsoft

Linguaggi e Paradigmi di Programmazione

Corso di Informatica

FONDAMENTI di INFORMATICA L. Mezzalira

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Introduzione al Calcolo Scientifico

Introduzione all Information Retrieval

Oggetti Lezione 3. aspetti generali e definizione di classi I

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

INFORMATICA 1 L. Mezzalira

Programma del Corso. Dati e DBMS SQL. Progettazione di una. Normalizzazione

Elementi di semantica operazionale

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Corso Analista Programmatore Microsoft. Corso Analista Programmatore Microsoft Programma

Sistemi avanzati di gestione dei Sistemi Informativi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Fondamenti di Informatica - 9Cfu Corso di Laurea in Ingegneria Informatica (ord. 270)

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Approccio stratificato

Lezione 8. La macchina universale

ISTITUTO TECNICO ECONOMICO MOSSOTTI

Architetture Informatiche. Dal Mainframe al Personal Computer

Architetture Informatiche. Dal Mainframe al Personal Computer

La Progettazione Concettuale

Strumenti di modellazione. Gabriella Trucco

Appunti sulla Macchina di Turing. Macchina di Turing

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

Breve storia del calcolo automatico

Introduzione alla Progettazione per Componenti

Concetti di base di ingegneria del software

RISOLUTORE AUTOMATICO PER SUDOKU

Programmazione ad Oggetti. Java Parte I

Fondamenti di Informatica. Allievi Automatici A.A Nozioni di Base

Principi dell ingegneria del software Relazioni fra

Linguaggi. Corso di Laurea in Ingegneria delle Telecomunicazioni A.A

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

01KTF CV. Architetture distribuite per i sistemi infomativi aziendali. Presentazione del corso

Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli

Tecnologie dei Linguaggi di Programmazione

Elementi di semantica denotazionale ed operazionale

la tua presenza e il tuo BUSINESS ON-LINE

B.P.S. Business Process Server ALLEGATO C10

Fondamenti di Informatica. Allievi Automatici A.A Informazioni Generali

Il database management system Access

Corso di PHP. Prerequisiti. 1 - Introduzione

INFORMATICA GENERALE. Prof Alberto Postiglione Dipartim. Scienze della Comunicazione Univ. Salerno. Università degli Studi di Salerno

sito web sito Internet

INTRODUZIONE PRATICA AL LEAN MANAGEMENT

Corso sul linguaggio Java

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Automazione Industriale (scheduling+mms) scheduling+mms.

Lezione 1. Introduzione e Modellazione Concettuale

WorkFLow (Gestione del flusso pratiche)

FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU)

Manuale d uso Software di parcellazione per commercialisti Ver [05/01/2015]

Università per Stranieri di Siena Livello A1

LEZIONE: Pensiero Computazionale. Tempo della lezione: Minuti. - Tempo di preparazione: 15 Minuti.

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Introduzione alla teoria dei database relazionali. Come progettare un database

Esercizi su. Funzioni

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1

Informatica. Prof. A. Longheu. Introduzione a Java

Object Oriented Programming

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Database e reti. Piero Gallo Pasquale Sirsi

La Metodologia adottata nel Corso

Introduzione. Il software e l ingegneria del software. Marina Mongiello Ingegneria del software 1

Introduzione ai Sistemi di Gestione di Basi di Dati XML

Progettaz. e sviluppo Data Base

Architettura di un sistema operativo

Dispensa di Informatica I.1

La cassetta di un buon carpentiere del software

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse

Metodologie di programmazione in Fortran 90

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

database: modello entityrelationship

Transcript:

AA 2014-2015 PROGRAMMAZIONE 2 1.Introduzione 1 Gianluigi Ferrari o Email giangi@di.unipi.it o Web www.di.unipi.it/~giangi Di cosa mi occupo (ricerca) o o o PRESENTAZIONI Formal methods in SoGware Engineering ü VerificaJon, model checking, and stajc analysis of programs Programming languages & models for Concurrent and Distributed Systems ü Service oriented compujng ü Cloud compujng Security ü Language- based security 2 1

Fabio Gadducci o Email fabio@di.unipi.it o Web www.di.unipi.it/~gadducci Di cosa mi occupo (ricerca) o o o PRESENTAZIONI Formal methods in SoGware Engineering ü VerificaJon, model checking, and stajc analysis of programs Programming languages & models for Concurrent and Distributed Systems ü Service oriented compujng ü TheoreJcal foundajons Visual modeling ü Graphical specificajons and model transformajons 3 PROGRAMMAZIONE 2 Cosa studiamo? Due temajche principali 2

Programmazione OO Tecniche per la programmazione orientata ad ogge^ (in piccolo) o Specifica, implementazione, corre_ezza ü Dimostrare la corre_ezza di una implementazione è tanto importante quanto programmare o Programmazione concorrente Esemplificate ujlizzando Java o non è compito di questo corso introdurre il linguaggio nella sua interezza o né tanto meno le sue librerie (che imparerete da soli, quando vi servono) 5 Una valanga di libri 3

Materiale dida^co B. Liskov, J. Gu?ag Program development in Java (Addison Wesley 2000) Datato, ma copre tu^ gli aspe^ fondamentali Materiale dida^co M. Herlihy, N. Shavit The art of mul5processor programming (Morgan Kaufmann 2012) Programmazione concorrente e tecniche per mulj- core 4

Materiale dida^co R. Bruni, A. Corradini, V. Gervasi Programmazione in Java (Apogeo 2011) O^ma introduzione per chi pensa di avere lacune con la programmazione Online Oracle Java tutorials, docs.oracle.com/javase/ tutorial/java/ David Eck, Introduc5on to programming using Java, math.hws.edu/javanotes/ Online ne trovate molj altri senjtevi liberi di seguire la vostra curiosità 5

Il nostro obie^vi Nessun linguaggio è perfe_o e prenderemo in esame una piccola parte di Java ObieLvo 1: acquisire competenze generali che possano essere applicate a una varietà di linguaggi di programmazione. ObieLvo 2: acquisire le competenze per imparare presto e bene un nuovo linguaggio di programmazione. Linguaggi di Programmazione Studiare i principi che stanno alla base dei linguaggi di programmazione Essenziale per comprendere il proge_o, la realizzazione e l applicazione prajca dei linguaggi Non ci interessa rispondere alla domanda Java è meglio di C#? 12 6

TanJ aspe^ importanj Paradigmi linguisnci SemanNca operazionale Implementazione: stru_ure a tempo di esecuzione Il nostro approccio: la descrizione dell implemementazione del linguaggio è guidata dalla semanjca formale! o Stre_a relazione tra la semanjca e la stru_ura del run Jme del linguaggio o Stru_ura del run- Jme simulata in OCaml (a volte ritornano) Ci sono numerosi libri sull argomento che sono ujli per il nostro corso ma me_eremo a disposizione delle note. 13 FONDAMENTI: UN VALORE Evitare discussioni da osteria Evitare malfuzionamenj Numerosi esempi o Post sul blog ufficiale di MicrosoG Azure: ü Alle 17:45 ora del Pacifico del 28 febbraio 2012 MicrosoG ha rilevato un problema che affligeva i servizi Windows Azure in diverse regioni. Il problema è stato analizzato rapidamente e amribuito a un bug sogware. Sebbene le origini effepve siano oggemo di indagine, il problema sembra fosse causato da un calcolo del tempo errato nell'anno bises5le. La teoria aiuta il proge?o e la realizzazione dei linguaggi Esempio: implementazioni efficienj si possono o_enere se la generazione del codice eseguibile è ritardata fino a che non sono disponibili daj del run- Jme 14 7

Materiale dida^co M. Gabbrielli, S. MarNni Linguaggi di programmazione (McGraw- Hill 2006) Materiale dida^co M. Sco? Programming language pragma5cs (Morgan Kaufmann 2009) 8

Materiale dida^co P. SestoP Programming language concepts (Springer 2012) PR2: istruzioni per l uso Il materiale dida^co delle lezioni sarà disponibile sulla pagina web così come tu^ i programmi OCaml e Java che verranno discussi nelle esercitazioni Prova di esame = proge?o + prova scri?a + orale ammissione all orale con votazione >= 18/30 nello scri_o & valutazione posijva del proge_o. le 2 prove intermedie possono sosjtuire la prova scri_a Consigli seguire il corso mantenendosi al passo con lo studio partecipare (a^vamente) a lezioni ed esercitazioni sostenere le prove intermedie 18 9

Competenze richieste (nostre aspe_ajve) Familiarità coi conce^ base di programmazione funzionale (Caml) e imperajva (C) o Programmazione 1 e laboratorio & Logica per la programmazione Familiarità algoritmica e programmazione con le stru_ure daj di base (liste, pile, code, alberi, hash table, ) o Algoritmica e laboratorio Linguaggi e astrazione I linguaggi di programmazione sono il più potente strumento di astrazione messo a disposizione dei programmatori I linguaggi si sono evoluj trasformando in costru^ linguisjci (e realizzandoli una volta per tu_e nell implementazione) tecniche e metodologie sviluppate nell ambito della programmazione, degli algoritmi, dell ingegneria del sogware e dei sistemi operajvi se?ori di applicazioni (basi di daj, intelligenza arjficiale, simulazione, etc.) Di fondamentale importanza l introduzione di meccanismi di astrazione, che perme_ono di estendere un linguaggio programmando nuove operazioni, Jpi di dato, etc. 20 10

Il diagramma evolujvo 21 TanJ linguaggi. Perché? Prendiamo il migliore e basta!!! o Come vedrete a Calcolabilità e Complessità, i linguaggi di programmazione sono tu^ (Turing) equivalenj: stessa potenza espressiva I migliori sono tanj o Visione Oracle- Sun: Java o Visione MicrosoG: C# o Visione dello sviluppatore Web: JavaScript Tante mojvazioni diverse: alcuni linguaggi meglio si ada_ano a un parjcolare contesto o PROLOG: AI 11

A day in the life of a web programmer Develop a web site o Separare presentazione, sjle e funzionalità Client side programming o Javascript (funzionalità), HTML (presentazione), CSS (sjle) Server side programming o CGI scripts o ScripJng (PHP, Pearl, Ruby, ) o Java o Database access (SQL) o XML per web services Navigate sul web Il sito www.scriptol.com/programming/fibonacci.php descrive il programma che calcola i numeri di fibonacci nei principali linguaggi di programmazione Il sito www.99- bo_les- of- beer.net decrive come programmare in 1500 linguaggi di programmazione il testo di 99 BoMles of Beer 12

Evoluzione dei linguaggi 1970 Fortran Lisp Cobol Algol 60 APL Snobol 4 Simula 67 Basic PL/1 Pascal 2014 C Java ObjecNve- C C++ C# PHP Visual Basic Python JavaScript Transact- SQL 2014 Java PHP Python C# C++ C JavaScript ObjecNve- C Ruby + Rails Visual Basic 2014 JavaScript Ruby Java Python PHP C C++ CCS C# ObjecNve- C TIOBE Index January 2014 PYPL Index January 2014 GitHub Repositories January 2014 Un po di storia dei linguaggi di programmazione 13

Linguaggi di programmazione I linguaggi di programmazione nascono con la macchina di Von Neumann (macchina a programma memorizzato) i programmi sono un parjcolare Jpo di dato rappresentato nella memoria della macchina la macchina possiede un interprete capace di eseguire il programma memorizzato, e quindi di implementare ogni algoritmo descrivibile nel linguaggio macchina un linguaggio macchina dotato di semplici operazioni primijve per la scelta e per iterare (o simili) è Turing- equivalente, cioé può descrivere tu^ gli algoritmi 27 Anni 50 FORTRAN e COBOL (sempreverdi) o notazioni simboliche orientate rispe^vamente al calcolo scienjfico (numerico) e alla gesjone daj (anche su memoria secondaria) o astrazione procedurale (so_oprogrammi, ma con cara_erisjche molto simili ai costru^ fornij dai linguaggi macchina) o Meccanismi linguisnci per introdurre nuove operazioni e stru?ure dan (per esempio, gli array in FORTRAN e i record in COBOL) o All occhio moderno: nulla di significajvamente diverso dai linguaggi macchina 28 14

I favolosi 60: LISP e ALGOL ü FondamenN (teoria) ü formalizzazione degli aspe^ sinta^ci ü primi risultaj semanjci basaj sul lambda- calcolo ü Cara?erisNche comuni ü introduzione della nozione di ambiente per la gesjone degli idenjficatori e le regole di scope ü vera astrazione procedurale con ricorsione ü ALGOL 60 ü primo linguaggio imperajvo veramente ad alto livello ü scoping stajco e gesjone dinamica della memoria a stack ü LISP (sempreverde) ü primo linguaggio funzionale, dire_amente ispirato al lambda- calcolo (la teoria ritorna) ü scoping dinamico, stru_ure daj dinamiche, gesjone dinamica della memoria a heap con garbage collector 29 ALGOL 60, proto9po dei linguaggi impera9vi LISP, proto9po dei linguaggi logici e funzionali Analizzando i due linguaggi ci accorgiamo che originano conce^ simili non a caso basaj sulla teoria La gesjone dell ambiente tramite lo stack gli approcci restano diversi e originano due filoni il filone impera5vo (esempio C) il filone funzionale (esempio OCaml) 30 15

La fine degli anni 60 PL/I: primo tentajvo di linguaggio totalitario (targato IBM) tentajvo di sintesi fra LISP, ALGOL 60 e COBOL fallito per mancanza di una visione semanjca unitaria SIMULA 67: nasce di fa_o la programmazione a oggep estensione di ALGOL 60 orientato alla simulazione discreta quasi sconosciuto, riscoperto 15 anni dopo 31 Evoluzione del filone imperajvo Gli anni 70 metodologie di programmazione, Jpi di daj astra^, modularità, classi e ogge^ programmazione di sistema in linguaggi ad alto livello: eccezioni e concorrenza Un esempio: PASCAL estensione di ALGOL 60 con definizione di Jpi (non astra^), uso esplicito di puntatori e gesjone dinamica della memoria a heap (senza garbage collector) semplice implementazione mista (con P- Code, antesignano del bytecode), facilmente portabile 32 16

Il dopo PASCAL C: PASCAL + moduli + Jpi astra^ + eccezioni + interfaccia per interagire con il sistema operajvo ADA: il secondo tentajvo di linguaggio totalitario (targato US DoD) C + concorrenza + costru^ per la programmazione in tempo reale proge_o ambizioso: grande enfasi su semanjca stajca (proprietà verificabili dal compilatore) C ++ : C + classi e ogge^ (allocaj sullo heap, ancora senza garbage collector) 33 PROLOG La programmazione logica implementazione di un frammento del calcolo dei predicaj del primo ordine (la teoria che aiuta) stru_ure daj molto flessibili (termini) con calcolo effe_uato dall algoritmo di unificazione computazioni non- determinisjche gesjone memoria a heap con garbage collector CLP (Constraint Logic Programming) PROLOG + calcolo su domini diversi (anche numerici) con opportuni algoritmi di soluzione di vincoli 34 17

La programmazione funzionale ML: implementazione del lambda- calcolo Jpato definizione di nuovi Jpi ricorsivi, i valori dei nuovi Jpi sono termini, che possono essere visitaj con un meccanismo di pa_ern matching (versione semplificata dell unificazione) scoping stajco (a differenza di LISP) semanjca stajca molto potente (inferenza e controllo dei Jpi) un programma corre_o per la semanjca stajca quasi sempre va bene gesjone memoria a heap con garbage collector HASKELL= ML con regola di valutazione lazy 35 JAVA Molte cara_erisjche dal filone imperajvo essenzialmente tu_e quelle di C ++ alcune cara_erisjche dei linguaggi logico- funzionali gesjone della memoria con garbage collector ujlizza il meccanismo delle classi e dell ereditarietà per ridurre il numero di meccanismi primijvi quasi tu_o è realizzato con classi predefinite nelle librerie ha una implementazione mista, Jpica del filone logico che ne facilita la portabilità e lo rende molto ada_o ad essere integrato nelle applicazioni di rete 36 18

C# C#: linguaggio di programmazione a ogge^ sviluppato per la programmazione nel framework.net o il meglio di Java e C++ I Jpi primijvi del linguaggio hanno una corrispondenza precisa con i Jpi disponibili a run- Jme SCALA Scala smoothly integrates features of object- oriented and funcjonal languages 19

F# ML spiegato al popolo Evoluzione dei linguaggi a. Un ecosistema di applicazioni differenj b. Enfasi crescente sulle astrazioni per il programmatore c. Cara_erisJche significajve: migliorare la affidabilità, la manutenibilità e la sicurezza del sogware d. Aspe^ moderni: astrazioni per mobilità e distribuzione e. PrimiJve linguisjche e astrazioni per parallelismo e concorrenza f. Trend: mul5- paradigm programming 20

Un esempio Python linguaggio di programmazione sviluppato a fine anni 80 da Guido van Rossum (CWI) Uno scripjng language Linguaggio mulj- paradigma: supporta in modo najvo ogge^ e funzioni di ordine superiore Jpiche della programmazione funzionale Tipi dinamici e gesjone dinamica della memoria Ruby Ruby linguaggio di scripjng sviluppato a fine anni 90 da Yukihiro Matsumoto Influenzato da Perl and Smalltalk MulJ- paradigma: funzionale, a ogge^, imperajvo con meccanismi di meta- programmazione (LISP che ritorna) Ruby (come lo descrivono) o everything is an object o every opera5on is a method call o all programming is meta- programming Usato nello sviluppo di applicazioni web 21

Paradigma funzionale per Java e C# Java 8: la versione corrente di Java Introduzione di meccanismi linguisjci per la programmazione funzionale: Lambda o Problema: introdurre Lambda senza dover ricompilare i codici binari esistenj. Espressioni Lambda sono disponibili anche in C# o con il medesimo scopo Modelli computazionali ² Come vedremo meglio nella seconda parte del corso a ogni linguaggio è associato un modello di calcolo ² ImperaNvo: Fortran (1957) ² Funzionale: Lisp (1958) ² A oggel: Simula (1967) ² Logico: Prolog (1972) ² Relazionale : SQL (1974) 22

Il proge_o di PR2 Un metodo efficace per comprendere cosa significa modello di computazione è proge_are e sviluppare un linguaggio di programmazione o Il proge_o di PR2 si propone questo obie^vo!! 23