AOT LAB - Università degli Studi di Parma

annuncio pubblicitario
AOT
LAB
Agent and Object Technology Lab
Dipartimento di Ingegneria dell’Informazione
Università degli Studi di Parma
Fondamenti di Informatica
Linguaggi di Programmazione
Michele Tomaiuolo
AOT
LAB
Linguaggi macchina
I linguaggi macchina forniscono solo le operazioni
che l'elaboratore può eseguire:
Operazioni molto elementari
Diverse per ogni processore
Scritte in linguaggio binario
Sono più orientati alla macchina che ai problemi
da trattare
2
AOT
LAB
Linguaggi assemblativi
Una prima evoluzione sono i linguaggi
assemblativi che sostituiscono i codici binari con
codici simbolici
START:
EQUAL:
MOV
CMP
JZ
INT
RET
MOV
AX, BX
AX, 12h
EQUAL
21h
BL, 82h
I linguaggi macchina e i linguaggi assemblativi
sono detti linguaggi a basso livello
3
AOT
LAB
Linguaggi ad alto livello
I cosiddetti linguaggi ad alto livello sono stati
introdotti per facilitare la scrittura dei programmi
Sono linguaggi simbolici e in continua evoluzione
Sono definiti da un insieme di regole formali, le regole
grammaticali o sintassi
Questi linguaggi di programmazione permettono:
La descrizione del problema in modo intuitivo,
dimenticandosi che verranno eseguiti da un calcolatore
Una astrazione rispetto al calcolatore su cui verrà
eseguito il programma
Ma devono essere tradotti in linguaggio macchina
4
AOT
LAB
Storia dei linguaggi
Inizi
Assembly
Linguaggio
macchina
1945 1950




Sistema
ALGOL
Prolog
COBOL
Simula
LISP
BASIC C
FORTRAN
Pascal
1960
1970
OOP
Internet
.NET
Smalltalk
PHP
C++
Javascript
ADA
Java
1980
2000
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
http://www.levenez.com/lang/history.html
http://www.byte.com/art/9509/sec7/art19.htm
http://www.princeton.edu/~ferguson/adw/programming_languages.shtml
5
AOT
LAB
Sintassi e semantica
Le regole di sintassi definiscono come si devono
comporre i simboli e le parole per formare delle
istruzioni corrette
La semantica di un’istruzione definisce il significato
della stessa
Un programma sintatticamente corretto non è
necessariamente semanticamente corretto
I programmi fanno quello che prescriviamo che
facciano e non quello che vorremmo che
facessero
6
AOT
LAB
Sintassi e semantica
Programma sintatticamente corretto
Soddisfa le regole sintattiche
Cioè, è una sequenza di parole o simboli appartenenti
alle giuste categorie sintattiche
Programma semanticamente corretto
Soddisfa le regole semantiche
Dice se il programma ha senso, se sarà possibile
eseguirlo
Ad esempio, la frase “Il cane gioca in borsa” è
sintatticamente corretta, ma non semanticamente
7
AOT
LAB
Semantica
Correttezza semantica (typing)
Quali tipi di dato possono essere elaborati?
Quali operatori applicabili ad ogni dato?
Quali regole per definire nuovi operatori?
Effetto dell’esecuzione (semantica operazionale)
Quale è il singolo effetto di ogni azione elementare?
Quale è l’effetto dell’aggregazione delle azioni?
• Cioè quale è l’effetto dell’esecuzione di un certo programma?
8
AOT
LAB
Paradgmi di programmazione
Forniscono la filosofia con cui si scrivono i
programmi e stabiliscono:
La metodologia con cui si scrivono i programmi
Il concetto di computazione
I linguaggi devono consentire ma soprattutto
spingere all’adozione di un particolare paradigma:
Imperativo
Logico
Funzionale
Orientato agli oggetti
9
AOT
LAB
Imperativi
Fortran
Cobol
C
Pascal
Visual Basic
Funzionali
Lisp
ML
Linguaggi di programmazione
Logici
Prolog
Orientati agli Oggetti
C++
Java
C#
Smalltalk
Eiffel
10
AOT
LAB
Esempi di programma
Calcolo fattoriale
Il fattoriale del numero intero positivo n è il prodotto dei
primi n numeri interi positivi
Il fattoriale viene rappresentato con la forma n!
Gestione liste
Una lista è una delle strutture dati consistente in una
sequenza di nodi che contengono
• Campi di dati arbitrari
• Uno o due riferimenti che puntano al nodo successivo e/o
precedente
Operazioni possibili sulle liste sono aggiunta, rimozione,
ordinamento ecc. di nodi
11
AOT
LAB
Linguaggi imperativi
Un linguaggio imperativo è legato all’architettura
della macchina di Von Neumann, ma ad un livello
di astrazione vicino a quello dei diagrammi di
flusso
La principale attività del processore è assegnare
valori a celle di memoria
Le operazioni che effettuano le istruzioni di un
linguaggio imperativo si basano sul concetto di
variabile
Astrazione del concetto di locazione di memoria
12
AOT
LAB
Linguaggi imperativi
I linguaggi imperativi adottano uno stile prescrittivo
Il programma imperativo prescrive le operazioni che il
processore deve compiere
L’esecuzione delle istruzioni è nell'ordine in cui
appaiono nel programma
L’ordine può essere alterato dalle strutture di controllo
realizzate dal processore con le istruzioni di salto
13
AOT
LAB
Programma imperativo
La struttura del programma consiste
principalmente in due parti:
Una parte di dichiarazione in cui si dichiarano tutte le
variabili del programma ed il loro tipo
Una parte di istruzioni che realizzano l'algoritmo
risolutivo del problema
I tipi di istruzioni corrispondono proprio ai tipi di
istruzioni possedute dai processori
Istruzioni di lettura e scrittura
Istruzione di assegnamento
Istruzioni aritmetiche e logiche
Istruzioni di controllo
14
AOT
LAB
Fattoriale
main(…) {
printf(“%d”, fattoriale(n));
}
cc fattoriale.c
int fattoriale(int n) {
int fatt = 1;
for (int i = 1; i <= n; i++) {
fatt = fatt * i;
}
return fatt;
}
fattoriale 3
6
15
AOT
LAB
struct lista {
int val;
lista *next;
}
main(…) { … }
int aggiungi(int n, lista l) { … }
Gestione liste
cc gestisciLista.c
gestisciLista
Scegli l’operazione:
…
int rimuovi(int indice, lista l) { … }
…
16
AOT
LAB
Pregi e difetti
+ Ottima efficienza
+ Adatti a programmi numerici e gestionali
-
Scarsa naturalezza, leggibilità e flessibilità
Difficile programmazione incrementale
Non adatti per la manipolazione simbolica
Le funzioni e le variabili non sono funzioni e
variabili matematiche
- Poco adatti per applicare metodi formali di
correttezza e di verifica di programmi
- Difficile manipolazione dinamica di programmi
17
AOT
LAB
Linguaggi funzionali
In un linguaggio funzionale un programma è visto
come una funzione matematica
Una funzione è una regola di corrispondenza che
associa ad ogni elemento del suo dominio un
unico elemento nel codominio
Una definizione di funzione specifica il dominio, il
codominio e la regola di associazione
Dopo la definizione una funzione può essere
applicata ad un elemento del dominio per restituire
l'elemento associato nel codominio
18
AOT
LAB
Linguaggi funzionali
 La sola operazione del modello funzionale è l’applicazione
di funzioni ad operandi
 Il ruolo della macchina funzionale (interprete) è valutare il
programma e produrre un valore
 Il valore di una funzione è determinato solo dai suoi
argomenti
 Non ci sono effetti collaterali (funzionale puro)
 L'essenza della programmazione funzionale è combinare
funzioni
 Basato sull’utilizzo della ricorsione
 Le variabili sono variabili matematiche che denotano un
valore fisso nel tempo e non valori mutabili
 Non c’è nessun assegnamento
19
AOT
LAB
(defun fattoriale(n)
(if (= n 0)
1
(* n (fattoriale (- n 1)))
)
)
Fattoriale
(fattoriale 3)
 6
http://www.joeganley.com/code/jslisp.html
20
AOT
LAB
Gestione liste
(car (list 1 2 3))
 1
(cdr (list 1 2 3))
 (2 3)
(cons 4 (list 1 2 3))
 (4 1 2 3)
21
AOT
LAB
Pregi e difetti
+ Adatti per la manipolazione simbolica e per i problemi
naturalmente ricorsivi
+ Le funzioni e le variabili sono funzioni e variabili
matematiche
+ Adatti per applicare metodi formali di correttezza e di
verifica di programmi
+ Facile manipolazione dinamica di programmi
+ Adatti per applicazioni di Intelligenza Artificiale e
programmazione esplorativa
+ Buona naturalezza
-
Bassa efficienza
Non adatti per la manipolazione numerica
Difficile programmazione procedurale
Scarsa leggibilità e flessibilità
Non facilitano la programmazione incrementale
22
AOT
LAB
Linguaggi logici
In un linguaggio logico un programma è composto
da una base di conoscenza contenente:
Una descrizione del problema basata su formule logiche
(fatti, predicati, …)
Un insieme di regole per manipolare la descrizione del
problema
Con un linguaggio logico programmare significa:
Descrivere il problema con delle formule del linguaggio
Interrogare il sistema (motore inferenziale) per effettuare
delle inferenze
23
AOT
LAB
Linguaggi logici
 L’esecuzione di un programma corrisponde all’applicazione
delle regole alla descrizione del problema
 L’esecuzione è attivata da una interrogazione dell’utente
 Lo scopo dell’esecuzione è
•
Verificare se la descrizione del problema soddisfa l’interrogazione
•
Recuperare i valori della descrizione del problema che soddisfano
l’interrogazione
• Rispetto alle normali computazioni, il calcolo logico ha le
caratteristiche del cosiddetto non-determinismo:
 Può terminare con insuccesso
 Può concludersi con più di un caso di successo
24
AOT
LAB
Fattoriale
fattoriale(0, 1) :- !.
fattoriale(N, X) :- N > 0, M is N - 1,
fattoriale(M, Y), X is Y * N.
fattoriale(3, X)
X = 6
http://www.sfu.ca/~gholst/JLog/index.html
25
AOT
LAB
Gestione liste
aggungi([], X, X).
aggiungi([[X1 | X2], Y, [X1 | Z]) :- aggiungi(X2, Y, Z).
aggiungi([1], [1, 2], W)
W = [1, 1, 2]
26
AOT
LAB
Pregi e difetti
+ Adatti per la manipolazione simbolica e per i problemi
naturalmente ricorsivi
+ Adatti per applicare metodi formali di correttezza e di
verifica di programmi
+ Facile manipolazione dinamica di programmi
+ Adatti per applicazioni di Intelligenza Artificiale
+ Buona naturalezza
-
Bassa efficienza
Non adatti per la manipolazione numerica
Scarsa leggibilità e flessibilità
Difficile programmazione procedurale
Non facilitano la programmazione incrementale
27
AOT
LAB
Linguaggi orientati agli oggetti
 I linguaggi orientati agli oggetti si sono evoluti a partire dal
concetto di astrazione di dato introdotto in alcuni linguaggi
imperativi
 Con un linguaggio orientato agli oggetti si cerca di
rappresentare un problema descrivendo ogni entità
partecipante con un oggetto nella forma e nel
comportamento
 La definizione di un oggetto è basata su tecniche di
 Incapsulamento dei dati
 Ereditarietà
 Astrazione
 Polimorfismo
28
AOT
LAB
Linguaggi orientati agli oggetti
 Incapsulamento dei dati
 I dettagli di definizione degli oggetti sono nascosti
 Solo le operazioni (metodi) permesse su di loro sono visibili
 Ereditarietà
 Gli oggetti sono definiti in una gerarchia
 Ereditano dall’immediato parente dati e metodi
 Aggiungono dati e metodi e specializzano quelli ereditati
 Astrazione
 Il meccanismo con cui si specifica le caratteristiche peculiari di un
oggetto che lo differenzia da altri
 Polimorfismo
 Possibilità di eseguire funzioni con lo stesso nome su tipi di dati
differenti
29
AOT
LAB
Linguaggi orientati agli oggetti
In un linguaggio di programmazione orientato agli
oggetti (OOP) un programma consiste:
Definizione di un insieme di classi
Creazione di un insieme di istanze di queste classi ed
esecuzione dei loro metodi
Una classe definisce un tipo di oggetto come
insieme di:
Variabili (campi)
Funzioni (metodi)
30
AOT
LAB
class Fattoriale {
int valore;
int fattoriale(int n) {
int fatt = 1;
for (int i = 1; i <= n; i++)
fatt = fatt * i;
return fatt;
}
void main(String[] args) {
…
System.out.println(fattoriale(n));
…
}
}
Fattoriale
javac fattoriale.java
java fattoriale 3
6
31
AOT
LAB
Gestione liste
class Lista {
int val;
Lista next;
Lista aggiungi(int val) { … }
…
javac GestisciListe.java
java GestisciListe

Lista rimuovi(int indice) { … }
}
import Lista;
Class GestisciListe {
Vector<Lista> liste;
…
void main(String[] args) { …}
}
32
AOT
LAB
+
+
+
+
+
+
Pregi e difetti
Ottima flessibilità e programmazione incrementale
Ottimo riuso del software
Buona efficienza
Adatti per programmi numerici e gestionali
Abbastanza adatti per la manipolazione simbolica
Discreta naturalezza e leggibilità e flessibilità
- Poco adatti per applicare metodi formali di
correttezza e di verifica di programmi
- Difficile manipolazione dinamica di programmi
33
AOT
LAB
Paradigmi di programmazione
Imperativo
Programma = Algoritmo + Dati
Logico
Programma = Logica + Controllo
Funzionale
Programma = Funzione
Orientato agli Oggetti
Programma = Oggetti
34
AOT
LAB
Perchè più paradigmi e linguaggi?
Efficienza
Rapida prototipazione
Facile comprensione del linguaggio (leggibilità)
Modificabilità e riusabilità
Programmazione in largo
Qualità del programma
35
AOT
LAB
Programmazione multi paradigma
Rispetto alla varietà dei problemi e delle
applicazioni concrete ogni paradigma presenta
propri vantaggi e svantaggi
Per risolvere il problema si cerca di aggiungere a
un linguaggio, appartenente ad un particolare
paradigma di programmazione, caratteristiche
proprie di un altro paradigma
A volte lo stesso scopo viene raggiunto aggiungendo
particolari librerie
Un'altra soluzione, spesso adottata, è quella di
interfacciarsi con altri linguaggi
36
AOT
LAB
Ciclo di vita del software
Lo sviluppo del software è un’attività dinamica
soggetta a continue variazioni e modifiche
Si parla di manutenzione del software per indicare
l’attività che prevede la correzione ed il
miglioramento di un programma e della sua
documentazione
Il software, per questo motivo, è soggetto ad una
evoluzione nota con il nome di ciclo di vita che può
essere riassunta nello schema seguente
37
AOT
LAB
Ciclo di vita del software
Fase 1 – Analisi dei requisiti
Intervista con il cliente per la messa a punto delle
specifiche. Descrizione dell’input e dell’output mediante
variabili semplici e strutturate
Fase 2 – Progetto
Stesura dell’algoritmo, rappresentato mediante pseudo
codice, e controllo della sua funzionalità
Fase 3 – Implementazione
Codifica dell’algoritmo in un linguaggio di
programmazione dipendente dal tipo di problema
38
AOT
LAB
Ciclo di vita del software
Fase 4 – Collaudo e validazione
Procedura di prova e verifica del programma realizzato
attraverso l’esecuzione con dati campione e l’utilizzo di
utenti
Fase 5 – Redazione della documentazione
Procedura di stesura del manuale d’uso
Fase 6 – Rilascio del prodotto
Diffusione del software prodotto e della sua
documentazione per la relativa commercializzazione
Fase 7 – Manutenzione
Attività di correzione e modifica necessarie per un
migliore utilizzo o funzionamento
39
Scarica