INFORMATICA E LABORATORIO DI PROGRAMMAZIONE
cod. 1007069

Anno accademico 2019/20
1° anno di corso - Primo semestre
Docente
Alberto FERRARI
Settore scientifico disciplinare
Sistemi di elaborazione delle informazioni (ING-INF/05)
Ambito
Matematica, informatica e statistica
Tipologia attività formativa
Base
72 ore
di attività frontali
9 crediti
sede: PARMA
insegnamento
in ITALIANO

Obiettivi formativi

L’obiettivo del corso è fornire allo studente la capacità di comprendere i principi dell'informatica e della programmazione:
* Rappresentazione dei dati
* Computazione, linguaggi e macchine astratte
* Architettura dei sistemi di elaborazione
* Paradigma di programmazione ad oggetti
* Introduzione all'ingegneria del software

Le capacità di applicare le conoscenze elencate riguardano lo sviluppo del cosiddetto "pensiero computazionale":
* Scomposizione di problemi complessi
* Soluzione di problemi tramite ricorsione
* Composizione di oggetti in sistemi complessi
* Modellazione con diversi livelli di astrazione

Prerequisiti

Nessuna propedeuticità. Si suppone comunque che lo studente conosca le basi dell'uso del computer e di Internet - l'equivalente dei moduli 1, 2, 3 e 7 del Syllabus ECDL (European Computer Driving Licence).

Contenuti dell'insegnamento

1. Introduzione alla programmazione
1.1. Programmazione strutturata
1.2. Collezioni e flussi di dati
1.3. Funzioni e ricorsione
1.4. Oggetti e astrazioni
1.5. Interfacce grafiche

2. Introduzione all'informatica
2.1. Rappresentazione dei dati
2.2. Concetto di computazione
2.3. Sistemi di elaborazione
2.4. Sviluppo del software

Programma esteso

1. Introduzione alla programmazione (24 ore, in aula + 24 ore, in lab)
1.1. Programmazione strutturata
1.1.1. Struttura di un programma
1.1.2. Variabili e tipi, espressioni
1.1.3. Condizioni
1.1.4. Cicli
1.1.5. Annidamento
1.2. Collezioni e flussi di dati
1.2.1. Vettori
1.2.2. Matrici
1.2.3. Mappe
1.2.4. Operazioni di I/O su console e file
1.3. Funzioni e ricorsione
1.3.1. Passaggio dei parametri
1.3.2. Ambito delle variabili
1.3.3. Stack e record di attivazione
1.3.4. Ricorsione
1.4. Oggetti e astrazione
1.4.1. Incapsulamento
1.4.2. Composizione
1.4.3. Allocazione dinamica
1.4.4. Ereditarietà e polimorfismo
1.4.5. Principio di sostituibilità
1.5. Interfacce grafiche
1.5.1. Elementi di base
1.5.2. Disposizione degli elementi
1.5.3. Segnali ed eventi
1.5.4. Animazioni

2. Introduzione all'informatica (24 ore, in aula)
2.1. Rappresentazione dei dati
2.1.1. Numeri in complemento a due ed in virgola mobile, algebra booleana
2.1.2. Rappresentazione del testo, codifica ASCII ed Unicode
2.1.3. Documenti strutturati ed HTML
2.1.4. Rappresentazione di immagini e suoni
2.2. Concetto di computazione
2.2.1. Automi a stati finiti
2.2.2. Espressioni regolari
2.2.3. Macchina di Turing, architettura di von Neumann
2.2.4. Linguaggi e paradigmi di programmazione
2.2.5. Complessità computazionale, algoritmi di ricerca e di ordinamento
2.3. Sistemi di elaborazione
2.3.1. Architettura dei calcolatori
2.3.2. Sistemi operativi
2.3.3. Sistemi informativi e basi di dati
2.3.4. Reti di calcolatori e World Wide Web
2.4. Sviluppo del software
2.4.1. Metodologie di sviluppo e qualità del software
2.4.2. Contratti
2.4.3. Collaudo
2.4.4. Gestione delle versioni

Bibliografia

- Informatica e Laboratorio di Programmazione (A.A. 2019-2020). McGraw-Hill custom publishing. ISBN 978-13-074-5700-1 (27€, nelle librerie universitarie )
- A.B. Downey et al.: How to Think Like a Computer Scientist: Learning with Python 3, 3rd Edition - http://openbookproject.net/thinkcs/
- M. Beri: Python, Apogeo Pocket, 2010, 978-8850329151 (~8€)
- A.B. Downey: How to Think Like a Computer Scientist C++ Version - http://greenteapress.com/thinkcpp/

Metodi didattici

Lezioni in aula, con l'ausilio di slide rese disponibili in anticipo agli studenti. Soluzione guidata di esercizi in aula. Esercizi di programmazione in laboratorio.

Le esercitazioni in laboratorio sono centrali per il corso. Gli esercizi proposti vertono sugli stessi argomenti generali delle lezioni in aula. L'obiettivo è di introdurre i principi della programmazione orientata agli oggetti, guidando lo studente alla soluzione di problemi con un livello di complessità crescente.

Modalità verifica apprendimento

Esercitazioni e progetti di laboratorio. Test sui contenuti teorici. Verifica scritta.

Altre informazioni

- - -

Obiettivi agenda 2030 per lo sviluppo sostenibile

- - -