Linguaggi di Programmazione (AA 2002/2003) Corso di Laurea in Informatica Gabriella Pasi [email protected] Linguaggi di programmazione: una possibile classificazione – IMPERATIVI – FUNZIONALI – LOGICI – A OGGETTI A loro volta possono essere SEQUENZIALI o CONCORRENTI. Linguaggi imperativi Le caratteristiche essenziali di questi linguaggi sono strettamente legate alla architettura di Von Neumann (processore e memoria). I linguaggi ASSEMBLER, FORTRAN, Pascal, C (ad esempio) costituiscono livelli di astrazione di questa architettura. L’architettura consiste di due parti: – memoria (componente passiva) – processore (componente attiva) La principale attività del processore e’ assegnare valori a celle di memoria. Variabili come astrazione di celle di memoria e istruzione di assegnamento. Linguaggi imperativi I linguaggi imperativi adottano uno stile prescrittivo. – un programma imperativo prescrive le operazioni che il processore deve compiere (es. assegnamento) – Esecuzione delle istruzioni nell’ordine in cui appaiono nel programma (eccezione: strutture di controllo) Realizzati sia attraverso interpretazione (BASIC,...) sia compilazione (Pascal, FORTRAN, COBOL,...) Nati per manipolazione numerica più che simbolica Linguaggi imperativi efinizione di nuovi paradigmi di programmazion Motivazioni – Applicazioni a più alto livello di astrazione – Tentativo di sviluppare programmi più concisi, più semplici da scrivere, più vicini alla logica del problema, la cui correttezza sia più semplice da verificare verificare formalmente – PROGRAMMAZIONE A OGGETTI – PROGRAMMAZIONE FUNZIONALE – PROGRAMMAZIONE LOGICA Programmazione funzionale e logica caratteristiche comuni Non manipolazione di numeri, ma di simboli Il ”programma” è costantemente in evoluzione: – modularità spinta – programma come struttura dati; – l’ambiente tende a confondersi col linguaggio La programmazione è esplorativa ed incrementale: prototipi veloci Il linguaggio deve essere ad ”altissimo livello”: utilizzabile anche da non-programmatori. Paradigma funzionale Concetto primitivo: funzione e applicazione di funzione. – Una funzione è una regola di corrispondenza che associa a ogni elemento del suo dominio un elemento nel codominio. – Una definizione di funzione specifica il dominio, il codominio e la regola di associazione. Ad esempio: incr(x) = x + 1. – Dopo la definizione una funzione può essere applicata a un elemento del dominio per restituire l’elemento associato del codominio (valutazione): incr(3) 4. Paradigma funzionale Paradigma funzionale Linguaggio LISP (LISt Processing) Linguaggio LISP (LISt Processing) Paradigma logico Stile dichiarativo: la conoscenza del problema è espressa indipendentemente dal suo utilizzo (COSA non COME); Alta modularità e flessibilità Definire un linguaggio logico significa definire come il programmatore può esprimere la conoscenza e quale tipo di controllo può utilizzare; – Problematiche di RAPPRESENTAZIONE della conoscenza Paradigma logico • Base: logica formale – 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 Linguaggio Prolog Un programma Prolog è costituito da: –Asserzioni incondizionate (fatti): A –Asserzioni condizionate (o regole): A IF B,C,D,… •A: è la conclusione (conseguente) •B,C,D: sono le premesse (o antecedenti) Una interrogazione ha la forma: ? A, B, C, … ESEMPIO: due individui sono colleghi se lavorano per la stessa ditta collega(X,Y):- lavora(X,Z), lavora(Y,Z), diverso(X,Y). FATTI lavora(emp1,ibm). lavora(emp2,ibm). lavora(emp3,txt). lavora(emp4,olivetti). lavora(emp5,txt). :- collega(X,Y). REGOLA Testa Body