Programma del Corso - Dipartimento di Matematica e Informatica
Programma del Corso - Dipartimento di Matematica e Informatica
Programma del Corso - Dipartimento di Matematica e Informatica
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Obiettivi <strong>del</strong> corso<br />
PROGRAMMAZIONE e LABORATORIO<br />
(docente: Clau<strong>di</strong>o Mirolo)<br />
Il corso introduce i fondamenti culturali e metodologici <strong>del</strong>la programmazione e si propone <strong>di</strong> mettere lo<br />
studente in con<strong>di</strong>zione <strong>di</strong> cogliere pienamente la natura <strong>di</strong> questa attività, stimolando inoltre un atteggiamento<br />
critico nei confronti degli strumenti utilizzati.<br />
Al termine <strong>del</strong> corso lo studente dovrebbe aver acquisito le competenze <strong>di</strong> base e le capacità operative necessarie<br />
al fine <strong>di</strong> progettare, organizzare e formalizzare programmi <strong>di</strong> piccole <strong>di</strong>mensioni, sviluppati secondo i para<strong>di</strong>gmi<br />
funzionale e object-oriented. Dovrebbe inoltre essere in grado <strong>di</strong> analizzare la struttura logica <strong>di</strong> un programma<br />
al fine <strong>di</strong> verificarne la correttezza in relazione alle specifiche.<br />
Organizzazione <strong>del</strong> corso<br />
Il percorso <strong>di</strong>dattico muove dalla <strong>di</strong>scussione <strong>di</strong> esempi e articola la propria riflessione sui principali processi <strong>di</strong><br />
astrazione che consentono <strong>di</strong> gestire la complessità dei problemi affrontati in ambito informatico: l’astrazione<br />
procedurale, l’astrazione sui dati e l’astrazione sullo stato, mettendo in rilievo il ruolo preminente <strong>del</strong>le capacità<br />
organizzative <strong>del</strong> pensiero rispetto alle caratteristiche specifiche dei linguaggi <strong>di</strong> programmazione.<br />
L’approccio seguito è <strong>di</strong> tipo functional-first (IEEE-CS/ACM Computing Curricula 2001): gli esempi relativi<br />
all’astrazione procedurale e sui dati sono affrontati applicando il para<strong>di</strong>gma <strong>di</strong> programmazione funzionale, per<br />
passare infine al para<strong>di</strong>gma imperativo e ai ru<strong>di</strong>menti <strong>di</strong> quello object-oriented nell’ultima parte <strong>del</strong> corso che<br />
tratta l’astrazione sullo stato.<br />
Prerequisiti<br />
Conoscenze matematiche <strong>di</strong> base, <strong>del</strong> livello acquisito nella scuola superiore.<br />
Contenuti <strong>del</strong> corso<br />
Parte I - Astrazione procedurale (linguaggio Scheme)<br />
Algoritmi basati sul calcolo <strong>di</strong> espressioni numeriche e non numeriche. Approccio funzionale: procedure come<br />
astrazione <strong>di</strong> espressioni. Costrutti <strong>di</strong> scelta binaria (if) e multipla (cond). Valori numerici, booleani, caratteri e<br />
stringhe. Procedure ricorsive. Definizioni ricorsive ben fondate. Mo<strong>del</strong>lo <strong>di</strong> valutazione per sostituzione e<br />
riduzione. Costrutto let. Ricorsione generale e ricorsione <strong>di</strong> coda (tail recursion). Verfica <strong>del</strong>la correttezza dei<br />
programmi ricorsivi attraverso <strong>di</strong>mostrazioni per induzione. Ricorsione ad albero e complessità computazionale.<br />
Procedure con argomenti e/o valori procedurali.<br />
Parte II - Astrazione sui dati (linguaggio Scheme)<br />
Introduzione all’astrazione sui dati attraverso semplici strutture. Strutture dati <strong>di</strong> base: coppie, liste e procedure<br />
che operano sulle liste. Liste or<strong>di</strong>nate e algoritmi <strong>di</strong> ricerca. Algoritmi <strong>di</strong> or<strong>di</strong>namento e confronto dei costi<br />
computazionali. Specifica astratta <strong>di</strong> una struttura dati e varietà <strong>del</strong>le scelte realizzative. Strutture dati dal punto<br />
<strong>di</strong> vista <strong>del</strong>l’utilizzatore (protocollo) e dal punto <strong>di</strong> vista <strong>del</strong>l’implementatore (comportamento). Strutture dati<br />
notevoli: pile, code, alberi e relative applicazioni. Alberi binari: alberi <strong>di</strong> valutazione <strong>del</strong>le espressioni, alberi<br />
binari <strong>di</strong> ricerca. Schemi <strong>di</strong> visita <strong>di</strong> alberi: visita anticipata, posticipata e simmetrica.<br />
Parte III - Astrazione sullo stato (linguaggi Scheme e Java)<br />
Concetto <strong>di</strong> stato e para<strong>di</strong>gma imperativo. Principali coman<strong>di</strong> e costrutti imperativi <strong>del</strong> linguaggio Java. Array<br />
(vettori, matrici) e operazioni sugli array. Rivisitazione <strong>di</strong> strutture <strong>di</strong> dati elementari attraverso il para<strong>di</strong>gma<br />
imperativo. Tecniche <strong>di</strong> memoization e programmazione <strong>di</strong>namica. Para<strong>di</strong>gmi funzionale e imperativo a<br />
confronto. Astrazione sullo stato: concetti <strong>di</strong> classe, oggetto, costruttore e metodo. Realizzazione <strong>di</strong> strutture<br />
<strong>di</strong>namiche in Java: pile, code e alberi. Programmi iterativi: correttezza e terminazione. Concetti <strong>di</strong> asserzione,<br />
invariante <strong>del</strong>l’iterazione e funzione <strong>di</strong> terminazione.<br />
Concetti ricorrenti: Astrazione procedurale; mo<strong>del</strong>lo computazionale; schema ricorsivo; ricorsione <strong>di</strong> coda;<br />
ricorsione ad albero; schema imperativo; iterazione; algoritmo; complessità computazionale; precon<strong>di</strong>zioni e<br />
postcon<strong>di</strong>zioni (specifiche); invariante; terminazione; astrazione sui dati; astrazione sullo stato; schema orientato<br />
agli oggetti; protocollo; istanza (oggetto); incapsulamento dei dati; organizzazione modulare.<br />
1
Materiale <strong>di</strong> stu<strong>di</strong>o consigliato<br />
PROGRAMMAZIONE e LABORATORIO<br />
(docente: Clau<strong>di</strong>o Mirolo)<br />
• Max Hailperin, Barbara Kaiser, Karl Knight<br />
Concrete Abstractions: An Introduction to Computer Science Using Scheme<br />
Brooks/Cole Publishing Company, 1999 (ISBN: 0-534-95211-9)<br />
http://gustavus.edu/+max/concrete-abstractions-pdfs/index.html<br />
• Walter Savitch, Frank M. Carrano<br />
<strong>Programma</strong>zione con Java<br />
Prentice-Hall, 2010 (E<strong>di</strong>zione italiana; ISBN: 9788871926148)<br />
• Appunti tratti dalle lezioni; esempi ed esercizi pubblicati sulle pagine web <strong>del</strong> corso.<br />
Modalità d’esame<br />
L’esame <strong>di</strong> <strong>Programma</strong>zione prevede due prove <strong>di</strong> accertamento, che si svolgono al termine dei due perio<strong>di</strong><br />
<strong>di</strong>dattici in cui è articolato il corso, una prova <strong>di</strong> Laboratorio e una prova orale. All’orale sono ammessi gli<br />
studenti che hanno conseguito una valutazione complessiva <strong>di</strong> almeno 15 punti su 30 nelle prove <strong>di</strong> accertamento<br />
e che hanno inoltre superato la prova <strong>di</strong> Laboratorio. La <strong>di</strong>scussione orale è opzionale per valutazioni <strong>del</strong>le prove<br />
<strong>di</strong> accertamento comprese fra 20 e 28 punti. La prova <strong>di</strong> Laboratorio e la prova orale, nel caso quest’ultima<br />
venga sostenuta, concorrono alla valutazione finale nei termini <strong>di</strong> una me<strong>di</strong>a pesata. Durante le prove scritte è<br />
consentito consultare libri e appunti.<br />
La valutazione <strong>di</strong> ciascuna <strong>del</strong>le prove <strong>di</strong> accertamento viene espressa nei seguenti livelli qualitativi: ottimo,<br />
buono, <strong>di</strong>screto, sufficiente, quasi sufficiente, insufficiente (la valutazione <strong>di</strong> una singola prova non pregiu<strong>di</strong>ca <strong>di</strong><br />
per se l’ammissione all’orale). La valutazione complessiva <strong>del</strong>le prove <strong>di</strong> accertamento o dei recuperi che<br />
vertono sull’intero programma viene espressa con un punteggio da 18 a 30, se sufficiente; da 15 a 17, se<br />
consente <strong>di</strong> sostenere la prova orale; insufficiente altrimenti.<br />
Il primo appello scritto <strong>di</strong> <strong>Programma</strong>zione consiste normalmente nello svolgimento <strong>del</strong>la seconda prova <strong>di</strong><br />
accertamento. A partire dal secondo appello sono invece previste unicamente prove scritte <strong>di</strong> recupero, che<br />
vertono sull’intero programma <strong>del</strong> corso, rivolte a coloro che non abbiano potuto partecipare alle prove <strong>di</strong><br />
accertamento o vi abbiano conseguito una valutazione insufficiente per l’ammissione all’orale, o che comunque<br />
desiderino migliorare il profitto. In<strong>di</strong>pendentemente dalla valutazione, le prove scritte <strong>di</strong> recupero non<br />
consentono l’esonero dalla <strong>di</strong>scussione orale. Nel caso lo studente si cimenti in più <strong>di</strong> una prova resta valida la<br />
migliore valutazione conseguita.<br />
Quando tutte le prove richieste (prove scritte, prova <strong>di</strong> laboratorio, eventuale prova orale) sono state sostenute, ai<br />
fini <strong>del</strong>la registrazione <strong>del</strong>l’esame, che avviene per via elettronica, è necessario che lo studente confermi<br />
personalmente l’accettazione <strong>del</strong>la valutazione finale conseguita presentandosi a una <strong>del</strong>le sessioni <strong>di</strong> orali<br />
previste dal calendario ufficiale pubblicato a cura <strong>del</strong>la Facoltà. In mancanza <strong>di</strong> un tale assenso esplicito, non si<br />
procederà alla verbalizzazione e quin<strong>di</strong> il superamento <strong>del</strong>l’esame non potrà essere certificato da parte <strong>del</strong>la<br />
segreteria studenti.<br />
Ulteriori informazioni<br />
Ulteriori informazioni sul corso e sulle lezioni, in particolare gli esempi <strong>di</strong>scussi in classe e i temi d’esame, sono<br />
resi <strong>di</strong>sponibili attraverso le pagine <strong>del</strong> corso all’in<strong>di</strong>rizzo:<br />
http://www.<strong>di</strong>mi.uniud.it/clau<strong>di</strong>o/teaching/programmazione/<br />
2