Programmazione A-L Programmazione Obiettivo del corso

Programmazione
Programmazione A-L
CdS Informatica
I anno, I semestre, 12 cfu
Nadia Busi
Obiettivo del corso
!
!
Fornire principi, tecniche, metodologie
generali per la progettazione e la
realizzazione di programmi
Indipendenti dal linguaggio di
programmazione
“Programming is a good medium for
expressing poorly-understood and
sloppily formulated ideas.”
(M. Minsky)
Progettazione di programmi
Descrizione del problema
Programma funzionante e corretto
Progettazione di programmi
!
!
Descrizione del problema (in linguaggio
naturale)
Estrarre info rilevanti
!
!
!
!
dati
Gli strumenti
!
!
!
risultati
Descrivere comportamento del prg da
realizzare (esempi)
Formulare il prg in un linguaggio di
programmazione
Test e debug
Scheme
Metodologia di progettazione
Linguaggio di programmazione
!
!
“design recipes” (slide precedente)
Scheme
Ambiente di sviluppo user-friendly
!
DrScheme
Paradigmi
!
Algol
Lisp
Paradigma funzionale
!
!
!
Scheme
!
Paradigma imperativo
!
• Steele - Sussman, MIT, anni ‘70
• didattica
Programma = (insieme di) funzioni
Funzione: dati
risultato
Scheme, Lisp, ML …
!
Programma = sequenza di istruzioni
Pascal, C, Java …
Linguaggi
Scheme
ML
Scheme: vantaggi
Human-oriented
!
!
Java
Pascal
!
C
!
!
Assembly
Computer-oriented
Scheme: vantaggi
!
!
Programmi completi dalle prime lezioni
Base per OOP
!
!
Scheme: svantaggi
!
MIT, Rice, Berkeley, Princeton, Cornell,
Johns Hopkins University, Indiana, Yale,
UCLA
No sistema di tipi
!
Java (secondo semestre)
Espressamente progettato per la
didattica
!
Sintassi semplice e concisa
Semantica facile (regole dell’algebra)
Attenzione sulle tecniche di
programmazione (non sui costrutti)
Ragionamento induttivo
Separazione Model/View
!
!
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
!
!
DrScheme
www.htdp.org
M. Felleisen, R.B. Findler, M. Flatt, S.
Krishnamurthi
“How to Design Programs”
MIT Press, 2001
!
!
Ambiente di sviluppo user-friendly
Gerarchia di linguaggi
!
!
!
Multipiattaforma
!
!
Orario delle lezioni
Ora
inizio
8:30
9:30
10:30
11:30
12:30
13:30
14:30
lun
mar
mer
E2
E2
Mac/Linux/Windows
www.drscheme.org
Esame
gio
ven
!
Parziali
!
E2
E2
E1
E1
E1
Beginner/Intermediate/Advanced Student
Full language
!
Prova pratica: realizzazione di programmi in
laboratorio
Due prove:
!
E1
E1
!
!
Prima metà di novembre
Meta’ dicembre
Esame finale
!
!
Prova pratica
Orale
Voto
!
Programmazione
!
!
!
!
Voto
I semestre, 12 cfu
Principi di progettazione (Scheme)
Prova di laboratorio (+ orale)
!
!
II semestre, 6 cfu
Programmazione OO (Java)
Progetto (+ orale)
Info utili
Email
!
!
!
[email protected]
Utilizzare possibilmente l’account del dipartimento
Pagina web
!
www.cs.unibo.it/~busi
!
!
!
Lab Metodi di Programmazione
!
!
!
Esempio
!
!
!
!
Teaching, Programmazione AL
!
Martedì ore 15:30
Previo appuntamento via email
Funzione che calcola il doppio di un numero
Input: un numero
Output: un numero
Esempi:
!
Ricevimento
!
I corsi di Programmazione e
LabMetProg sono integrati
Voto corso integrato =
((2 * voto Programmazione) +
voto LabMetProg) / 3
!
!
!
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);
}