Programmazione A-L
CdS Informatica
I anno, I semestre, 12 cfu
Nadia Busi
Programmazione
“Programming is a good medium for
expressing poorly-understood and
sloppily formulated ideas.”
(M. Minsky)
Obiettivo del corso
Fornire principi, tecniche, metodologie
generali per la progettazione e la
realizzazione di programmi
Indipendenti dal linguaggio di
programmazione
Progettazione di programmi
Descrizione del problema
Programma funzionante e corretto
Progettazione di programmi
Descrizione del problema (in linguaggio
naturale)
Estrarre info rilevanti
dati
risultati
Descrivere comportamento del prg da
realizzare (esempi)
Formulare il prg in un linguaggio di
programmazione
Test e debug
Gli strumenti
Metodologia di progettazione
Linguaggio di programmazione
“design recipes” (slide precedente)
Scheme
Ambiente di sviluppo user-friendly
DrScheme
Scheme
Algol
Lisp
Scheme
• Steele - Sussman, MIT, anni ‘70
• didattica
Paradigmi
Paradigma funzionale
Programma = (insieme di) funzioni
Funzione: dati
risultato
Scheme, Lisp, ML …
Paradigma imperativo
Programma = sequenza di istruzioni
Pascal, C, Java …
Linguaggi
Scheme
ML
Java
Pascal
Human-oriented
C
Assembly
Computer-oriented
Scheme: vantaggi
Sintassi semplice e concisa
Semantica facile (regole dell’algebra)
Attenzione sulle tecniche di
programmazione (non sui costrutti)
Ragionamento induttivo
Separazione Model/View
Scheme: vantaggi
Programmi completi dalle prime lezioni
Base per OOP
Java (secondo semestre)
Espressamente progettato per la
didattica
MIT, Rice, Berkeley, Princeton, Cornell,
Johns Hopkins University, Indiana, Yale,
UCLA
Scheme: svantaggi
No sistema di tipi
Tipi nei commenti
Utilizzati per progettazione e
documentazione
Scopi ed uso principalmente accademici
Motorola, Intel, Tektronix, Silicon Graphics,
Microsoft, Disney, Yahoo store…
Enfasi sui principi e non sul linguaggio
Testo consigliato
www.htdp.org
M. Felleisen, R.B. Findler, M. Flatt, S.
Krishnamurthi
“How to Design Programs”
MIT Press, 2001
DrScheme
Ambiente di sviluppo user-friendly
Gerarchia di linguaggi
Multipiattaforma
Beginner/Intermediate/Advanced Student
Full language
Mac/Linux/Windows
www.drscheme.org
Orario delle lezioni
Ora inizio Lunedì
8:30
9:30
10:30
Martedì
E1
E1
E1
Merc.
Giovedì
Venerdì
E2
E2
11:30
12:30
13:30
14:30
15:30
16:30
17:30
E2
E2
E2
E1
E1
E1
E1
Esame
Prove in itinere
Prova pratica: realizzazione di programmi
in laboratorio
Esame finale
Prova pratica
Orale
Voto
Programmazione
I semestre, 12 cfu
Principi di progettazione (Scheme)
Prova di laboratorio (+ orale)
Lab Metodi di Programmazione
II semestre, 6 cfu
Programmazione OO (Java)
Progetto (+ orale)
Voto
I corsi di Programmazione e
LabMetProg sono integrati
Voto corso integrato =
((2 * voto Programmazione) +
voto LabMetProg) / 3
Info utili
Email
busi@cs.unibo.it
Utilizzare possibilmente l’account del dipartimento
Pagina web
www.cs.unibo.it/~busi
Teaching, Programmazione AL
Ricevimento
Martedì ore ???
Previo appuntamento via email
Esempio
Funzione che calcola il doppio di un numero
Input: un numero
Output: un numero
Esempi:
doppio(2) = 4
doppio(5) = 10
doppio(0) = 0
f(x) = x + x
<= casi particolari
Doppio di un numero
(define (doppio x)
(+ x x))
#include <stdio.h>
int main(void) {
int x;
int doppio;
printf(“Inserisci numero: “);
scanf(“%d”, x);
doppio = x + x;
printf(“Il doppio \’e %d”, doppio);
}