Docenti
L’approccio seguito è di tipo “functional-first” (IEEE-CS/ACM Computing Curricula 2001).
Le prove sono principalmente volte a verificare le capacità dello studente di capire programmi di piccolo scala e di riuscire a impostare e organizzare soluzioni algoritmiche di semplici problemi.
https://www.dmif.uniud.it/claudio/teaching/programmazione
L’approccio seguito è di tipo functional-first (IEEE-CS/ACM Computing Curricula 2001); il percorso didattico si articola attorno ai principali processi di astrazione che consentono di gestire la complessità dei problemi affrontati in ambito informatico: l’astrazione procedurale, l’astrazione sui dati e l’astrazione sullo stato.
Al termine del corso lo studente dovrebbe aver acquisito le competenze di base e le capacità operative necessarie al fine di progettare, organizzare e formalizzare programmi di piccole dimensioni, sviluppati secondo i paradigmi funzionale, imperativo e object-oriented; dovrebbe inoltre essere in grado di analizzare la struttura logica di un programma al fine di verificarne la correttezza in relazione alle specifiche.
Le attività di Laboratorio consistono nel progetto, nello sviluppo e nella sperimentazione di programmi di piccole dimensioni, e hanno lo scopo di stimolare le capacità di organizzazione e lavoro autonomo da parte degli studenti.
Descrittori di Dublino
CAPACITÀ RELATIVE ALLE DISCIPLINE
Lo/la studente/ssa dovrà:
1.1. Conoscenza e capacità di comprensione
– Acquisire le basi della programmazione funzionale e imperativa;
– Acquisire i primi rudimenti della programmazione object-oriented;
– Conoscere sintassi e semantica dei principali costrutti e delle principali strutture dati nei linguaggi Scheme e Java;
– Conoscere le relazioni fra ricorsione e iterazione;
– Conoscere le relazioni fra i concetti di classe e oggetto.
1.2 Capacità di applicare conoscenza e comprensione
– Saper codificare semplici algoritmi ricorsivi e imperativi;
– Saper analizzare la logica di un semplice programma ricorsivo o imperativo per verificarne la correttezza rispetto alle specifiche e per stimarne le prestazioni;
– Saper riconoscere quando è appropriato e saper applicare tecniche di memoization e programmazione dinamica per migliorare le prestazioni di programmi ricorsivi;
– Saper realizzare una classe rispettando il protocollo specificato.
CAPACITÀ TRASVERSALI / SOFT SKILLS
Lo/la studente/ssa dovrà:
2.1 Autonomia di giudizio
– Saper analizzare i problemi al fine di identificare gli aspetti che si prestano ad essere affrontati attraverso programmi, esprimere le specifiche in maniera precisa e scegliere gli strumenti di programmazione adatti allo scopo;
– Saper applicare le proprie conoscenza per capire i processi di elaborazione dell’informazione.
2.2 Abilità comunicative.
– Essere in grado di confrontarsi con i pari al fine di progettare o migliorare la soluzione algoritmica di un problema.
2.3 Capacità di apprendimento
– Essere in grado di attuare sperimentazioni sistematiche di un programma per verificarne la correttezza e per stimarne le prestazioni;
– Essere in grado di orientarsi nell’ambito dei linguaggi di programmazione e di apprendere autonomamente nuovi linguaggi.
Parte I – Astrazione procedurale (linguaggio Scheme) Algoritmi basati sul calcolo di espressioni numeriche e non numeriche. Approccio funzionale: procedure come astrazione di espressioni. Costrutti di scelta binaria (if) e multipla (cond). Valori numerici, booleani, caratteri e stringhe. Procedure ricorsive. Definizioni ricorsive ben fondate. Modello di valutazione per sostituzione e riduzione. Costrutto let. Ricorsione generale e ricorsione di coda (tail recursion). Verfica della correttezza dei programmi ricorsivi attraverso dimostrazioni per induzione. Ricorsione ad albero e complessità computazionale. Procedure con argomenti e/o valori procedurali.
Parte II – Astrazione sui dati (linguaggio Java) Introduzione all’astrazione sui dati attraverso semplici strutture. Strutture dati di base: liste “funzionali” e procedure che operano sulle liste. Specifica astratta di una struttura dati e varietà delle scelte realizzative. Strutture dati dal punto di vista dell’utilizzatore (protocollo) e dal punto di vista dell’implementatore (comportamento). Esempi di astrazione sui dati.
Parte III – Astrazione sullo stato (linguaggio Java) Concetto di stato e paradigma imperativo. Principali comandi e costrutti imperativi del linguaggio Java. Array (vettori, matrici) e operazioni sugli array. Rivisitazione di strutture di dati elementari attraverso il paradigma imperativo. Tecniche di memoization e programmazione dinamica. Paradigmi funzionale e imperativo a confronto. Astrazione sullo stato: concetti di classe, oggetto; protocollo e incapsulamento dei dati; costruttori e metodi. Esempi di astrazione sullo stato. Ricorsione e iterazione: trasformazione di programmi ricorsivi in programmi iterativi utilizzando uno stack. Programmi iterativi: correttezza e terminazione. Concetti di asserzione, invariante dell’iterazione e funzione di terminazione.
Max Hailperin, Barbara Kaiser, Karl Knight Concrete Abstractions: An Introduction to Computer Science Using Scheme Brooks/Cole Publishing Company, 1999 (ISBN: 0-534-95211-9) http://gustavus.edu/+max/concrete-abstractions-pdfs/index.htm
Testo di riferimento per la programmazione imperativa e orientata agli oggetti:
Robert Sedgewick, Kevin Wayne Introduction to Programming in Java Addison-Wesley, 2007 (ISBN: 0-321-49805-4)
Università degli Studi di Udine
Dipartimento di Scienze Matematiche, Informatiche e Fisiche (DMIF)
via delle Scienze 206, 33100 Udine, Italy
Tel: +39 0432 558400
Fax: +39 0432 558499
PEC: dmif@postacert.uniud.it
p.iva 01071600306 | c.f. 80014550307
30 km from Slovenia border
80 km from Austria border
120 km from Croatia border
160 km South West of Klagenfurt (Austria)
160 km West of Lubiana (Slovenia)
120 km North East of Venezia (Italy)