Corso di Programmazione I (Edizione 3)
ATTENZIONE: questa pagina contiene solo le informazioni generali del corso. Per il relativo materiale ed informazioni dettagliate, fate riferimento al sito ufficiale su piattaforma ARIEL .
Descrizione generale del corso di Programmazione
Il corso di Programmazione è un corso di 12 crediti finalizzato all'insegnamento della programmazione degli elaboratori. Non richiede alcuna conoscenza pregressa.
Obiettivi:
- Interiorizzare l’aspetto metodologico della programmazione
- Imparare una tecnologia: il linguaggio di programmazione GO
- Sviluppare strategie e meccanismi di base per organizzare la complessita` dei programmi
Metodi:
- Lezioni di teoria
- Lezioni di laboratorio
- Impegno autonomo, coinvolgimento personale e di gruppo
Materiale:
- Ivo Balbaert “The Way to GO”
- A. Donovan, B. Kernighan “The GO programming language”
- Dispense ed esempi forniti durante il corso
Obiettivi didattici (dall'edizione 18/19 di P. Boldi)
Il corso ha come scopo che lo studente acquisisca una serie di conoscenze, abilità e competenze, le principali delle quali sono:
- Conoscenze
- K1. Conoscere i concetti fondamentali della programmazione imperativa strutturata
- K2. Conoscere gli elementi principali della sintassi e della semantica del linguaggio di programmazione Go
- Abilità
- A1. Riconoscere l'uso di un pattern all'interno di una porzione di codice
- A2. Identificare porzioni di codice critiche in relazione ad un comportamento osservato
- A3. Scegliere e applicare un opportuno pattern per automatizzare un compito semplice
- A4. Tradurre in Go un semplice algoritmo descritto in linguaggio naturale
- Competenze
- C1. Interpretare e descrivere il comportamento di un programma semplice quando viene eseguito [si basa su A1, A2]
- C2. Comprendere che cosa fa un semplice programma e riconoscere come le varie parti di cui è composto contribuiscano al suo funzionamento [si basa su A1, A2]
- C3. Stabilire le cause di un malfunzionamento e intervenire su un programma semplice per correggerlo/modificarlo [si basa su C1, C2, A1, A2]
- C4. Ideare/impostare un programma per automatizzare un compito semplice [si basa su C1, C2, A2, A3]
- C5. Scrivere e mettere a punto un programma per automatizzare un compito semplice [si basa su C1, C2, C3, C4, A4]
Nella valutazione intendiamo avvalerci dei seguenti indicatori (* significa che questo indicatore sarà valutato principalmente durante la prova di laboratorio):
- Per C1:
- tracciare l'esecuzione di un semplice programma
- rappresentare graficamente lo stato (memoria) di un programma in esecuzione
- descrivere una porzione di codice
- Per C2:
- identificare il ruolo delle variabili
- prevedere l'output di un programma senza eseguirlo
- individuare casi di test significativi
- Per C3:
- rilevare un difetto in una porzione di codice
- spiegare le cause di un malfunzionamento
- correggere il difetto
- Per C4:
- scrivere un programma o una funzione che realizzi un compito semplice
- scrivere un programma o una funzione ricorsiva che realizzi un compito semplice
- Per C5:
- scrivere un programma che supera senza errori la fase di compilazione (*)
- scrivere programma che mostra il funzionamento corretto su casi di test significativi (*)
- evitare duplicazione di codice
- evitare codice convoluto
- usare nomi significativi per i nomi di variabili, tipi e funzioni (leggibilità)
- organizzare la struttura del programma usando funzioni (modularità)
- usare solo la memoria necessaria
Contenuti dettagliati del corso
Il programma di dettaglio del corso verrà pubblicato durante l'anno:
- Introduzione al corso; Che cos'è l'informatica; Il calcolatore come macchina programmabile; Hardware, Programmi e Linguaggi di programmazione (esempi in diversi contesti)
- La macchina di von Neumann; struttura di memoria e CPU; un esempio di CPU con relativo linguaggio assembly; fetch-decode-execute; linguaggi di programmazione e calcolatilità (esempio delle macchine RAM); il concetto di traduttore, compilatore ed interprete
Di seguito vengono riportati gli argomenti trattati nell' edizione 18/19 del corso (prof. Boldi). [TWG] = The Way to Go.
- Ciclo di vita del software. Strumenti per la programmazione. Storia di go. Il primo programma in go [TWG4]. Il go tool. Compilazione. Esecuzione. Formattazione. Documentazione [TWG3]
- Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
- Variabili: nome, tipo, valore, scope. Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment [TWG4]
- I/O di base: fmt.Println, fmt.Print, fmt.Scan. Tipi di base numerici (int, float64). Espressioni numeriche. Conversioni. Variabili inutilizzate e blank variable [TWG4]
- Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi [TWG5]
- Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi
- Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi [TWG5]
- Esercizi con i cicli semplici. Istruzioni break e continue [TWG5]
- Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa [Dispense, TWG4]
- Esercizi con i cicli annidati.
- Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. I caratteri (ASCII, Unicode, UTF-8). Tipo rune [Dispense, TWG4, TWG5]
- Tipo string: differenze fra raw e utf-8. Funzione len. Quarta forma del ciclo for (range).
- Selezione multiaria (switch) [TWG5]
- Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
- Esercizi. Pacchetto strconv e pacchetto strings [TWG]
- Puntatori: operatori * e &. La funzione new [TWG4]
- Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
- Array e slice. Inizializzatori. Applicazione dei for range. Funzione append [TWG7]
- Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
- Generazione numeri pseudo-casuali. Pacchetto math. Esercizi
- Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi [TWG8]
- Ricorsione. Stack di esecuzione [TWG6]
- Esercizi sulla ricorsione
- Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch
- Pacchetti e struttura. Visibilità. Documentare un pacchetto [TWG9 (cenni)]
- Esempio: un pacchetto per le liste concatenate semplici di stringhe
- Argomenti avanzati: metodi e interfacce (cenni) [TWG10, TWG11]
- I/O avanzato. File, istruzione defer [TWG6, TWG12]
- Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing...
- Testing unitario e funzionale (E2E) [TWG13]
- Tipi funzione. L'esempio dell'integrazione numerica (metodo dei trapezoidi e metodo Monte-Carlo) [TWG6]
- Il linguaggio C. Il gcc. Differenze sintattiche: punto-e-virgola, parentesi nelle strutture di controllo, dichiarazioni di variabili, tipi e funzioni. Differenze nelle strutture di controllo del flusso (switch, while, do-while). Uso di istruzioni semplici nelle strutture di controllo. Inclusione vs. importazione.
- Assenza di stringhe, slice, mappe; uso dei char[] per le stringhe. Tipi elementari e dipendenza dal compilatore; uso di tipi specifici (stdint.h, bool.h). Cast impliciti. Definizione di macro. Funzioni di libreria. Parametri da riga di comando
- Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free
Informazioni e Ricevimento
I momenti di ricevimento studenti (e in generale i colloqui informativi sul corso) vengono organizzati su appuntamento, nell'ufficio del docente (via Celoria 18, terzo piano). Per fissare un appuntamento, inviare una e-mail al docente e attendere una risposta di conferma.