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