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 “design recipes” (slide precedente) Linguaggio di programmazione Scheme Ambiente di sviluppo user-friendly DrScheme
Scheme Lisp Algol 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 Human-oriented Java Pascal 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 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 Beginner/Intermediate/Advanced Student Full language Multipiattaforma Mac/Linux/Windows
Orario delle lezioni Ora inizio LunedìMartedìMerc.GiovedìVenerdì 8:30 E1E2 9:30 E1E2 10:30 E1 11:30 12:30 13:30 E1 14:30 E1 15:30 E2E1 16:30 E2E1 17:30 E2
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 Utilizzare possibilmente l’account del dipartimento Pagina web Teaching, Programmazione AL Ricevimento Martedì ore ??? Previo appuntamento via
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 <= casi particolari f(x) = x + x
Doppio di un numero (define (doppio x) (+ x x)) #include int main(void) { int x; int doppio; printf(“Inserisci numero: “); scanf(“%d”, x); doppio = x + x; printf(“Il doppio \’e %d”, doppio); }