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); }