Informazioni sul corso

Orario e modalità delle lezioni

Le lezioni del corso si tengono il martedì alle ore 14:30 – 16:30 in Aula Magna e il venerdì alle ore 10:30 – 12:30 in Aula V3.

Le lezioni sono frontali, nell'attuale manifesto degli studi il corso non prevede un laboratorio; per questa e altre ottime ragioni in classe è vietato l'uso di laptop e strumenti analoghi.

Obiettivi dell’insegnamento

Se informalmente un algoritmo è un insieme di regole che consentono di calcolare in un numero finito di passi ben specificati la soluzione di un problema, la programmazione è in buona sostanza la disciplina che consente di tradurre tale oggetto astratto in una sequenza concreta di istruzioni e di definizioni dei dati (in un assegnato linguaggio di programmazione) che rendano il calcolo suscettibile di esecuzione da parte di un dispositivo automatico (come ad esempio un computer).

L'insegnamento Programmazione del primo anno fornisce le prime competenze relative a tale disciplina, esse verranno accresciute negli anni successivi sia rispetto alla capacità di trattare problemi più complessi (ad esempio negli insegnamenti di Algoritmi e strutture dati, Ricerca operativa, Linguaggi formali e automi o più specifici (in Basi di dati, Sistemi operativi, Reti di calcolatori che di considerare programmi più complessi per dimensione e ciclo di vita (in Ingegneria del software…).

L'insegnamento "Programmazione II" ha l'obiettivo di accrescere le competenze acquisite nel corso del primo anno tramite l'ampliamento della ricchezza espressiva del linguaggio (o paradigma) di programmazione; facendo tesoro della conoscenza del paradigma imperativo appresa tramite l'uso del linguaggio Go, l'insegnamento introduce il paradigma object oriented (assieme alle relative tecniche di specificazione e progetto) attraverso il linguaggio Java (e non solo).

Risultati di apprendimento attesi e argomenti trattati

A seguito del superamento dell'esame, lo studente conosce le principali nozioni riguardanti l'object orientation quali:

  • astrazione (tramite procedure e tipi di dati),

  • incapsulamento (tramite classi concrete/astratte e interfacce),

  • estensibilità (per ereditarietà, composizione e delega),

  • polimorfismo (e tipi generici).

Inoltre lo studente è in grado di:

  • definire e comprendere le specifiche (quanto meno informali) di un programma non banale,

  • progettare una gerarchia di classi Java in accordo a tali specifiche,

  • documentare il codice in modo ragionevole,

  • validare (attraverso semplici test) il comportamento del codice prodotto.

Prerequisiti

Di seguito sono elencate alcune conoscenze preliminari che è bene aver acquisito in modo solido prima di apprestarsi a seguire le lezioni:

  • programmazione [il corso di "Programmazione" è formalmente propedeutico],

  • tecniche di dimostrazione di base [dagli insegnamenti di "Matematica del discreto" e/o "Logica matematica"];

  • aspetti elementari dei linguaggi formali [dal corso "Linguaggi formali e automi"].

Modalità di valutazione

L'insegnamento non prevede prove in itinere. La prova finale è costituita da una prova pratica in laboratorio che verte sulla progettazione e sviluppo di un software secondo delle specifiche assegnate; alla prova scritta può seguire (secondo modalità che saranno esplicitate in seguito) un colloquio orale individuale durante il quale il candidato deve dimostrare:

  • la conoscenza delle definizioni e delle nozioni fondamentali riguardo agli aspetti di orientazione agli oggetti e programmazione,

  • la capacità di applicare tale conoscenza a un semplice caso concreto tramite lo sviluppo di frammenti di codice.

Bibliografia

I libri di testo (ossia il cui uso non è facoltativo) del corso sono:

Si consulti anche la sezione su Java della pagina sugli strumenti per avere informazioni sulla documentazione specifica del linguaggio.

Le letture consigliate, utili ad approfondire e migliorare la propria competenza generale riguardo alla programmazione, sono: