Linguaggi di Programmazione
(AA 2002/2003) Corso di Laurea in Informatica Gabriella Pasi
gabriella.pasi@itim.mi.cnr.it
Linguaggi di Programmazione
(AA 2002/2003) Corso di Laurea in Informatica Gabriella Pasi
gabriella.pasi@itim.mi.cnr.it
A loro volta possono essere SEQUENZIALI o
CONCORRENTI. Linguaggi di programmazione:
una possibile classificazione – IMPERATIVI – FUNZIONALI – LOGICI – A OGGETTI
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
Linguaggi imperativi
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
Definizione di nuovi paradigmi di programmazione – PROGRAMMAZIONE A OGGETTI
– PROGRAMMAZIONE FUNZIONALE
– PROGRAMMAZIONE LOGICA
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. Programmazione funzionale e logica
caratteristiche comuni
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
Paradigma funzionale
Linguaggio LISP (LISt Processing)
Linguaggio LISP (LISt Processing)
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
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
Comments