Economia e Diritto CORSI DI LAUREA TRIENNALE Informatica Gestionale
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Economia e Diritto CORSI DI LAUREA TRIENNALE Informatica Gestionale Cap 6: Linguaggi di programmazione di alto livello Prof Luca Romeo Ricercatore T.D. / Sistemi di elaborazione delle informazioni (ING-INF/05) Contact mail: luca.romeo@unimc.it Contact phone: 0733.258.3280 1
DIPARTIMENTO DI ECONOMIA E DIRITTO Obie vi del capitolo ‣ Linguaggio di programmazione ‣ Tipologie linguaggi di programmazione 2 tti
DIPARTIMENTO DI ECONOMIA E DIRITTO CODIFICARE/SVILUPPARE/PROGRAMMARE ‣ Il coding, o programmazione, consiste nello scrivere istruzioni che spiegano al tuo computer come far succedere certe cose. Queste istruzioni sono fatte di parole e numeri: quando li metti nell'ordine giusto, stai dicendo al computer cosa vuoi che faccia. 3
DIPARTIMENTO DI ECONOMIA E DIRITTO COS’È UN LINGUAGGIO? Dal dizionario (Treccani): “Raccolta delle parole di una determinata lingua [...] disposta secondo criterî prefissati e accompagnata generalmente dalla definizione del significato delle parole stesse.” È una definizione poco precisa: ‣ non evita le ambiguità dei linguaggi naturali ‣ non si presta a descrivere processi computazionali meccanizzabili ‣ non aiuta a stabilire proprietà 5
DIPARTIMENTO DI ECONOMIA E DIRITTO LA NOZIONE DI LINGUAGGIO ‣ Occorre una nozione di linguaggio più precisa ‣ Linguaggio come sistema matematico che consenta di risponde a domande come: ‣ quali sono le parole e le frasi lecite? ‣ si può stabilire se una frase appartiene al linguaggio? ‣ come si stabilisce il significato di una frase? ‣ quali sono gli elementi linguistici primitivi? 6
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGIO E PROGRAMMA ‣ Un linguaggio di programmazione è una notazione formale per descrivere algoritmi ‣ Un programma è la descrizione di un algoritmo in un particolare linguaggio di programmazione 7
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGIO E PROGRAMMA ‣ Il “potere espressivo” (o espressività) di un linguaggio è caratterizzato da: ‣ quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell’utente) ‣ quali istruzioni di controllo mette a disposizione (quali operazioni e in quale ordine di esecuzione) ‣ PROGRAMMA = DATI + CONTROLLO 8
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGIO E PROGRAMMA ‣ Un linguaggio è un insieme di frasi ‣ Una frase è una sequenza di simboli appartenenti a un certo alfabeto ‣ Proprietà desiderabili: ‣ Un linguaggio deve essere effettivamente generabile dalle sue regole grammaticali ‣ Un linguaggio di programmazione deve essere decidibile (cioè si deve poter decidere se una stringa appartiene o meno al linguaggio) 9
DIPARTIMENTO DI ECONOMIA E DIRITTO ALCUNE DEFINIZIONI ‣ Alfabeto V (o vocabolario o lessico) ‣ È l’insieme dei simboli con cui si costruiscono le frasi. ‣ Universo linguistico V* di un alfabeto V ‣ È l’insieme di tutte le frasi (sequenze finite di lunghezza arbitraria) di elementi di V. ‣ Linguaggio L su un alfabeto V ‣ È un sottoinsieme di V*. 10
DIPARTIMENTO DI ECONOMIA E DIRITTO ALCUNE DEFINIZIONI ‣ V = { il, la, gatto, muratore, crocchette, casa, costruisce, mangia} // alfabeto ‣ Allora: ‣ V* = { // universo linguistico il gatto muratore casa la, il muratore costruisce la casa, la casa mangia, ... } OVVIAMENTE: non tutte queste frasi faranno parte del linguaggio! 11
DIPARTIMENTO DI ECONOMIA E DIRITTO ALCUNE DEFINIZIONI V = { if, else, ==, A, 0, =, +, 1, 2, (, ) } Allora: V* = { if (A == 0) A = A + 2, if else A, if =A, ... } OVVIAMENTE: non tutte queste frasi faranno parte del linguaggio! 12
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI E GRAMMATICHE Problema: Come specificare il sottoinsieme di V* che definisce il linguaggio? Risposta: Specificando in modo formale e preciso la sintassi delle frasi del linguaggio .. tramite .. una Grammatica Formale: una notazione matematica che consente di esprimere in modo rigoroso la sintassi di un linguaggio. 13
DIPARTIMENTO DI ECONOMIA E DIRITTO GRAMMATICA FORMALE Una grammatica è una quadrupla 〈 VT, VN, P, S 〉 •VT è un insieme finito di simboli detti terminali •VN è un insieme finito di simboli detti non terminali •P è un insieme finito di produzioni, ossia di regole di riscrittura •S è un particolare simbolo non-terminale detto simbolo iniziale o scopo della grammatica 14
DIPARTIMENTO DI ECONOMIA E DIRITTO GRAMMATICA B.N.F. Una Grammatica B.N.F. (Backus-Naur Form) è una grammatica! in cui le produzioni hanno la forma X ::= A dove: •X ∈ VN è un simbolo non terminale •A è una stringa, ossia una sequenza di simboli ciascuno appartenente all’alfabeto V = VN ∪ VT Una Grammatica B.N.F. definisce quindi un linguaggio sull’alfabeto terminale VT mediante un meccanismo di derivazione (o riscrittura) 15
DIPARTIMENTO DI ECONOMIA E DIRITTO GRAMMATICA E LINGUAGGIO Data una grammatica G, si dice perciò: Linguaggio LG generato da G l’insieme delle frasi di V •derivabili dal simbolo iniziale S •applicando le produzioni P Le frasi di un linguaggio di programmazione vengono dette programmi di tale linguaggio. 16
DIPARTIMENTO DI ECONOMIA E DIRITTO DERIVAZIONE A partire dallo scopo della grammatica, si riscrive sempre il simbolo non-terminale più a sinistra! ATTENZIONE: Si ricorda che non tutte le frasi dell’universo linguistico V* associato all’alfabeto V = VN ∪ VT sono derivabili, ossia fanno parte del linguaggio generato dalla data grammatica! 17
DIPARTIMENTO DI ECONOMIA E DIRITTO DERIVAZIONE G = 〈VT, VN, P, S〉 VT = { il, gatto, topo, sasso, mangia, beve } VN = { , , , , , } P={ ::= ::= ::= il ::= gatto | topo | sasso ::= mangia | beve ::= } S = 18
DIPARTIMENTO DI ECONOMIA E DIRITTO DERIVAZIONE → → → il → il gatto → il gatto mangia → il gatto mangia → il gatto mangia il → il gatto mangia il topo La frase “il gatto mangia il topo” è derivabile !! 19
DIPARTIMENTO DI ECONOMIA E DIRITTO ALBERO SINTATTICO Un grafo che esprime il processo di derivazione di una frase usando una data grammatica Esempio 20
DIPARTIMENTO DI ECONOMIA E DIRITTO ESEMPIO 1: NUMERI NATURALI G = 〈VT, VN, P, S〉 Un numero naturale si può VT = { 0,1,2,3,4,5,6,7,8,9 } riscrivere come 0 oppure (|) come una cifra non nulla seguita da zero o più ({}) cifre VN = { , , } P={ ::= | {} ::= 0 | ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 } S = 21
DIPARTIMENTO DI ECONOMIA E DIRITTO ESEMPIO 2: NUMERI INTERI G = 〈VT, VN, P, S〉 VT = { 0,1,2,3,4,5,6,7,8,9,+,-} VN = {, , , } P={ ::= [+|-] ::= | {} ::= 0 | ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 } S = 22
DIPARTIMENTO DI ECONOMIA E DIRITTO ESEMPIO 3: IDENTIFICATORI G = 〈VT, VN, P, S〉 Nell’uso pratico, quasi sempre si danno solo le regole di produzione, definendo VT, VN e S implicitamente. Quindi: P={ ::= { | } ::= A | B | C | D | ... | Z ::= 1|2|3|4|5|6|7|8|9 } 23
DIPARTIMENTO DI ECONOMIA E DIRITTO ESEMPIO DI GRAMMATICA AMBIGUA Esempio: ::= x| y| z| +| * All'espressione x + y * z possono essere associati due alberi sintattici diversi 24
DIPARTIMENTO DI ECONOMIA E DIRITTO ANALIZZATORE SINTATTICO L'analisi della correttezza sintattica è eseguita dall'elaboratore e consiste in 3 verifiche: •analisi lessicale: verifica che i simboli utilizzati appartengano all'alfabeto •analisi grammaticale: verifica il rispetto delle regole grammaticali •analisi sintattica contestuale: verifica restrizioni di tipo contestuale (tipi di dati, identificatori non definiti,…) 25
DIPARTIMENTO DI ECONOMIA E DIRITTO ANALIZZATORE SINTATTICO Generalmente l'analizzatore sintattico esegue le tre verifiche simultaneamente! •Si dice "ad una passata "! •Durante la scansione, se viene trovato un errore, si cerca di recuperare e si prosegue fino al termine! 26
DIPARTIMENTO DI ECONOMIA E DIRITTO SINTASSI E SEMANTICA Vocabolario o Lessico: l'insieme dei simboli e delle parole che possono essere utilizzati Sintassi: l’insieme di regole formali per la scrittura di programmi in un linguaggio, che dettano le modalità per costruire frasi corrette nel linguaggio stesso. Semantica: l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio. NB: una frase può essere sintatticamente corretta e tuttavia non avere significato! •Il gatto è sopra il tavolo •Il muratore costruisce la casa •Il muratore costruisce il gatto ( ) 27
DIPARTIMENTO DI ECONOMIA E DIRITTO SINTASSI E SEMANTICA Le regole sintattiche sono espresse attraverso notazioni formali: •BNF (Backus-Naur Form) •EBNF (Extended BNF) •diagrammi sintattici 28
DIPARTIMENTO DI ECONOMIA E DIRITTO ESEMPI DI SINTASSI Diagramma sintattico di un numero naturale: Sintassi EBNF di un numero naturale: ::= 0 | {} Intuitivamente significa che un numero naturale si può riscrivere come 0 oppure (|) come una cifra non nulla seguita da zero o più ::= 1|2|3|4|5|6|7|8|9 ({}) cifre. ::= 0 | 29
DIPARTIMENTO DI ECONOMIA E DIRITTO SEMANTICA La semantica è esprimibile mediante: •parole (poco precisa e ambigua) •azioni (operazionale) macchina di Turing: stati e transizioni di stato •funzioni matematiche (denotazionale) associate a ciascuna istruzione •formule logiche (assiomatica) 30
DIPARTIMENTO DI ECONOMIA E DIRITTO PARADIGMI DI PROGRAMMAZIONE Ne esistono di diverso tipo, con diverse “idee alla base” Vedi: http://en.wikipedia.org/wiki/Comparison_of_programming_paradigms I principali: Programmazione imperativa (es. C, Java, Python, PHP, etc.) Il programma è una serie di istruzioni da eseguire. Specifico come il programma deve operare. Programmazione dichiarativa (es. linguaggi logici come il Prolog) Il programma è una serie di fatti e regole che possono essere interrogate per ottenere risultati. Non specifico come il programma opera, ma soltanto cosa deve fare. 31
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI IMPERATIVI L'approccio imperativo è quello dominante nella programmazione. Alcuni sotto-categorie: •programmazione strutturata - i programmi utilizzano sequenze, strutture di controllo e strutture di iterazione - hanno un singolo punto di ingresso e uscita •programmazione procedurale - il codice è organizzato in blocchi identificati da un nome. Vengono detti sottoprogrammi, procedure o funzioni a seconda del linguaggio adottato •programmazione ad oggetti - Permette di definire oggetti software capaci di interagire tra loro per mezzo di scambio di messaggi - Permette più facile gestione di grandi progetti software o che utilizzano interfacce grafiche 32
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI IMPERATIVI Alcune caratteristiche: •l'ordine di esecuzione delle istruzioni è sequenziale (con l'eccezione delle strutture di controllo) •i programmi sono costituiti da: - una parte in cui si dichiarano le variabili ed il loro tipo - una parte che descrive l'algoritmo risolutivo per mezzo di istruzioni del linguaggio 33
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI LOGICI Basati sulla logica •obiettivo: formalizzare il ragionamento •caratterizzati da meccanismi deduttivi Programmare significa: •descrivere il problema con formule del linguaggio •interrogare il sistema, che effettua deduzioni sulla base delle definizioni 34
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI LOGICI Programmazione: •semplice (occorre solo definire la propria conoscenza del problema) •avviene tramite una formulazione dichiarativa Esempio: Prolog parent(Y, X) :- child(X, Y). // Y è genitore di X se X è figlio di Y father(Y, X) :- child(X, Y), male(Y). // Y è padre di X se X è figlio di Y e Y è un uomo child(luca, sara). child(luca, mario). // Luca è figlio di Sara. Luca è figlio di Mario male(mario). // Mario è un uomo Se chiedo: ?- father(mario, X): -> la risposta sarà “luca” 35
DIPARTIMENTO DI ECONOMIA E DIRITTO QUALCHE LINGUAGGIO DI PROGRAMMAZIONE: GLI INIZI Ada Lovelace, collaboratrice di Babbage, definì il primo linguaggio di programmazione ( ~ 1837) •era un linguaggio di tipo assemblativo •introdusse il concetto di ciclo ripetuto e il concetto di variabile indice Dopo più di 100 anni, la programmazione dell'ENIAC era definita da circuiti elettrici La macchina non aveva un programma registrato: 6 persone erano impegnate a muovere commutatori e connettere cavi! 36
DIPARTIMENTO DI ECONOMIA E DIRITTO QUALCHE LINGUAGGIO DI PROGRAMMAZIONE I linguaggi macchina (anni 50): •ogni istruzione è una sequenza di bit •i linguaggi di programmazione coincidevano con l'insieme delle istruzioni eseguibili dall'hardware •enorme sforzo richiesto per codificare algoritmi semplici Problemi: sono linguaggi specifici della macchina: - ogni CPU ha il proprio linguaggio - dipende dall'architettura della macchina - i programmi non sono portabili da un computer all’altro - il codice è illeggibile per l’uomo - i programmatori si concentrano nel cercare efficienza sulla singola macchina invece che nella risoluzione del problema 37
DIPARTIMENTO DI ECONOMIA E DIRITTO QUALCHE LINGUAGGIO DI PROGRAMMAZIONE Linguaggi Assembly: •per la prima volta, il programma utilizza dei simboli invece che essere codificato in modo binario •più facile da programmare per l'utente •ogni istruzione è identificata da una sigla e le variabili sono identificate da nomi invece che da numeri •è necessario un “assemblatore” (assembler) per tradurre le istruzioni del linguaggio in istruzioni macchina 38
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI DI PROGRAMMAZIONE DI “ALTO LIVELLO” Il passo successivo: ‣ rendere la codifica degli algoritmi il più possibile vicina al problema da risolvere anziché all'architettura della macchina ‣ avere programmi scritti in formalismi comprensibili a un largo numero di sviluppatori (i linguaggi assembly non sono adeguati per scrivere programmi moderni complessi): ‣ TOP_DOWN o BOTTOM_UP? Il modo naturale di procedere è pensare prima alla struttura generale e poi curare i dettagli, ma questo è impossibile con ‣ Assembly che è fatto SOLO da dettagli... ‣ indipendenza da architetture specifiche 39
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI DI PROGRAMMAZIONE DI “ALTO LIVELLO” Tra gli anni '50 e '60 si passò ai linguaggi ad alto livello, che richiedono un compilatore o un interprete che sia in grado di tradurre le istruzioni del linguaggio di alto livello in istruzioni macchina di basso livello eseguibili dal calcolatore ‣ Anni 50: FORTRAN, COBOL, LISP ‣ Anni 60: Algol-60, Simula-67 ‣ Anni 70: Pascal, Prolog, Smalltalk, C ‣ Anni 80: Ada, C++ ‣ Anni 90: Python, Java, Javascript, PHPs Un compilatore è un programma simile ad un assemblatore, ma più complesso. Infatti esiste una corrispondenza biunivoca fra istruzioni in assembler ed istruzioni macchina ma ogni singola istruzione di un linguaggio di alto livello corrisponde a molte istruzioni in linguaggio macchina. 40
DIPARTIMENTO DI ECONOMIA E DIRITTO LINGUAGGI DI PROGRAMMAZIONE DI “ALTO LIVELLO” Linguaggio di alto livello (es: C) Linguaggio di basso livello (es: assembly) Linguaggio macchina 41
DIPARTIMENTO DI ECONOMIA E DIRITTO AMBIENTE DI PROGRAMMAZIONE È l'insieme dei programmi che consentono la scrittura, la verifica e l'esecuzione di nuovi programmi (fasi di sviluppo e testing del software) Componenti: •Editor à programma sorgente •Traduttore à programma eseguibile •Debugger à eliminazione errori logici •IDE (Integrated Development Environment) 42
DIPARTIMENTO DI ECONOMIA E DIRITTO EDITOR Serve per scrivere il programma sorgente ‣ uno o più file di testo contenenti la codifica di un programma scritto in un linguaggio di alto livello (ad es, C). Distingue automaticamente (diversi colori): ‣ le direttive al compilatore ‣ le altre parole chiavi del linguaggio ‣ le costanti ‣ i simboli definiti dall’utente ‣ … (syntax highlighting) 43
DIPARTIMENTO DI ECONOMIA E DIRITTO ESECUZIONE DI PROGRAMMI TRADUTTORE Affinché un programma sorgente sia comprensibile (e quindi eseguibile) da un calcolatore, occorre tradurlo nel linguaggio della macchina (programma eseguibile). Questa operazione viene normalmente svolta da speciali programmi, detti traduttori. 44
DIPARTIMENTO DI ECONOMIA E DIRITTO TRADUTTORI Più in dettaglio, la traduzione del programma sorgente in un programma eseguibile è effettuata dai 3 programmi eseguiti in sequenza: 1.Compilatore -> programma oggetto 2.Linker -> programma rilocabile 3.Loader -> programma eseguibile 45
DIPARTIMENTO DI ECONOMIA E DIRITTO COMPILATORE Ha due funzioni: ‣ analisi sintattica del programma sorgente ‣ trasformazione del programma sorgente in programma oggetto o “codice oggetto” (forma più vicina al linguaggio macchina): ‣ ottimizzazioni (rimozione ripetizioni, eliminazione cicli, sfruttamento registri, …) 46
DIPARTIMENTO DI ECONOMIA E DIRITTO LINKER Il codice oggetto: ‣ può ancora contenere dei simboli irrisolti ‣ riferimenti esterni a programmi di servizio (nomi periferiche, calcoli matematici, ...) ‣ contiene indirizzi relativi Il Linker crea il programma eseguibile rilocabile collegando gli eventuali vari moduli oggetto (compilati separatamente) con i programmi di supporto necessari 47
DIPARTIMENTO DI ECONOMIA E DIRITTO LOADER Il Loader completa la creazione del programma eseguibile caricando in memoria centrale (RAM) un programma rilocabile Nel caricamento vengono fissati tutti gli indirizzi relativi ->variabili, salti, … Vengono caricati anche i programmi di supporto, se necessari. 48
DIPARTIMENTO DI ECONOMIA E DIRITTO ALTRO APPROCCIO: INTERPRETE Con i traduttori-compilatori PRIMA si traduce tutto il programma e POI si esegue la versione tradotta Nel mondo reale, la traduzione può essere fatta anche in modo intercalato, frase per frase, da un terza persona: l’interprete. Ciò è possibile anche nell’informatica grazie ai programmi interprete (che operano sulle istruzioni anziché su frasi). 49
DIPARTIMENTO DI ECONOMIA E DIRITTO COMPILATORI ED INTERPRETI IN SINTESI I traduttori-interpreti traducono ed eseguono immediatamente ogni singola istruzione del programma sorgente I traduttori-compilatori traducono l’intero programma (senza eseguirlo!) e producono in uscita il programma eseguibile L'esecuzione di un programma compilato è più veloce di quella di un programma interpretato. 50
DIPARTIMENTO DI ECONOMIA E DIRITTO PROCESSO DI SVILUPPO E TESTING DEI PROGRAMMI Approccio con interprete 51
DIPARTIMENTO DI ECONOMIA E DIRITTO PROCESSO DI SVILUPPO E TESTING DEI PROGRAMMI Approccio con compilatore 52
DIPARTIMENTO DI ECONOMIA E DIRITTO DEBUGGER Un bug è un errore software che causa comportamenti indesiderati o inaspettati. Nel 1947 Grace Murray Hopper scoprì che la causa di un malfunzionamento al MARK II era una falena tra i circuiti. Da allora viene utilizzato il termine bug (insetto) come sinonimo di errore. 53
DIPARTIMENTO DI ECONOMIA E DIRITTO DEBUGGER Un debugger (letteralmente: “eliminatore di insetti”) Consente di eseguire un programma passo-passo controllando via via quel che succede: ‣ watch window (valori delle variabili) ‣ function call stack ‣ disassembler window ‣ … ‣ e anche modificare il flusso di esecuzione al fine di scoprire ed eliminare errori logici (run-time) non rilevabili dal compilatore. 54
DIPARTIMENTO DI ECONOMIA E DIRITTO DEBUGGER Approccio con compilatore (versione completa) 55
DIPARTIMENTO DI ECONOMIA E DIRITTO IDE Un text editor ed un compilatore sono davvero tutto quello che ci serve? I programmatori, per velocizzare le fasi dello sviluppo e “ordinare” il codice usano degli strumenti più avanzati ->Integrated development environment (IDE) Contengono solitamente il compilatore stesso ed altre utilità come il “debugging” IDE Consigliata: Spyder & Anaconda 56
DIPARTIMENTO DI ECONOMIA E DIRITTO MACRO-OBIETTIVI DEL CORSO 1. Concetti base dell’informatica 2. Concetti generali e architetture di alto livello sistemi di elaborazione 3. Concetti di base della codifica delle informazioni (codifiche binarie e file di testo) 4. Strumenti (compilatori, editor, IDE) 5. Algoritmo per la risoluzione di problemi di elaborazione dell’informazione 6. Linguaggi di programmazione di alto livello 7. Introduzione al linguaggio di programmazione Python 8. Introduzione a casi di applicazione alle scienze economiche 57
Economia e Diritto CORSI DI LAUREA TRIENNALE Informatica Gestionale Cap 6: Linguaggi di programmazione di alto livello Prof Luca Romeo Ricercatore T.D. / Sistemi di elaborazione delle informazioni (ING-INF/05) Contact mail: luca.romeo@unimc.it Contact phone: 0733.258.3280 58
Puoi anche leggere