Piano degli studi di Informatica

INFORMATICA

Corso di laurea

Piano di Studi

Primo anno

  • Algebra lineare (6 cfu)

    • Conoscenze Questo corso è dedicato allo studio dell’algebra lineare di base: spazi vettoriali, applicazioni lineari, sistemi lineari e matrici. Syllabus -Numeri complessi. -Sistemi lineari. -Matrici. -Spazi vettoriali, sottospazi vettoriali, dimensione e basi. -Applicazioni lineari, nucleo e immagine, rango e determinante. -Autovalori e autovettori. -Polinomio caratteristico e diagonalizzabilità. -Ortogonalizzazione di Gram-Schmidt.
  • Fondamenti dell'Informatica (9 cfu)

    • Conoscenze L'insegnamento è indirizzato all'acquisizione delle conoscenze insiemistiche, logiche e delle strutture discrete, essenziali per lo studio dell’informatica. I meccanismi illustrati sono alla base dei ragionamenti informatici che verranno illustrati negli altri insegnamenti. Syllabus -Teoria degli insiemi, calcolo combinatorio, cenni di probabilità discreta. -Strutture discrete: sequenze, alberi, automi e grammatiche, grafi. -Principio di induzione e ricorsione: applicazione alle strutture discrete. -Calcolo proposizionale e cenni di logica del prim’ordine.
  • Laboratorio I (12 cfu)

    • Conoscenze Gli studenti acquisiranno una buona conoscenza dei principali strumenti di sviluppo a supporto della programmazione come debugger, sistemi di versioning, testing. Saranno in grado di scrivere codice corretto in un linguaggio di programmazione, individuando le strutture date più adeguate alla rappresentazione degli input dei problemi proposti per una loro efficace ed efficiente manipolazione. Lo studente sarà in grado di utilizzare svariati formati di input e di output per affrontare problemi di dimensioni reali. Per raggiungere queste competenze agli studenti verranno fornite conoscenze di base del sistema operativo Linux e di alcune shell da linea di comando. Syllabus -Linux, Bash strumenti di supporto alla programmazione, debugging e testing. -Repository di software e versioning (come ad es. Git), ambienti di sviluppo. -Implementazione di problemi di complessità crescente (anche collegati ad Analisi e a Fondamenti di Informatica Teorica). Prime problematiche legate alla rappresentazione dell’informazione numerica. -Debugging e Testing di programmi. -Implementazione di algoritmi su Alberi, Grafi, Grammatiche, Linguaggi, Dizionari e Tabelle Hash per manipolare e fare parsing di grosse quantità di dati importate da file.
  • Conoscenza della lingua inglese (3 cfu)

  • Analisi matematica (12 cfu)

    • Conoscenze Questo corso è dedicato allo studio dell'analisi matematica: limiti, continuità, calcolo differenziale e integrazione, successioni, serie e funzioni di più variabili. Syllabus -Generalità su insiemi numerici e funzioni. -Continuità. -Limiti. -Calcolo differenziale in una variabile. -Successioni. -Integrale di Riemann in una variabile. -Integrali impropri. -Serie numeriche. -Generalità sulle funzioni di più variabili. -Calcolo differenziale in più variabili. -Massimi e minimi liberi e vincolati.
  • Programmazione e Algoritmica (15 cfu)

    • Conoscenze L’insegnamento introduce lo studente ai principi, agli strumenti e alle tecniche della programmazione di applicazioni informatiche, acquisendo la capacità di risolvere problemi computazionali. Le tecniche di base per calcolare il costo computazionale degli algoritmi permettono di progettare e implementare soluzioni efficienti ai problemi computazionali, qualora possibile: la difficoltà computazionale di alcuni problemi viene illustrata attraverso la discussione di alcune classi fondamentali (P vs NP). Syllabus - Struttura di un calcolatore e ambienti di sviluppo. Analisi asintotica del costo computazionale. Rappresentazione delle informazioni. Problemi computazionali e algoritmi di risoluzione. - Controllo delle operazioni e del flusso all’interno di un programma. Problem solving su array. Algoritmi per ordinamento e ricerca. - Strutture di dati dinamiche. Liste. Code e pile. Tabelle hash e dizionari. - Blocco e struttura dei programmi. Funzioni, passaggio dei parametri. - Ricorsione, divide et impera, programmazione dinamica, algoritmi greedy. - Algoritmi per alberi e grafi. - Cenni di calcolabilità e di classi di complessità.
  • Secondo anno

  • Laboratorio II (12 cfu)

    • Conoscenze Gli studenti acquisiranno una buona conoscenza della programmazione di sistema, e in particolare con i principi della programmazione assembler, della programmazione multiprocesso e multithread. Inoltre, durante le attività di laboratorio, lo studente avrà anche modo di analizzare e validare sperimentalmente tecniche e strumenti per la risoluzione numerica di problemi. Syllabus -Integrazione mediante scripting. -Programmazione assembler. -Programmazione multiprocesso e multithread. -Analisi e validazione sperimentale di tecniche e strumenti per la risoluzione numerica di problemi.
  • Architetture e Sistemi Operativi (15 cfu)

    • Conoscenze Gli studenti acquisiranno una buona conoscenza dei fondamenti scientifici e tecnologici delle architetture dei sistemi di elaborazione che permetterà loro di capire le caratteristiche dei diversi livelli dei sistemi di elaborazione, le loro relazioni con gli strumenti di programmazione e la strutturazione dei sistemi in termini di moduli concorrenti e cooperanti. Inoltre, lo studente acquisirà conoscenze relative ai concetti principali dei sistemi operativi e della loro realizzazione nei sistemi reali. In particolare, verranno presentate le tecniche che consentono di coordinare e gestire le risorse di un sistema di elaborazione e che permettono di trasformare la macchina fisica in una macchina astratta, dotata di funzionalità più convenienti per l'utente. Infine, il corso intende fornire le conoscenze di base relative alla programmazione C con chiamate di sistema Unix/POSIX. In particolare, vengono prese in considerazione le chiamate standard per il trattamento di file e directory, processi, thread, segnali, pipe, socket e vari meccanismi di sincronizzazione. Syllabus -Fondamenti dei sistemi di elaborazione. -Livello Firmware. Livello della macchina assembler. Livello dei processi -Architettura base e performance del processore. -Gerarchie di memoria. -Fondamenti di sistemi paralleli. Parallelismo a livello di istruzioni (ILP). -Introduzione ai multiprocessori. -Struttura e nucleo dei sistemi operativi. -Concorrenza, processi e thread. -Sincronizzazione tra processi e thread; problemi classici e stallo. -Scheduling. -Gestione della memoria a livello di sistema operativo. -File system. -Casi di studio di sistemi operativi: Unix/Linux e Windows.
  • Calcolo numerico (6 cfu)

    • Conoscenze Apprendimento delle tecniche e degli strumenti per la risoluzione numerica di problemi che scaturiscono nelle applicazioni della matematica. L'enfasi è posta sull'analisi degli aspetti computazionali, quali il condizionamento dei problemi esaminati, la stabilità e la complessità dei metodi proposti. L’insegnamento prevede l'ausilio di Python/MATLAB per introdurre lo studente all'analisi sperimentale degli algoritmi e alla validazione dei risultati. Syllabus -Rappresentazione dei numeri in base, aritmetica di macchina, generazione degli errori. Errore inerente ed algoritmico nel calcolo di una funzione razionale, studio dell'errore algoritmico mediante l'uso di grafi. Gli ambienti MATLAB, Octave e Python. -Richiami di algebra lineare. Norme vettoriali. Norme matriciali, norma 1,2, “inf”'. Localizzazione degli autovalori di una matrice: il teorema di Gershgorin. -Risoluzione numerica di sistemi lineari. Condizionamento del problema. Sistemi lineari con matrice triangolare. Matrici elementari di Gauss. Il metodo di fattorizzazione LU. Il metodo di eliminazione di Gauss. Tecniche di pivoting. Metodi iterativi per sistemi lineari: generalità ed analisi della convergenza. Il metodo di Jacobi e di Gauss--Seidel; condizioni sufficienti per la convergenza. -Calcolo di autovalori ed autovettori: il metodo delle potenze. -Risoluzione numerica di equazioni non lineari. Il metodo di bisezione. Metodi di iterazione funzionale: il teorema del punto fisso. Metodo delle tangenti. Polinomi algebrici: condizionamento del calcolo di uno zero semplice, matrice companion. -Approssimazione di Dati e Funzioni. Interpolazione polinomiale. Esistenza ed unicità del polinomio di interpolazione. Forma di Lagrange del polinomio di interpolazione. Resto dell'interpolazione polinomiale. Regressione lineare. Quadratura numerica. Generalità sulle formule di Newton--Cotes. Formula dei trapezi composta: analisi del resto dell'integrazione.
  • Statistica (6 cfu)

    • Conoscenze L’insegnamento presenta i concetti e gli strumenti fondamentali del calcolo delle probabilità e della statistica inferenziale. Lo studente acquisirà conoscenza delle nozioni di variabile casuale, distribuzione di probabilità, modello statistico, inferenza parametrica, stima di intervalli di confidenza, test d'ipotesi. Lo studente saprà utilizzare il linguaggio R per l’analisi statistica dei dati. Syllabus -Statistica descrittiva -Variabili aleatorie discrete e con densità. -Distribuzioni di probabilità. -Legge dei grandi numeri. Teorema limite centrale. -Densità chi-quadro e di Student. -Inferenza statistica. -Intervalli di fiducia e test di ipotesi. -Linguaggio e sistema R per l’analisi statistica.
  • Paradigmi di programmazione (9 cfu)

    • Conoscenze Il corso si propone di trattare gli aspetti principali relativi ai paradigmi di programmazione object-oriented, funzionale e concorrente, discutendo anche come questi paradigmi siano integrati nei principali linguaggi di programmazione. Nel corso, oltre a descrivere un linguaggio object-oriented di riferimento (ad es. Java) e un linguaggio funzionale di riferimento (da definire), si farà riferimento ad altri linguaggi per illustrare come alcuni concetti abbiano trovato realizzazioni diverse in linguaggi diversi. Al termine del corso, lo studente conosce i principali paradigmi di programmazione, ha imparato a ragionare sulle caratteristiche dei linguaggi di programmazione e ha acquisito le competenze che gli possono consentire di comprendere in autonomia il funzionamento di un nuovo linguaggio di programmazione. Syllabus -Elementi di compilazione e interpretazione. -Gestione della memoria nei linguaggi di programmazione. -Paradigma di programmazione object-oriented. -Paradigma di programmazione funzionale. -Paradigma di programmazione concorrente. -Elementi di programmazione a eventi. -Elementi di metaprogrammazione.
  • Ricerca operativa (6 cfu)

    • Conoscenze Il corso presenta gli strumenti necessari alla costruzione e alla risoluzione di modelli analitici di ottimizzazione per problemi reali, tipicamente di gestione, di allocazione delle risorse e di logistica. Verranno illustrate le proprietà teoriche ed alcune delle principali tecniche algoritmiche per la soluzione di tre grandi classi di problemi di ottimizzazione: problemi di flusso su reti, di programmazione lineare e di programmazione lineare intera. Syllabus -Problemi decisionali e problemi di ottimizzazione. Classi di problemi. -Modelli e loro formulazione. -Grafi e Reti di flusso. -Programmazione Lineare. -Programmazione Lineare Intera.
  • 6 cfu a scelta nel gruppo Libera scelta I

    • attività a libera scelta
    • Simulazione (6 cfu)

      • Il corso si propone di fornire gli strumenti di base per la costruzione e l'utilizzo di modelli di simulazione. Dopo un'introduzione alla simulazione saranno presentate le principali tecniche di simulazione, con particolare attenzione alla simulazione discreta. Una parte consistente del corso sarà dedicata alle metodologie statistiche per l'analisi dei dati di input e di output. Nell'ultima parte del corso saranno presentati i principali concetti della System Dynamics edella simulazione per agenti autonomi. Syllabus: -Modelli di simulazione -Simulazione discreta -Simulazione ad eventi discreti -Funzioni di distribuzione e test statistici -Distribuzioni empiriche e numeri pseudocasuali -Scelta dei dati di input -Analisi dei dati di output -Simulazione continua -Sistemi di equazioni differenziali -Dinamica dei sistemi
    • Fisica (6 cfu)

      • Introduzione ai principi e al metodo scientifico della fisica classica. Sistemi di riferimento e coordinate, cinematica e dinamica dei sistemi elementari nella modellazione newtoniana. Simmetria, invarianza e leggi di conservazione. Modellazione dei processi della dinamica dei punti materiali e dei fenomeni elettromagnetici. Modellazione di processi naturali deterministici.
    • Esame a libera scelta dello studente I (6 cfu)

    • Algebra (6 cfu)

      • Conoscenze Il corso si pone l'obiettivo di fornire conoscenze dell’aritmetica degli interi, dei polinomi e dei gruppi e campi finiti. Syllabus -Congruenze e classi di resto. -Teorema di Fermat e di Eulero. -Proprietà elementari dei gruppi abeliani finiti. -Anelli di polinomi con coefficienti in un campo e loro quozienti. -Campi finiti.
  • Terzo anno

  • Basi di dati (6 cfu)

    • Conoscenze Il corso introduce le nozioni principali relative ai sistemi di gestione di basi di dati: progettazione a oggetti e relazionale, teoria della normalizzazione, interrogazione tramite SQL, cenni sull’architettura dei sistemi. Al termine del corso lo studente sarà in grado di progettare una base di dati, interrogarla usando il linguaggio SQL, e sarà in grado di discutere in maniera competente temi trattati nel corso. Syllabus -Basi di dati e sistemi per la gestione di basi di dati (DBMS), definizione e funzionalità -La progettazione di basi di dati usando il modello a oggetti. -Il modello dei dati relazionale. -La trasformazione di schemi a oggetti in schemi relazionali. -Il linguaggio SQL, con speciale enfasi alla scrittura di interrogazioni e alla relazione di questa con la logica del primo ordine. -La teoria della normalizzazione relazionale. -Architettura dei DBMS: piani di accesso e gestione delle transazioni. -Sistemi NoSQL.
  • Reti e laboratorio III (9 cfu)

    • Conoscenze Il corso si propone di fornire le nozioni teoriche e metodologiche di base per la comprensione dei modelli di riferimento, in particolare dell’architettura a livelli e dei principali protocolli di ciascun livello dello stack TCP/IP e conoscenze pratiche per la programmazione in ambiente di rete. Una parte del corso è dedicata alla progettazione e allo sviluppo di un'applicazione distribuita. Syllabus Sono introdotti i fondamenti delle reti di calcolatori illustrando applicazioni e protocolli dell'architettura di rete TCP/IP. In particolare i contenuti trattati sono: -Introduzione alle reti di computer e Internet. Concetti di base: packet switching, circuit switching, Internet e organismi di standardizzazione, reti di accesso, metriche (latenza in reti a commutazione di pacchetto, throughput, prodotto rate ritardo) -Modelli stratificati. Modello ISO/OSI. Flusso dell'informazione, incapsulamento/decapsulamento. Stack TCP/IP (dettagliato di seguito). -Livello applicazione (paradigma client-server, applicazioni web, HTTP, FTP, protocolli per servizio di email, Telnet, SSH e port forwarding, DNS). -Livello di trasporto. Servizi livello di trasporto, UDP, TCP (gestione connessione, trasferimento dati affidabile, controllo di flusso, controllo di congestione). -Livello di rete. Introduzione allo strato di rete. Protocollo IP. Instradamento, forwarding, indirizzamento, modello datagram. Frammentazione. Indirizzamento IP. Forwarding diretto e indiretto. ICMP, programma ping e traceroute. Funzioni e architettura di un Router. Algoritmi (distance vector e link state) e protocolli di routing (RIP e OSPF). Sistemi autonomi e routing inter-AS, BGP. Cenni di IPv6, da IPv4 a IPv6: dual stack e tunneling. -Livello data link: cenni su servizi del livello link, ARP, Ethernet, dispositivi di interconnessione, switch (autoapprendimento), cenni su VLAN. -Applicazioni peer to peer, reti p2p centralizzate e decentralizzate, strutturate e non strutturate, esempio: BitTorrent. -Cenni su sicurezza nelle reti: concetti di base, cifratura simmetrica e asimmetrica, firma digitale, protocollo Ipsec, SSL. -Software defined networking: principi, architettura SDN, controller e switch openflow. -Laboratorio: progettazione e sviluppo di un’applicazione distribuita. Programmazione client server e P2P: meccanismi per la comunicazione di rete, formati interoperabili di dati.
  • Orientamento professionale e competenze trasversali in ambito ICT (3 cfu)

    • Il corso prevederà due tipi di attività: seminari e laboratori su competenze trasversali utili per l'inserimento nel mondo del lavoro (soft skills, valorizzazione delle competenze, redazione CV e lettera di presentazione, ecc.) e seminari aziendali. I seminari aziendali, in particolare, saranno mirati a far conoscere agli studenti sia le diverse tipologie di azienda e di figure professionali ricercate in ambito ICT, sia le tecnologie informatiche più usate in ambito aziendale, dando modo agli studenti di approfondirne lo studio in autonomia.
  • Introduzione all'Intelligenza Artificiale (6 cfu)

    • Obiettivi formativi: Apprendere i concetti principali e i metodi che stanno alla base della progettazione e sviluppo di sistemi di intelligenti. 1. Risoluzione dei problemi come ricerca 2. Rappresentazione della conoscenza e ragionamento 3. Ragionamento incerto e probabilistico 4. Apprendimento automatico 5. Applicazioni e prospettive
  • Ingegneria del software (6 cfu)

    • Conoscenze L'obiettivo del corso è fornire agli studenti i concetti relativi ai moderni processi di produzione del software ed i principi dell’ingegneria dei requisiti, delle architetture software, delle metodologie di progettazione. Alla fine del corso lo studente sarà in grado di pianificare lo sviluppo di progetti software e avrà imparato a produrre la specifica completa in termini di modelli UML partendo dai requisiti informali. Avrà inoltre acquisito competenze sul riuso del software, sull’uso dei design patterns e sulla verifica e validazione del software. Syllabus -Analisi dei requisiti. -UML. -Principi di progettazione e pattern architetturali e di dettaglio. -Verifica e validazione.
  • 12 cfu a scelta nel gruppo Complementari

    • Insegnamento complementare
    • Teoria dell'Informazione (6 cfu)

      • Obiettivi Il corso tratta in modo elementare dei Fondamenti della Teoria dell’Informazione, Introducendo concetti come Entropia, Codifica, Compressione correzione di errori, dovrebbe servire come prerequisito per gli studi successivi che trattano la generazione la codifica e la trasmissione dell’informazione. Syllabus • Concetti generali di Teoria dell'Informazione. La funzione entropia. La proprietà di equiripartizione asintotica. • Sorgenti d'informazione discreta. Codifica in assenza di rumore: codici istantanei e codici univocamente decifrabili; il teorema della codifica in assenza di rumore. Costruzione dei codici ottimali: il metodo di Huffman. Codifica aritmetica • Il canale discreto senza memoria. Capacità, Schemi di decisione e probabilità di errore. La codifica del canale. Il teorema fondamentale. • I codici correttori a blocchi. I codici lineari, algoritmi di decodifica, capacità correttiva, probabilità di errore. I Codici ciclici, I codici BCH, i codici di Reed Solomon, applicazioni
    • Gestione di reti (6 cfu)

      • Obiettivi Fornire agli studenti una conoscenza di base dei problemi della gestione di rete, degli strumenti per la gestione disponibili e dei principi di base che permettono di gestire complesse reti di comunicazioni. Inoltre sono analizzate le piu' comuni esigenze di monitoraggio (rete, sistemi, servizi, applicazioni, sicurezza) su reti eterogenee (wired e wireless), nonche' gli strumenti (open-source o commerciali) disponibili sul mercato da utilizzare per fornire anche una conoscenza pratica dell'argomento
    • Interazione uomo-macchina (6 cfu)

      • Conoscenze Il corso si pone l'obiettivo di introdurre lo studente alle tematiche dell’interazione uomo-macchina e della progettazione di interfacce utente. Il corso segue tutti i passaggi tipici della progettazione di un’interfaccia utente; partendo dalla progettazione dell’Esperienza Utente (UX - User Experience) si arriva alla progettazione dell’interfaccia (UI - User Interface Design) e quindi alla relativa realizzazione. Il corso è concepito come un corso di design, verranno quindi introdotti principalmente principi di programmazione ma anche strumenti e tecniche utilizzati nello sviluppo di interfacce uomo-macchina di tipo multi-modale (non solo interfacce grafiche). Syllabus -Fondamenti di design dell’interazione uomo-macchina -Fondamenti di UX e UI Design -Errore umano e strategie di mitigazione dell’errore -Tecniche di prototipazione rapida per UX e UI designer -Strategie di collaborazione e sviluppo per UX e UI designer (brainstorming etc.) -UX e UI per sistemi smart e IOT (Internet of things) -UX e UI nell’era dell’industria 4.0
    • Progettazione e realizzazione di interpreti (6 cfu)

      • Conoscenze Il corso ha lo scopo di descrivere i meccanismi alla base del funzionamento degli interpreti di linguaggi di programmazione. Il fine è di consentire agli studenti di comprendere in maniera più profonda il comportamento dei programmi a tempo di esecuzione. Partendo dai modelli formali del comportamento dei programmi e dalla descrizione delle strutture utilizzate a tempo di esecuzione, si arriva alla progettazione e alla realizzazione di un interprete di un linguaggio di programmazione esemplare, svolte anche come attività laboratoriali. Syllabus -Esempi di interpreti e vantaggi dell'approccio interpretativo. -Richiami su grammatiche e linguaggi. Cenni di parsing. -Analisi statica e type checking. -Modelli formali del comportamento dei programmi e semantica operazionale strutturata. -Strutture a supporto dell'esecuzione dei programmi. -Progettazione e realizzazione di un interprete.
    • Laboratorio di Web Scraping (6 cfu)

      • Conoscenze Web scraping è una tecnica per estrarre informazioni da pagine dei siti web tramite delle procedure automatiche. La possibilità di utilizzare metodi automatici rende questa tecnica fondamentale come base di diverse procedure di analisi dei dati, di analisi statistica e data mining. Il corso si propone di presentare e far sperimentare i principali strumenti per il web scraping. Per consentire lo sviluppo di un progetto finale significativo, verranno presentate alcune tecniche di base di analisi/visualizzazione dei dati. Inoltre, poiché la scansione automatica di un documento tramite un agente automatico non è sempre legale, il corso coprirà anche gli aspetti etici relativi all’uso di questa tecnica. Syllabus -Strumenti per il web Scraping: -Scrapy. -Selenium. -Beautiful Soup. -Web API: Twitter, Reddit, Instagram. -OAuth, Webapps e Social Plugins. -Utilizzo di librerie predefinite per l’analisi di testo e di grafi. -Strumenti di visualizzazione. -Aspetti legali ed etici del web scraping. -Progetto: sviluppo di un crawler e semplice analisi dei dati.
    • Sicurezza di Sistemi ICT (6 cfu)

      • Il corso si propone di mettere in grado il laureato triennale di conoscere ed utilizzare alcuni controlli di sicurezza che permettono di aumentare in modo significativo la sicurezza offerta da un sistema ICT. Il corso è organizzato in tre parti: (1) concetti di base della sicurezza, (2) esempi di controlli di sicurezza, (3) seminari su argomenti legati alla sicurezza (quali legislazione informatica e aspetti Web della sicurezza).
    • Cloud Computing (6 cfu)

      • Conoscenze: Gli studenti apprenderanno gli aspetti principali del cloud computing e le potenzialità offerte dal cloud computing per lo sviluppo e la gestione di applicazioni. Syllabus: - Modelli dei servizi cloud - Sviluppo di applicazioni cloud-based e cloud-native - Aspetti infrastrutturali - Modelli di business e cloud computing
    • Sviluppo di Applicazioni Mobili (6 cfu)

      • 1. Introduzione, storia del mercato mobile, storia di Android. 2. Architettura di Android; rapporto con Linux, visione a strati 3. Dalvik VM, ambiente di sviluppo, deploy di applicazioni e Market 4. Il sistema delle risorse e degli asset; dispatching a runtime 5. Activity e ciclo di vita; il dispatching degli Intent; Layout e View; scrivere una custom View 6. Listview e DataAdapter; dialog, notifiche e alert 7. Drawable e sue sottoclassi; approfondimenti su patch 8. Tematiche di storage: Bundle e Parcelable; preferenze; file system; caching; SQLlite e classi helper; ContentProvider e ContentResolver 9. Services 10. Broadcast receiver e servizi di sistema (telefonia, sensori, ecc.) 11. Esecuzione asincrona e in background 12. Programmazione nativa in C
    • Crittografia (6 cfu)

      • Obiettivi: Introdurre le nozioni elementari sottostanti il progetto dei sistemi di cifratura moderni. Introduzione: definizione di crittografia e crittoanalisi. Cifrari Storici Generatori di numeri pseudo-casuali Cifrari perfetti: definizione e proprietà, il One-time pad. Cifrari a chiave simmetrica: DES, Triple-DES e AES Cifrari composti Cifrari a chiave pubblica: funzioni one-way trapdoor e RSA. Identificazione, Autenticazione e Firma digitale. Il sistema SSL. Smartcard: costituzione e applicazioni. Elementi di steganografia. Virus e simili attacchi. Elementi di crittografia quantistica.
    • Sistemi Informativi Territoriali (6 cfu)

      • Vengono presentati all'inizio i concetti base della rappresentazione cartografica e della cartografia numerica. Quindi si descrivono i modelli per la rappresentazione dello spazio e gli strumenti concettuali e tecnici per la rappresentazione di entità territoriali. Si presentano poi le funzionalità fondamentali degli strumenti GIS: il processo di acquisizione, correlato alle diverse tipologie di fonti di dati, le principali funzioni elaborative, con particolare attenzione all' operazione di incrocio, e infine le tecniche di restituzione. L'attività di laboratorio permetterà di prendere dimestichezza con uno dei più diffusi Software GIS commerciali e di verificare su di esso i principi esposti nelle lezioni teoriche.
    • Laboratorio di Basi di Dati (6 cfu)

      • Il laboratorio si propone l'obiettivo di completare le nozioni relative ad analisi e progettazione di dati, procedure ed interfacce di applicazioni per basi di dati, ed alla loro realizzazione. Tutte le nozioni introdotte vengono immediatamente sperimentate dagli studenti, utilizzando notazioni standard ed un sistema commerciale, quale ad esempio ORACLE DBMS ed ORACLE WebServer, sviluppando un case study che si conclude, alla fine del corso, con la realizzazione da parte degli studenti di un sistema funzionante.
    • Elementi di calcolabilita' e complessita' (6 cfu)

      • Obiettivi formativi: Introduzione alle nozioni fondamentali della teoria della calcolabilità e della complessità. Contenuti Introduzione alle nozioni fondamentali della teoria della calcolabilità e della complessità. Contenuti Linguaggi Formali e Automi: grammatiche, linguaggi e operazioni su di essi, gerarchia di Chomsky; automi a stati finiti, grammatiche regolari, espressioni regolari; automi a pila, grammatiche libere da contesto Calcolabilità: Idea intuitiva di algoritmo, Macchina di Turing per accettare e calcolare, funzioni ricorsive primitive, diagonalizzazione, funzioni ricorsive generali, Goedelizzazione, Padding Lemma, Forma Normale, Funzione Universale, teorema s-m-n, insiemi ricorsivi e r.e., problemi insolubili e riducibilità Complessità: problemi risolubili in tempo polinomiale, teorema di speed-up, teorema del gap, teorema della gerarchia, problemi risolubili nondeterministicamente in tempo polinomiale, riduzioni in tempo polinomiale, problemi NP-completi (SAT).
    • Sviluppo Applicazioni Web (6 cfu)

      • Conoscenze Il corso si pone l'obiettivo di fornire le basi per progettare e realizzare applicazioni Web. Gli studenti acquisiranno la conoscenza dei più diffusi linguaggi di programmazione e paradigmi utilizzati nello sviluppo di applicazioni Web client-server, nonché di alcuni framework applicativi che esemplifichino gli approcci più comuni allo sviluppo di applicazioni in tale contesto. Syllabus -Il Web come esempio di una architettura distribuita client-server. Richiami sul protocollo HTTP e il modello REST. L’infrastruttura del Web: proxy, firewall, cache; costi e benefici. -Tecnologie per il Web: HTML 5.0, Cascading style sheets. -Il linguaggio JavaScript / TypeScript. Introduzione al Document Object Model (DOM). Uso di DOM in Javascript per applicazioni client-side. W3C DOM API. Programmazione event-driven. Accesso alle risorse locali client-side. Uso del debugger nel browser. -Programmazione Server-side: node.js e la programmazione asincrona ad alte prestazioni. -Framework applicativi per il client-server. Approcci dichiarativi (es.: Web Components) e operazionali (es: Angular). Esemplificazione di alcuni framework di uso corrente. -Building, packing e transpiling di applicazioni Web; Web Assembly e principali tool di sviluppo. Cenni su altri stack tecnologici (es.: Dart e Flutter).
    • Tecniche di Testing (6 cfu)

      • Conoscenze Il corso fornisce le conoscenze necessarie per progettare e svolgere una fase di test tenendo conto sia del tipo di applicazione sia del tipo di verifica o validazione da svolgere. Vengono inoltre fornite le informazioni necessarie all'utilizzo dei principali strumenti automatici applicabili durante la fase di test utili sia alla sua pianificazione, sia alla derivazione dei casi di test da eseguire. Syllabus -Il processo di verifica; Pianificazione, misurazione e valutazione della fase di test. -Fault, error e failure, e livelli di test; Test strutturale (statement, branch, condition coverage); LCSAJ e MC/DC; Mutation Testing. -Path coverage e Data-flow coverage. -Test funzionale e category partition; Testing di sistemi a componenti e orientati ai servizi. -Tabelle decisionali. -Conformance testing. -Principi di MDA e Model-based Testing. -Test automation. -Cloud testing.
    • Complementi di algoritmica (6 cfu)

      • Conoscenze Il corso si pone l'obiettivo di approfondire e complementare i contenuti del corso di Programmazione e Algoritmi, presentando le principali tecniche di progettazione e analisi di algoritmi e di strutture dei dati per la risoluzione di problemi combinatori che coinvolgono vari tipi di dato quali interi, stringhe, alberi, grafi e dati multidimensionali. Gli studenti acquisiranno le competenze progettare algoritmi efficienti per problemi motivati da applicazioni in vari settori. Syllabus -Algoritmi di approssimazione. -Algoritmi online. -Algoritmi per la geometria computazionale e di clustering. -Algoritmi randomizzati. -Progettazione e analisi su modelli computazionali alternativi (distribuiti, memoria gerarchica, multithreading e paralleli). -Strutture di dati avanzate (di ricerca, adattive, geometriche, ecc.).
    • Computer grafica (6 cfu)

      • Conoscenze Il corso si pone l'obiettivo di fornire le basi di Grafica 3D descrivendo le strutture dati fondamentali per la rappresentazione di forme e gli algoritmi per la loro resa. Al termine del corso gli studenti avranno gli strumenti per poter utilizzare al meglio librerie e standard per la grafica e le capacita' per realizzare applicazioni interattive. Syllabus -Rappresentazione di superfici e dati tridimensionali. --Trasformazioni geometriche. -Cenni di architetture per il rendering. -Modelli di Illuminazione. -Algoritmi avanzati per il rendering.
    • Green Computing (6 cfu)

      • Conoscenze. Gli studenti apprenderanno gli aspetti principali del green computing e le soluzioni esistenti per (a) valutare e ridurre il consumo energetico e l’emissione di carbonio nell’ambito dei sistemi ICT, (b) progettare sistemi hardware e software efficienti dal punto di vista energetico e (c) ridurre lo scarto e l’inquinamento dovuti all’e-waste. Syllabus: - Il concetto di sostenibilità e l’impatto ambientale del ciclo di vita dei sistemi ICT - Tecniche di valutazione di un sistema ICT in base al carbonio prodotto, alle fonti energetiche usate, all’intensità di carbonio complessiva, al power usage effectiveness - Efficienza energetica di sistemi ICT e principi di green software engineering - e-waste, obsolescenza programmata e percepita - Problemi e soluzioni dalla letteratura recente
  • 15 cfu a scelta nel gruppo Prova finale

  • 6 cfu a scelta nel gruppo Libera scelta II

    • attività libera scelta
    • Simulazione (6 cfu)

      • Il corso si propone di fornire gli strumenti di base per la costruzione e l'utilizzo di modelli di simulazione. Dopo un'introduzione alla simulazione saranno presentate le principali tecniche di simulazione, con particolare attenzione alla simulazione discreta. Una parte consistente del corso sarà dedicata alle metodologie statistiche per l'analisi dei dati di input e di output. Nell'ultima parte del corso saranno presentati i principali concetti della System Dynamics edella simulazione per agenti autonomi. Syllabus: -Modelli di simulazione -Simulazione discreta -Simulazione ad eventi discreti -Funzioni di distribuzione e test statistici -Distribuzioni empiriche e numeri pseudocasuali -Scelta dei dati di input -Analisi dei dati di output -Simulazione continua -Sistemi di equazioni differenziali -Dinamica dei sistemi
    • Fisica (6 cfu)

      • Introduzione ai principi e al metodo scientifico della fisica classica. Sistemi di riferimento e coordinate, cinematica e dinamica dei sistemi elementari nella modellazione newtoniana. Simmetria, invarianza e leggi di conservazione. Modellazione dei processi della dinamica dei punti materiali e dei fenomeni elettromagnetici. Modellazione di processi naturali deterministici.
    • Esame a libera scelta dello studente II (6 cfu)

    • Algebra (6 cfu)

      • Conoscenze Il corso si pone l'obiettivo di fornire conoscenze dell’aritmetica degli interi, dei polinomi e dei gruppi e campi finiti. Syllabus -Congruenze e classi di resto. -Teorema di Fermat e di Eulero. -Proprietà elementari dei gruppi abeliani finiti. -Anelli di polinomi con coefficienti in un campo e loro quozienti. -Campi finiti.