PROGRAMMAZIONE 2

iten
Codice
48382
ANNO ACCADEMICO
2021/2022
CFU
7 cfu al 2° anno di 8766 STATISTICA MATEM. E TRATTAM. INFORMATICO DEI DATI (L-35) GENOVA

7 cfu al 3° anno di 8760 MATEMATICA (L-35) GENOVA

7 cfu al 2° anno di 9011 MATEMATICA (LM-40) GENOVA

7 cfu al 1° anno di 9011 MATEMATICA (LM-40) GENOVA

SETTORE SCIENTIFICO DISCIPLINARE
INF/01
LINGUA
Italiano
SEDE
GENOVA (STATISTICA MATEM. E TRATTAM. INFORMATICO DEI DATI )
periodo
1° Semestre
materiale didattico

PRESENTAZIONE

L'insegnamento introduce:

Concetto di algoritmo, tipo di dato (valori + operazioni), implementazione, tecniche per valutare la complessita' di un'implementazione;

Principi fondamentali della programmazione orientata a oggetti.

Linguaggi Java e Python con esercitazioni pratiche.

OBIETTIVI E CONTENUTI

OBIETTIVI FORMATIVI

Introduzione a: tipi di dato; algoritmi, strutture dati e valutazione della loro complessita'; programmazione orientata a oggetti; il linguaggio Java; il linguaggio Python; esercitazioni nei due linguaggi.

OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO

Un tipo di dato, comprendente valori e operazioni che vi agiscono, e' la controparte concettuale di un modulo software.
Il processo che porta dal tipo di dato al modulo software comprende la definizione di strutture dati (per la memorizzazione dei valori) e algoritmi (procedimenti per eseguire le operazioni). 
Un algoritmo e' la descrizione a passi di un procedimento che, dato un input, produce un output. La stessa trasformazione input-output puo' essere realizzata con diversi algoritmi.
Per scegliere fra le possibili alternative e' opportuno valutarne prima la complessita' computazionale (occupazione di memoria, tempo di esecuzione) con apposite tecniche.
Infine, si procede alla scrittura di codice in un linguaggio di programmazione.

Dopo aver seguito l'insegnamento, lo studente sara' in grado di valutare la complessita' di strutture dati ed algoritmi semplici.
Conoscera' alcuni algoritmi classici e alcuni tipi di dato classici e sara' in grado di implementarli.
Conoscera' il paradigma di programmazione orientato a oggetti e le parti fondamentali dei linguaggi Java e Python.
Sara' in grado di scrivere programmi strutturati in linguaggio Java e semplici programmi in linguaggio Python.

PREREQUISITI

Conoscere i concetti basilari della programmazione con linguaggio imperativo: istruzione, variabile, ciclo, funzione, argomento, risultato, tipaggio delle variabili.

Conoscere concetti matematici e logici di base: operazione, argomento, risultato, dominio, codominio, operatori logici, ecc.

MODALITA' DIDATTICHE

L'insegnamento prevede lezioni in aula e in laboratorio coordinate fra loro, con circa 2/3 delle ore in laboratorio.
Include lo svolgimento di esercitazioni in Java e in Python, che costituiscono parte della prova d'esame (ved. modalita' di esame e di accertamento).

PROGRAMMA/CONTENUTO

Concetti di Tipo di dato, algoritmo, implementazione. 
Introduzione alla complessita' spaziale e temporale, tecniche di valutazione (per algoritmi iterativi e algoritmi ricorsivi). 
Alcuni tipi di dato classici: pila, coda, dizionario.
Alcuni algoritmi per problemi classici: ordinamento e/o operazioni sui grafi.
Paradigma di programmazione object-oriented e linguaggio Java: Classi e oggetti, uguaglianza e copia di oggetti, costruttori, clientship, ereditarietà, overriding, eccezioni.
Linguaggio Python: Interprete interattivo, tipaggio dinamico, tipi contenitori (liste, tuple, dizionari) e operazioni, funzioni, classi, ereditarietà, eccezioni.
Esercitazioni pratiche nei due linguaggi.

TESTI/BIBLIOGRAFIA

Dispense del corso disponibili su aulaweb (in italiano).  Manuali e tutorial on-line (in inglese). 

Libri in inglese: 
M.T.Goodrich, R.Tamassia, M.H.Goldwasser, Data structures and algorithms in Java, John Wiley & Sons. (2014)
C.Horstmann, R.D.Necaise, Python for everyone, John Wiley & Sons.(2018)

Traduzioni italiane:
M.T.Goodrich, R.Tamassia, M.H.Goldwasser, Algoritmi e strutture dati in Java, Apogeo (2015)
C.Horstmann, R.D.Necaise, Concetti di informatica e fondamenti di Python, Apogeo (2019)

DOCENTI E COMMISSIONI

Ricevimento: Su appuntamento.

Commissione d'esame

PAOLA MAGILLO (Presidente)

DAVIDE ANCONA

ELENA ZUCCA (Presidente Supplente)

LEZIONI

MODALITA' DIDATTICHE

L'insegnamento prevede lezioni in aula e in laboratorio coordinate fra loro, con circa 2/3 delle ore in laboratorio.
Include lo svolgimento di esercitazioni in Java e in Python, che costituiscono parte della prova d'esame (ved. modalita' di esame e di accertamento).

INIZIO LEZIONI

In accordo con il calendario accademico approvato dal Consiglio di Corsi di Studi.
 

Orari delle lezioni

L'orario di tutti gli insegnamenti è consultabile su EasyAcademy.

ESAMI

MODALITA' D'ESAME

L'esame consiste in: esercitazioni da svolgere e consegnare durante il semestre, e  una prova orale.
Le esercitazioni valgono per tutto l'anno accademico, fino a settembre 2022 compreso.

MODALITA' DI ACCERTAMENTO

Durante il semestre sono date delle esercitazioni pratiche, una in Java e una in Python.
Tali esercitazioni sono da svolgersi a gruppi di due studenti e prevedono la consegna del codice e di documentazione scritta. Sara' valutata la correttezza e la qualita' del codice e della documentazione.
La scadenza ultima per la consegna e' di norma entro la fine del semestre. Alla consegna dell'esercitazione segue una breve discussione informale (anche svolta in modo telematico) nella quale i due autori dovranno presentarne i punti salienti.

L'orale consiste in domande sul contenuto dell'insegnamento e puo' includere la scrittura di esempi in codice o pseudocodice. Lo studente dovra' mostrare di aver compreso i concetti e di essere in grado di applicare le tecniche studiate