Linguaggi di programmazione PDF
Document Details
Uploaded by AffordableGroup7338
Università San Raffaele Roma
M. Zaninelli
Tags
Summary
These lecture notes provide a detailed overview of programming languages. They cover fundamental concepts, such as algorithms and program structure. Various programming types are discussed, including machine languages and high-level languages.
Full Transcript
Prof. M. Zaninelli Linguaggi di programmazione Comunicare con i calcolatori Linguaggi di programmazione 1 di 21 Prof. M...
Prof. M. Zaninelli Linguaggi di programmazione Comunicare con i calcolatori Linguaggi di programmazione 1 di 21 Prof. M. Zaninelli Concetti e definizioni Algoritmo: è un insieme di regole e prescrizioni da compiere per risolvere un problema Esempio: istruzioni per il montaggio di un mobile IKEA*. Queste possono essere considerate un algoritmo in quanto descrivono l’insieme di istruzioni da compiere per risolvere un problema: il montaggio del mobile acquistato. si noti che in questo esempio, come nella programmazione classica, si prevede che l’attività sia concettualmente eseguita da un (solo) operatore in modo sequenziale, quindi, una singola istruzione per volta, una dopo l’altra. In alcuni casi però compaiono anche concetti di parallelismo (tipo “sollevate l’armadio da terra almeno in due”) che si possono ritrovare anche nella programmazione moderna (sistemi multithread). Linguaggi di programmazione 2 di 21 Prof. M. Zaninelli Programmazione Programmazione: insieme di tecniche che consentono di descrivere degli algoritmi in modo da poter essere riconosciuti ed eseguiti da un calcolatore Un calcolatore è in grado solo di eseguire istruzioni, opportunamente codificate, non di prendere iniziative di tipo creativo. Al limite può simulare dell’iniziativa, purché in precedenza sia stata già descritta. Tutto ciò, quindi, implica la necessità di tradurre un algoritmo da un linguaggio naturale (“chiama”, “se succede questo fermati”, “ricomincia”) in sequenze di istruzioni comprensibili ed eseguibili da un elaboratore, ossia, in un programma (carica la cella 12001, vai alla 12008,..) Linguaggi di programmazione 3 di 21 Prof. M. Zaninelli Programma … Quindi, un programma è la descrizione, in un linguaggio noto al computer, dei processi sequenziali necessari per operare delle trasformazioni di stato di alcuni oggetti (variabili, funzioni, ecc.) Nell’esempio IKEA, il “programma” è il foglio di carta con le istruzioni, presentate in un linguaggio simbolico e visuale, con i vari passaggi numerati sequenzialmente Linguaggi di programmazione 4 di 21 Prof. M. Zaninelli Per riassumere, alcune definizioni Algoritmo: descrizione e sviluppo logici di un processo. Linguaggio di programmazione: sistema che consente di formalizzare gli algoritmi in un linguaggio comprensibile dal calcolatore. per fornire ad un computer le istruzioni da compiere per completare un processo. Programma: traduzione (o implementazione) di un algoritmo, attraverso un linguaggio di programmazione, in una sequenza di istruzioni comprensibile ed eseguibile da un calcolatore per compiere un processo. Linguaggi di programmazione 5 di 21 Prof. M. Zaninelli Tipi di linguaggi di programmazione Linguaggi macchina: insiemi di istruzioni estremamente elementari che un particolare computer è in grado in eseguire. “sposta il contenuto della cella 37491 nella cella 38932” “somma il valore 3” “esegui l’istruzione nella cella 34267” E’ stata la prima forma di programmazione, ancora usata ma estremamente complessa. Linguaggi di alto livello: insiemi di direttive e istruzioni indipendenti dal particolare computer su cui vengono eseguite. Sono nati successivamente ai linguaggi macchina e si strutturano, solitamente, con istruzioni simili a verbi “if … then”, “goto”, “while … do”, “stop”, “exit”, … Linguaggi di programmazione 6 di 21 Prof. M. Zaninelli Evoluzione dei linguaggi I linguaggi ad alto livello sono però troppo complessi per essere compresi ed eseguiti direttamente dal processore (CPU), pertanto: – Contro: necessità di traduzione dai linguaggi di alto livello ai linguaggi macchina, quindi necessità di programmi intermedi di supporto quali: Compilatori Assemblatori – Pro: nasce il concetto di indipendenza hardware e portabilità di un programma. Linguaggi di programmazione 7 di 21 Prof. M. Zaninelli La trafila della programmazione classica Come si procede, in genere: 1. Definizione di un algoritmo, di solito per mezzo di una rappresentazione simbolica (flowchart o diagramma di flusso). 2. Sua scrittura in un linguaggio sorgente di alto livello, quindi, scrittura del programma sorgente. 3. Compilazione/assemblamento del programma sorgente nel corrispondente linguaggio macchina (specifico per quel calcolatore), quindi, creazione del programma eseguibile. Nel caso si incorra in un errore di sintassi => correggere e tornare al punto 2, altrimenti, si continua. 1. Esecuzione del programma eseguibile. Controllo dei risultati, se si constata un errore nel funzionamento dovuto ad un errore logico nell’algoritmo => correggere e tornare al punto 1, altrimenti, processo concluso. Linguaggi di programmazione 8 di 21 Prof. M. Zaninelli Flowchart per la cottura degli spaghetti acqua pentola Acqua nella fornello pentola sale NO spaghetti Aspettare 1 Bolle? minuto Pentola sul gas acceso SI Buttare gli spaghetti NO Aspettare Bolle? NO 1 minuto Aspettare 1 Al dente? minuto SI SI Aggiungere sale grosso SCOLA LA PASTA Linguaggi di programmazione 9 di 21 Prof. M. Zaninelli Un’attività semplice: come si spegne la luce? Algoritmo: a. Se la luce è spenta, stop. b. Se la luce è accesa, spegnila. c. stop (semplice, no?) Linguaggi di programmazione 10 di 21 Prof. M. Zaninelli Programma sorgente in pseudo-linguaggio di alto livello Programma “spegni.c” main() { LUCE = getstr(STDIN); if ($LUCE == “OFF”) then { print (“luce gia\’ spenta\n”); exit } else { LUCE =“OFF”; }; print (“luce spenta correttamente\n”); exit; } Linguaggi di programmazione 11 di 21 Prof. M. Zaninelli Compilazione del programma sorgente Lancio una compilazione del mio programma # cc –o Spegni_la_luce spegni.c # In questo caso, se non ci sono errori di sintassi e/o di chiamate a subroutine il compilatore “cc” legge il file spegni.c, lo traduce opportunamente per il calcolatore su cui risiede, producendo un secondo “file” di output Spegni_la_luce.exe, detto “eseguibile” che si può davvero eseguire ottenendo, nel nostro caso, che la luce venga spenta. Il file Spegni_la_luce.exe non è comprensibile alla lettura umana. Può solo essere compreso ed eseguito da un calcolatore, anzi da quel, o meglio quella classe, di calcolatori. Linguaggi di programmazione 12 di 21 Prof. M. Zaninelli Esecuzione di un programma Lancio il programma compilato # run Spegni_la_luce.exe # luce spenta correttamente! (POF! Si è spenta la luce) Il che non è completamente vero, perché se la luce fosse già stata spenta non sarebbe successo nulla e sarebbe comparsa una scritta diversa (“la luce è già spenta”). Questa variante può apparire banale, soprattutto se calata nella banalità dell’esempio. Ma per un elaboratore il concetto di banale non esiste. Si tratta sempre e solo di attività semplici e meccaniche: - eseguire delle istruzioni - produrne il risultato Linguaggi di programmazione 13 di 21 Prof. M. Zaninelli Linguaggi interpretati Sono nati da esigenze diverse da quelle che hanno condotto alla nascita dei linguaggi di alto livello, ad esempio: – per la gestione ed l’interazione con il sistema operativo, – per attività marginali o di manutenzione del sistema, – per fornire ambienti semplici di programmazione. Linguaggi di programmazione 14 di 21 Prof. M. Zaninelli Caratteristiche In questi tipi di linguaggi: – non esiste la fase di compilazione/assemblamento, – le istruzioni del programma sorgente vengono lette, una per una e subito eseguite, grazie ad un particolare programma, detto appunto interprete, – l’esecuzione dei programmi (spesso definiti “script” proprio per la loro natura diversa dal programma canonico) può essere costosa in termini di “tempo di esecuzione”. Questo, perché i linguaggi interpretati sono tipicamente poco efficienti (ad es. la loro sintassi non prevede l’esistenza dei cicli). Linguaggi di programmazione 15 di 21 Prof. M. Zaninelli Esempi Il BASIC, è un linguaggio sviluppato negli anni ’60. Usato prevalentemente per sviluppo di giochi e applicazioni, anche complesse si è evoluto sopravvivendo egregiamente ancora oggi. Esempio: programma RADICI.BAS per il calcolo delle radici dell’equazione di secondo grado ax2 + bx + c = 0: 10 for x = 1 to 3 11 input a,b,c 12 R1 = (-b + SQR (B^2 –4*a*c))/(2*a) 13 R2 = (-b - SQR (B^2 –4*a*c))/(2*a) 14 print R1; R2 15 next x 16 End Il programma, una volta scritto così in un file si esegue semplicemente con un comando del tipo: C:> RUN RADICI.BAS Che chiederà a video i tre parametri a, b e c per calcolare le due radici dell’equazione relativa. Linguaggi di programmazione 16 di 21 Prof. M. Zaninelli Ulteriori esempi DOS: linguaggio di controllo dei sistemi operativi della famiglia Windows. I comandi DOS possono essere semplicemente inseriti in un file di testo ed essere mandati in esecuzione con il solo comando run. Shell (Unix): il nome generico “shell” denota i linguaggi di controllo dei sistemi operativi della famiglia Unix (Linux incluso). Come in DOS e nella maggioranza dei sistemi operativi esistenti, i relativi comandi possono essere inseriti in un file di testo ed eseguiti in sequenza. Usatissimo per tutte le attività di gestione degli elaboratori. Possono coesistere più varianti, lingue, dialetti e interpreti shell sulla stessa macchina. Perl: potentissimo linguaggio interpretato, nato per gestire “Regular Expressions” ma adattissimo per calcoli ed elaborazioni su file. Estremamente flessibile, ricchissimo di estensioni. Open Source. PHP linguaggio interpretato nato per la scrittura dinamica di pagine web. Potentissimo, ricco di estensioni. Ottimamente documentato. Open Source. Linguaggi di programmazione 17 di 21 Prof. M. Zaninelli Perché si usano? Per mettere in evidenza ciò che li differenzia da quelli compilati basta pensare a due diversi casi, che sono: 1. chiedere ad un ufficio specializzato la traduzione di un libro, 2. girare insieme ad un interprete in un paese straniero. In molti casi, sarà meglio avere un’ottima traduzione ma se si è, ad esempio, nel mezzo di un mercato coreano, è evidente che risulterà difficile spedire in Italia il testo delle domande che si vorrebbe fare per contrattare l’acquisto di un prodotto mentre risulta chiaro che sarà molto più comodo farsi accompagnare da un traduttore. Di contro, è ovvio che girare sempre e dovunque con un traduttore di fianco è sempre complesso e costoso, e pertanto non sempre fattibile. Linguaggi di programmazione 18 di 21 Prof. M. Zaninelli Perché si usano? Anche se però va sottolineato che, con le CPU di 10, 20, 30 anni fa, la differenza nei tempi di esecuzione tra i linguaggi compilati e i linguaggi interpretati poteva essere drammatica, mentre oggi è perfettamente accettabile, anzi nella maggior parte dei casi nemmeno avvertibile. Pertanto, se si vogliono comunque massimizzare le prestazioni occorrerà ricorrere a linguaggi compilati, mentre se si vuole massimizzare la portabilità (e quindi l’indipendenza hardware) occorrerà far uso di linguaggi interpretati. Linguaggi di programmazione 19 di 21 Prof. M. Zaninelli L’interprete L’interprete può essere sia una parte del sistema operativo sia un programma differente e “installato” successivamente sul calcolatore (es. Java Virtual Machine). Tutti i sistemi operativi correnti hanno almeno un interprete ed un linguaggio di comando con cui realizzare degli “script” di sistema operativo. Linguaggi di programmazione 20 di 21 Prof. M. Zaninelli Linguaggi ad Oggetti (OO) La complessità attuale dei programmi, ma soprattutto la velocità di esecuzione degli attuali calcolatori, molto maggiore di anni fa, consente di programmare per “macro funzionalità” anziché singole istruzioni. Le funzionalità possono essere concettualmente semplici (“gestisci il tasto destro del mouse”), ma venir implementate con un grandissimo numero di istruzioni. Una volta corretta e consolidata, l’azione o attività potrà essere “congelata” e riutilizzata più volte come funzione semplice (Gestisci-Tasto-DX-nel-Doppio-Click) all’interno della stesso programma ogni volta che serva, oppure, anche da altri programmi che necessitino quella specifica funzionalità. La programmazione di fatto viene astratta, pensando il software come composto di Oggetti che hanno delle proprietà, delle funzioni e che si possono passare dei messaggi. La Classe può in sintesi essere considerata come uno “stampo” per creare oggetti. Linguaggi di programmazione 21 di 21