PROGRAMMAZIONE DI APPLICAZIONI SOFTWARE

Docenti: 
FERRARI ALBERTO
Codice dell'insegnamento: 
10913*17037*2017*2017*9999
Crediti: 
9
Sede: 
PARMA
Anno accademico di offerta: 
2017/2018
Settore scientifico disciplinare: 
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI (ING-INF/05)
Semestre dell'insegnamento: 
Secondo Semestre
Lingua di insegnamento: 

ITALIANO

Obiettivi formativi

L’obiettivo del corso è di introdurre gli studenti alle problematiche legate alla programmazione di applicazioni software, con una panoramica di tutte le componenti e le problematiche di sistemi software complessi:
* Architettura dei sistemi di elaborazione
* Componenti principali dei sistemi operativi
* Paradigma di programmazione ad oggetti
* Strutture dati e algoritmi notevoli
* Multiprogrammazione
* Interazione fra processi

Prerequisiti

Nessuna propedeuticità. Si suppone comunque che lo studente abbia seguito il corso di “Informatica e laboratorio di programmazione” e sia in grado di sviluppare semplici applicazioni in linguaggio C++

Contenuti dell'insegnamento

1. Architettura degli elaboratori
2. Sistemi operativi
3. Programmazione orientata agli oggetti
4. Strutture dati e algoritmi notevoli
5. Sviluppo di applicazioni in ambiente locale e applicazioni distribuite

Programma esteso

1. Architettura degli elaboratori
1.1 CPU
1.2 Registri
1.3 Memorie
1.4 I/O
1.5 Canali di comunicazione
2. Sistemi operativi
2.1 Gestione delle risorse
2.2 Gestione della memoria
2.3 Multiprogrammazione
2.3.1 Processi
2.3.1.1 Cooperazione
2.3.1.2 Competizione
2.3.2 Thread
3. Programmazione orientata agli oggetti
3.1 Incapsulamento
3.2 Composizione
3.3 Ereditarietà
3.4 Polimorfismo
4. Strutture dati e algoritmi notevoli
4.1 Strutture dati lineari
4.2 Liste, Pile, Code
4.3 Alberi
4.4 Grafi
5. Sviluppo di applicazioni in ambiente locale e applicazioni distribuite
5.1 Gestione dei processi
5.2 Thread
5.3 client/server
5.4 peer to peer

Bibliografia

Robert Sedgewick, “Algoritmi in C++”, terza ed., Addison-Wesley, 2003
Carl Hamacher, Zvonko Vranesic, Safwat Zaky, “Introduzione all'architettura dei calcolatori”, seconda ed., McGraw-Hill, 2007
Clifford A. Shaffer, Data Structures and Algorithm Analysis Edition 3.2 (C++ Version) [https://people.cs.vt.edu/shaffer/Book/C++3elatest.pdf]
Anthony Williams, C++ Concurrency in Action: Practical Multithreading, Manning, 2012

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 affrontare le problematiche legate alla programmazione di applicazioni software, guidando lo studente alla soluzione di problemi con un livello di complessità crescente.
Come trama continua del corso, agli studenti verrà proposto lo sviluppo incrementale di un'applicazione e, facendo leva sui suoi requisiti, sul suo sviluppo e sulla sua ottimizzazione, verranno recuperati o introdotti concetti fondamentali della programmazione object oriented, della multiprogrammazione e dell’interazione tra processi.

Modalità verifica apprendimento

L'esame consiste di una prova sui concetti teorici (brevi esercizi e quiz) e una prova di programmazione (lo sviluppo o il completamento di un’applicazione software da sviluppare in laboratorio), eventualmente seguita da una prova orale integrativa. È previsto l'utilizzo di prove di valutazione in itinere.