Linguaggi di Programmazione Paradigmi imperativo e dichiarativo Iniziamo

  • Slides: 23
Download presentation
Linguaggi di Programmazione Paradigmi imperativo e dichiarativo

Linguaggi di Programmazione Paradigmi imperativo e dichiarativo

Iniziamo a conoscere alcuni concetti fondamentali Un algoritmo è un insieme finito di azioni

Iniziamo a conoscere alcuni concetti fondamentali Un algoritmo è un insieme finito di azioni da eseguire per risolvere un problema. Un linguaggio di programmazione è un linguaggio formale (cioè descritto da regole) utilizzato per implementare gli algoritmi. Un programma è la “traduzione” di un algoritmo mediante un opportuno linguaggio di programmazione.

Dall’ algoritmo al programma Sequenza per la risoluzione di un problema: Ø Individuare un

Dall’ algoritmo al programma Sequenza per la risoluzione di un problema: Ø Individuare un procedimento risolutivo. Ø Scomporre il procedimento in un insieme ordinato di azioni (ALGORITMO) Ø Rappresentare i dati e l’algoritmo attraverso un insieme di regole comprensibili (PROGRAMMA)

Il programmatore Ø Analizza il problema riducendolo in termini astratti, non riferiti ad elementi

Il programmatore Ø Analizza il problema riducendolo in termini astratti, non riferiti ad elementi reali e concreti. Ø Individua una strategia risolutiva e costruisce un algoritmo Ø Codifica l’algoritmo in modo tale da renderlo comprensibile al calcolatore. Ø Analizza il risultato dell’elaborazione evidenziando eventuali errori nella strategia risolutiva, ovvero le azioni che portano alla soluzione del problema, nella “traduzione” dell’algoritmo.

Classificazioni dei linguaggi di programmazione Esistono numerose famiglie di linguaggi di programmazione riconducibili a

Classificazioni dei linguaggi di programmazione Esistono numerose famiglie di linguaggi di programmazione riconducibili a diversi criteri, alcuni di questi sono: Ø Periodo storico Ø Program domain Ø Livello di astrazione Ø Paradigma di programmazione

Classificazione in base al periodo storico Molti linguaggi sono stati sviluppati a partire dagli

Classificazione in base al periodo storico Molti linguaggi sono stati sviluppati a partire dagli anni ’ 50; alcuni di essi sono ancora oggi utilizzati. Un linguaggio vecchio, se è stato molto usato nel passato, sara usato anche nel futuro perchè se il software funziona non viene rottamato. Anche i nuovi linguaggi, che si pensa siano più moderni rispetto a quelli vecchi, spesso hanno una parte significativa delle loro istruzioni ereditata dai vecchi.

Classificazione in base al campo di applicazione (program domain) Ø Applicazioni scientifiche: sono caratterizzate

Classificazione in base al campo di applicazione (program domain) Ø Applicazioni scientifiche: sono caratterizzate da semplici strutture dati e grandi quantita di calcoli. Es. : C++ Ø Applicazioni gestionali: sono caratterizzate da sofisticate caratteristiche di input/output. Es. : COBOL Ø Programmazione di sistemi: sono caratterizzate dalla necessita di operare a basso livello, esecuzione efficiente. Es. : Assembly

Classificazione in base al livello di astrazione La struttura interna dei computer prevede soltanto

Classificazione in base al livello di astrazione La struttura interna dei computer prevede soltanto la programmazione in linguaggio macchina (LM) cioè una sequenza di 0 e 1. I primi linguaggi rendevano la programmazione difficoltosa e soggetta a molti errori. Con il tempo, le istruzioni in linguaggio macchina vengono sostituite con codici alfanumerici derivanti dalla lingua inglese fino ad arrivare a linguaggi indipendenti dall’hardware. Una ulteriore evoluzione si ha con l’introduzione di linguaggi che hanno l’obiettivo di avvicinarsi al linguaggio naturale o con un livello si astrazione maggiore dei precedenti.

Classificazione in base al livello di astrazione Con il termine alto o basso livello,

Classificazione in base al livello di astrazione Con il termine alto o basso livello, non si intende la qualità o la potenza del linguaggio, ma è riferito alla sua comprensione. Un linguaggio di programmazione di basso livello, si intende un linguaggio molto vicino alla macchina (il linguaggio macchina o l'Assembler). Invece un linguaggio di programmazione di alto livello, sono più sofisticati ed astratti, slegati dal funzionamento fisico della macchina (Pascal, C, Java, etc. ).

Vediamo un esempio… Linguaggio Basso Livello. MODEL SMALL #include <stdio. h> . STACK 100

Vediamo un esempio… Linguaggio Basso Livello. MODEL SMALL #include <stdio. h> . STACK 100 h main() . DATA STRINGA Linguaggio Alto Livello DB "Hello, world", 13, 10, '$' . CODE { printf(‘’Hello, World’’); . STARTUP MOV AX, @data MOV DS, AX MOV DX, OFFSET STRINGA MOV AH, 09 H INT 21 H MOV AX, 4 C 00 H INT 21 H END }

Classificazione in base al paradigma Un paradigma è: Ø Un modello di riferimento (schema,

Classificazione in base al paradigma Un paradigma è: Ø Un modello di riferimento (schema, esempio, traccia) Ø Un insieme di regole di programmazione, valide per piu di un linguaggio In informatica, un paradigma di programmazione è uno stile fondamentale di programmazione, ovvero un insieme di strumenti concettuali forniti da un linguaggio di programmazione per la stesura di un programma.

Classificazione in base al paradigma Nel caso dei linguaggi di programmazione, il paradigma rappresenta

Classificazione in base al paradigma Nel caso dei linguaggi di programmazione, il paradigma rappresenta una “famiglia” e i linguaggi ad esso appartenenti ne seguono le regole. Per paradigmi di programmazione si intendono i “modi” in cui vengono specificati i programmi. Non si tratta tanto del tipo di linguaggio usato, ma del contesto più ampio al quale un certo linguaggio appartiene.

Classificazione I numerosi linguaggi di programmazione esistenti possono essere classificati sulla base del modello

Classificazione I numerosi linguaggi di programmazione esistenti possono essere classificati sulla base del modello di programmazione che e necessario adottare per utilizzarli.

Linguaggi imperativi Un linguaggio imperativo è caratterizzato dal concetto di comando (“imperio”) e dalla

Linguaggi imperativi Un linguaggio imperativo è caratterizzato dal concetto di comando (“imperio”) e dalla descrizione sequenziale delle istruzioni che dovranno essere eseguite “una dopo l'altra”. Nei linguaggi imperativi deve essere il programmatore a specificare “come” va risolto il problema, indicando tutte le istruzioni necessarie per giungere all’obiettivo. Scrivere un programma in un linguaggio imperativo significa essenzialmente occuparsi di cosa la macchina deve fare per ottenere il risultato che si vuole, e il programmatore è impegnato nel mettere a punto gli algoritmi necessari a manipolare i dati.

Linguaggi imperativi Esempio di programmazione imperativa: 1. LEGGI numero 1; 2. LEGGI numero 2;

Linguaggi imperativi Esempio di programmazione imperativa: 1. LEGGI numero 1; 2. LEGGI numero 2; 3. SOMMA risultato = numero 1 + numero 2; 4. MOSTRA risultato; Fanno parte dei linguaggi imperativi alcune sotto-categorie tra cui: • Linguaggi procedurali, secondo cui il programma viene organizzato in procedure. • Linguaggi orientati agli oggetti (Object-oriented), in cui l’elemento di base e l’oggetto, metafora degli oggetti del problema reale.

Linguaggi dichiarativi Nei linguaggi dichiarativi il programmatore si occupa di definire “cosa” vuole, non

Linguaggi dichiarativi Nei linguaggi dichiarativi il programmatore si occupa di definire “cosa” vuole, non il come, compito che viene demandato alla macchina. Invece di programmare i passi che l’elaboratore deve eseguire, si specifica cosa si vuole che avvenga. Alcuni esempi possono essere l’SQL e l’XSLT. Anche l’HTML può essere inteso come dichiarativo, perché descrive cosa la pagina dovrebbe contenere, titolo, testo, immagini, ma non come si deve fare per visualizzare la pagina sullo schermo del computer.

Linguaggi dichiarativi Si può paragonare la programmazione dichiarativa all'allenamento di una squadra di calcio.

Linguaggi dichiarativi Si può paragonare la programmazione dichiarativa all'allenamento di una squadra di calcio. Come allenatore, non giocate effettivamente in una partita. Vi limitate a dire ai giocatori ciò che volete che facciano. Come lo fanno dipende da ciò che accade durante la partita. La differenza fra un computer e una squadra di calcio è che il computer farà esattamente quello che gli dite di fare, mentre una squadra non è detto che lo faccia.

Linguaggi dichiarativi Esempio (html): <table border="1"> <tr> <td>Nome: </td> <td>Sergio</td> </tr> <td>Cognome: </td> <td>Porco</td>

Linguaggi dichiarativi Esempio (html): <table border="1"> <tr> <td>Nome: </td> <td>Sergio</td> </tr> <td>Cognome: </td> <td>Porco</td> </tr> </table>

Linguaggi dichiarativi Esempio (SQL): Il linguaggio SQL si basa sul linguaggio naturale, tant’è che

Linguaggi dichiarativi Esempio (SQL): Il linguaggio SQL si basa sul linguaggio naturale, tant’è che i comandi derivano direttamente dal vocabolario inglese. Se siamo interessati solo al nome e all'email della tabella teatro (Fig. 1), possiamo selezionarli in questo modo: select nome, email from teatro Il risultato è la tabella di Fig. 2: Fig. 1 Fig. 2

Linguaggi dichiarativi I linguaggi dichiarativi sono divisi in tre categorie: Ø Linguaggi logici, in

Linguaggi dichiarativi I linguaggi dichiarativi sono divisi in tre categorie: Ø Linguaggi logici, in cui si utilizzano assiomi, combinati con le regole della logica, per arrivare al risultato (verità o falsità di un affermazione data come problema). Ø Linguaggi funzionali, in cui sono le funzioni gli elementi di base, ed il problema viene risolto valutandole (fornendo gli argomenti necessari). Ø Database, in cui si utilizzano appositi costrutti (select, insert) per gestire i dati.

Linguaggi Imperativi vs Linguaggi Dichiarativi Un confronto immediato tra i due tipi di linguaggio

Linguaggi Imperativi vs Linguaggi Dichiarativi Un confronto immediato tra i due tipi di linguaggio potrebbe presentarsi come la realizzazione di una ricetta in cucina. Nel caso del linguaggio imperativo bisogna indicare passo dopo passo tutte le operazioni da effettuare al “cuoco”! Con un linguaggio dichiarativo ci si limita a dire qual è il risultato che si vuole ottenere senza specificare i vari passaggi.

Esempio: Problema come prendere l'ascensore. Linguaggio imperativo • Attendere che l'ascensore arrivi al piano

Esempio: Problema come prendere l'ascensore. Linguaggio imperativo • Attendere che l'ascensore arrivi al piano di chiamata. • Aprire la porta dell'ascensore. • Entrare nell'ascensore. • Chiudere la porta dell'ascensore. • Spingere il tasto corrispondente al piano da raggiungere. N. B. : Ai fini del risultato, conta l'ordine in cui sono elencate le azioni da intraprendere. Linguaggio dichiarativo • Se l'ascensore è arrivato e la porta è aperta, allora si può entrare nell'ascensore. • Se si vuole aprire la porta dell'ascensore, bisogna aspettare che l'ascensore arrivi. • Se si è entrati e la porta è aperta, allora la si può chiudere. • Se si è entrati e la porta è chiusa, allora si deve spingere il tasto corrispondente al piano da raggiungere. N. B. : L'ordine in cui le regole sono elencate non cambia il risultato.

Compilatori e interpreti Affinché un programma scritto in un qualsiasi linguaggio di programmazione sia

Compilatori e interpreti Affinché un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi eseguibile) da parte di un calcolatore, occorre tradurlo dal linguaggio originario al linguaggio della macchina. Ogni traduttore e in grado di comprendere e tradurre un solo linguaggio. Il traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione (sorgente) nella corrispondente rappresentazione in linguaggio macchina (programma eseguibile). Compilatore: • Il programma compilatore analizza e traduce nella sua interezza il programma sorgente. • Il risultato della compilazione è un programma oggetto. • Solo dopo la traduzione dell’intero programma è possibile eseguirlo. Interprete: • Il programma interprete analizza e traduce istruzione per istruzione in linguaggio macchina. • Non appena una istruzione è interpretata può essere eseguita.