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 [email protected] 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); }