Insegnamento
|
CFU
|
SSD
|
Ore Lezione
|
Ore Eserc.
|
Ore Lab
|
Ore Studio
|
Attività
|
Lingua
|
1015887 -
BASI DI DATI
(obiettivi)
Al termine del corso gli studenti posseggono le conoscenze di base relative: - alla teoria dei gruppi; - alla struttura algebrica di alcuni semplici tipi di gruppi; - alla risoluzione di sistemi di equazioni lineari; - al problema della diagonalizzazione di operatori lineari su spazi vettoriali di dimensione finita. Al termine del corso gli studenti sono in grado di: - eseguire calcoli all’interno di gruppi; - risolvere sistemi di equazioni lineari; - deteminare autovalori ed autovettori di un operatore lineare ed, eventualmente, di diagonalizzarlo.
|
|
-
II MODULO
(obiettivi)
Obiettivi generali: Esporre gli studenti a solide metodologie di progettazione e realizzazione di applicazioni per basi di dati
Obiettivi specifici: Esporre gli studenti a metodologie formali e scalabili per l'analisi concettuale e la progettazione di applicazioni per basi di dati e a tecnologie standard per la realizzazione di basi di dati relazionali. Conoscenza e comprensione: Gli studenti acquisiranno conoscenze metodologiche fondamentali per la progettazione di applicazioni per basi di dati non banali (in particolare per le fasi di: a) raccolta dei requisiti; b) analisi concettuale dei dati e delle funzionalità; c) progettazione della base dati e delle funzionalità) e per la loro realizzazione (utilizzo di DBMS relazionali e del linguaggio SQL).
Applicare conoscenza e comprensione: Gli studenti saranno in grado di applicare in modo efficace le conoscenze indicate al punto precedente in progetti reali di applicazioni per basi non banali.
Capacità critiche e di giudizio: Gli studenti saranno in grado di prendere autonomamente decisioni razionali in tutte le fasi del processo di progettazione di applicazioni per basi di dati.
Capacità comunicative: Gli studenti saranno in grado di interagire in modo proficuo con i committenti (per quanto concerne la raccolta dei requisiti) e con altri analisi e progettisti (per quanto concerne le attività di analisi e progettazione di sistemi software non banali).
Capacità di apprendimento: Gli studenti saranno in grado di ampliare le loro conoscenze in modo autonomo consultando, secondo necessità, manualistica tecnica nell'ambito della progettazione di applicazioni per basi di dati.
-
MANCINI TONI
( programma)
1. Introduzione e cenni di ingegneria del software: attori e ciclo di vita del software
2. Analisi concettuale dei requisiti:
2.1. Analisi dei requisiti sui dati mediante diagrammi ER 2.2. Analisi dei requisiti sulle funzionalità mediante diagrammi UML degli use-case 2.3. Formalizzazione della semantica dei diagrammi ER mediante logica del primo ordine e specifiche formali dei vincoli sui dati non esprimibili in ER mediante formule in logica del primo ordine 2.4. Specifiche formali delle funzionalità (operazioni di use-case) mediante pre- e post-condizioni espresse in logica del primo ordine
3. Progettazione di basi di dati relazionali e di applicazioni per basi di dati a partire dall'output della fase di Analisi concettuale dei requisiti:
3.1. Progettazione di una base dati relazionale con vincoli a partire da un diagramma ER concettuale con vincoli esterni e informazioni sul carico di lavoro e sui volumi dei dati 3.2. Progettazione delle funzionalità di un'applicazione di basi di dati mediante algoritmi in pseudo-codice e comandi in linguaggio SQL, a partire dalle specifiche formali delle funzionalità 3.3. Il linguaggio SQL: domini, istruzioni select-from-where-group by-having-order by, operatori aggregati, interrogazioni nidificate, operatori insiemistici, istruzioni insert, delete, update, create/drop domain, create/drop table, vincoli di chiave e di integrità referenziale, clausole check, trigger, viste, controllo dell'accesso, transazioni, indici.
Materiale didattico reso disponibile dal docente.
|
6
|
INF/01
|
36
|
-
|
-
|
-
|
Attività formative caratterizzanti
|
ITA |
1015888 -
PROGETTAZIONE DI ALGORITMI
(obiettivi)
Obiettivi generali
Acquisire la conoscenza di base delle più note tecniche algoritmiche di progettazione e delle tecniche di valutazione della correttezza e della complessità degli algoritmi.
Obiettivi specifici
Conoscenza e comprensione: Al termine del corso gli studenti posseggono le conoscenze di base relative a: - tecniche fondamentali di progettazione algoritmica; - analisi della correttezza e della efficienza degli algoritmi;
Applicazione di conoscenza e comprensione: Al termine del corso gli studenti sono in grado di: - analizzare le prestazioni di un algoritmo tramite strumenti matematici rigorosi; - analizzare algoritmi e strutture dati - progettare ed analizzare nuovi algoritmi, sfruttando le metodologie presentate durante il corso.
Autonomia di giudizio: Lo studente alla fine del corso deve essere in grado di scegliere autonomamente qual’è la tecnica algoritmica più adatta da applicare per un determinato problema e valutare tra più soluzioni algoritmiche per un certo problema qual’è da preferirsi.
Abilità comunicative: Lo studente acquisirà la capacità di esprimere un’idea algoritmica tramite l’uso di uno pseudocodice.
Capacità di apprendimento: Lo studente avrà acquisito la capacità di analizzare un problema, progettare le necessarie strutture dati e un algoritmo corretto ed efficiente che lo risolva.
-
MONTI ANGELO
( programma)
Il corso prosegue il cammino iniziato al primo anno con Introduzione agli algoritmi. Il corso è diviso in tre parti. La prima parte riguarda i grafi e le visite (DFS e BFS). Nella seconda parte di trattano due tecniche di progettazione ( greedy and divide-et-impera) che funzionano bene per particolari tipi di problemi e si parla anche di euristiche come metodo per affrontare problemi particolarmente difficili. Nella terza parte si illustrano la programmazione dinamica e il backtraking, due tecniche potenti e generali. Tutte le tecniche sono illustrate tramite esempi significativi.
T.H. Cormen, C.Papadimitriou, U. Vazirani. Introduzione agli algoritmi J. Kleinberg, E. Tardos Algorithm Design S. Dasgupta, C. Papadimitriou, U. Vazirani Algorithms C. Demetrescu, I. Finocchi, G.F. Italiano Algoritmi e strutture dati
(Date degli appelli d'esame)
|
9
|
INF/01
|
54
|
-
|
-
|
-
|
Attività formative caratterizzanti
|
ITA |
1015889 -
RETI DI ELABORATORI
(obiettivi)
Obiettivi generali: Imparare le basi delle reti di elaboratori moderne e Internet.
Obiettivi specifici:
Conoscenza e comprensione: Conoscenza e comprensione dei protocolli dei livelli applicazione, trasporto, rete e collegamento della pila TCP/IP.
Applicazione di conoscenza e comprensione: Capacità di comprendere qualsiasi protocollo coinvolto nella comunicazione TCP/IP Capacità di comprendere strumenti e tecniche per risolvere problemi di rete Capacità di usare servizi di rete come DNS e DHCP che permettono di far funzionare una rete
Autonomia di giudizio: Individuare problemi di rete Valutare la realizzazione di nuovi servizi
Abilità comunicative: Capacità di descrivere le reti in termini strutturali secondo il modello a 5 livelli.
Capacità di apprendimento successivo: Il corso fornisce le basi per poter apprendere nozioni di reti wireless e Internet of Things.
-
MASELLI GAIA
( programma)
- Introduzione alle reti e allo stack protocollare TCP/IP. - Capacità e prestazioni delle reti. - Livello Applicazione: paradigmi client-server, P2P, ibrido. Protocolli HTTP, DNS, FTP, SMTP. - Livello di Trasporto: servizi del livello di trasporto. Interfaccia Socket. Protocollo UDP. Meccanismi Stop and wait, Go-Back-N e Ripetizione Selettiva. Protocollo TCP. Controllo del flusso. Controllo della congestione. - Livello di rete: Routing, forwarding. Struttura di un router. Protocolli IPv4, DHCP, NAT, ICMP, OSPF, RIP, BGP. Routing multicast. IPv6. - Livello di collegamento: servizi offerti, sottolivelli DLC e MAC. Protocolli MAC: TDMA, FDMA, ALOHA, Slotted ALOHA, CSMA, CSMA/CD, Polling, Token passing). Indirizzamento, Protocollo ARP, Ethernet,VLAN, PPP. - Sicurezza di rete: crittografia simmetrica, asimmetrica, message digest, firma digitale. Sicurezza delle reti LAN: firewall, Intrusion detection. - Introduzione alle LAN wireless: Protocollo CDMA, Bluetooth, Reti cellulari.
1. Behrouz A. Forouzan e Firouz Mosharraf, "Reti di Calcolatori Un approccio top down", version italiana, Mc Graw Hill, marzo 2013 2. Jim Kurose, Keith Ross, "Computer Networking a Top-Down Approach", 6th edition, Pearson
(Date degli appelli d'esame)
|
9
|
INF/01
|
54
|
-
|
-
|
-
|
Attività formative caratterizzanti
|
ITA |
1020422 -
SISTEMI OPERATIVI
(obiettivi)
Obiettivi generali: Il corso ha come obiettivi i concetti, la struttura, e i meccanismi dei sistemi operativi. Verranno trattate caratteristiche fondamentali, presenti fin dai sistemi più tradizionali, ma anche peculiarità dei sistemi moderni che nascono come conseguenza dell’evoluzione ricorrente della tecnologia. Conoscere ed usare l'interfaccia di programmazione fra sviluppatore software e kernel relativamente ai servizi base di accesso alle risorse del sistema operativo Linux.
Obiettivi specifici: Caratteristiche e concetti dei sistemi operativi moderni, con particolare riferimento ai sistemi Unix e Linux. Si inizierà con una descrizione dell’evoluzione dei sistemi operativi nel tempo, per continuare con concetti fondamentali come i processi, lo stallo, e relativi meccanismi di prevenzione, la concorrenza tra processi, la gestione della memoria, processore e I/O, i file system e la sicurezza. Conoscere i concetti (processi, espressioni regolari, file system) e i comandi shell più importanti di Linux. Saper creare script in Bash. Saper scrivere programmi C che usino le system call di Linux.
Conoscenza e comprensione: Capire in modo profondo come i sistemi operativi danno supporto all’esecuzione dei programmi degli utenti e gestiscono le periferiche hardware di un computer. Metodi e tecniche fondamentali per la rappresentazione dei processi in memoria e la gestione efficiente di multiprogrammazione—molteplici processi eseguiti contemporaneamente in un sistema con risorse limitate. Conoscenza del funzionamento interno del sistema operativo Linux. Conoscenza del funzionamento della shell Bash. Fondamenti del linguaggio C. Conoscenza delle principali system call di Linux.
Applicare conoscenza e comprensione: Progettare programmi a livello utente e di sistema in modo efficiente e sicuro. Saper creare script in Bash in grado di risolvere problemi pratici. Saper scrivere programmi in C che sfruttino le system call di Linux per ottimizzare l'uso delle risorse.
Capacità critiche e di giudizio: Essere in grado di predire l’uso delle risorse richieste da un programma, di scoprire una possibile situazione di stallo in un sistema multiprogrammato, garantire la mutua esclusione tra processi e l’accesso protetto a zone di memoria o risorse sensibili. Saper valutare la soluzione più appropriata per ottenere un determinato risultato, usando o singoli comandi shell, o uno script Bash, o un programma C basato su system call di Linux.
Capacità comunicative: Saper comunicare in modo chiaro e preciso le caratteristiche dei sistemi operativi e i loro meccanismi di supporto software/hardware. Essere in grado di comunicare e documentare script Bash e programmi C basati su system call di Linux.
Capacità di apprendimento: Saper sfruttare la conoscenza acquisita nella progettazione di sistemi e di programmi utente nel modulo successivo del corso. Essere in grado di usare questa conoscenza nell’apprendimento di proprietà di sistemi più complessi come quelli distribuiti e cloud. Essere in grado di usare i concetti appresi in corsi avanzati da sistemista aziendale, o in un eventuale corso avanzato che richieda interazione con Linux, come ad es.: programmazione di sistema, cloud computing, sistemi distribuiti, cybersecurity.
|
|
-
II MODULO
(obiettivi)
Obiettivi generali: Conoscere ed usare l'interfaccia di programmazione fra sviluppatore software e kernel relativamente ai servizi base di accesso alle risorse del sistema operativo Linux.
Obiettivi specifici: Conoscere i concetti (processi, espressioni regolari, file system) e i comandi shell più importanti di Linux. Saper creare script in Bash. Saper scrivere programmi C che usino le system call di Linux.
Conoscenza e comprensione: Conoscenza del funzionamento interno del sistema operativo Linux. Conoscenza del funzionamento della shell Bash. Fondamenti del linguaggio C. Conoscenza delle principali system call di Linux.
Applicare conoscenza e comprensione: Saper creare script in Bash in grado di risolvere problemi pratici. Saper scrivere programmi in C che sfruttino le system call di Linux per ottimizzare l'uso delle risorse.
Capacità critiche e di giudizio: Saper valutare la soluzione più appropriata per ottenere un determinato risultato, usando o singoli comandi shell, o uno script Bash, o un programma C basato su system call di Linux.
Capacità comunicative: Essere in grado di comunicare e documentare script Bash e programmi C basati su system call di Linux.
Capacità di apprendimento: Essere in grado di usare i concetti appresi in corsi avanzati da sistemista aziendale, o in un eventuale corso avanzato che richieda interazione con Linux, come ad es.: programmazione di sistema, cloud computing, sistemi distribuiti, cybersecurity
-
MELATTI IGOR
( programma)
Introduzione a Unix/Linux
concetti di base, file system, processi, espressioni regolari, comandi shell
Bourne Again Shell
uso dei più importanti comandi: ls, find, man, ps, gawk, sed, echo, cd, touch etc
espansioni della bash, scripting in bash
Programmazione di sistema
introduzione al C
compilatore e make, programmi eseguibili, librerie, debugger
system call Linux per la gestione di: memoria, file, processi, segnali, pipe, fifo, socket
G. Glass, K. Ables: Linux for Programmers and Users, Prentice Hall
F. C. A. Johnson, Pro Bash Programming (Scripting the GNU/Linux Shell), Apress
B. Kernighan, D. Ritchie, Il Linguaggio C, Jackson Libri
|
6
|
INF/01
|
36
|
-
|
-
|
-
|
Attività formative caratterizzanti
|
ITA |