PROGRAMMI DEL CORSO DI LAUREA IN Informatica a.a. 2011/2012 Algoritmi e strutture dati e laboratorio Docente: Prof. Alberto Policriti Crediti: 12 Finalità : Il corso si propone di introdurre ai fondamenti della teoria degli algoritmi, delle strutture dati e all'analisi della complessità computazionale di programmi. Il principale obiettivo del corso è familiarizzare lo studente con le principali problematiche e tecniche relative al disegno e alla progettazione di algoritmi. Ci si propone inoltre di introdurre i metodi di base utilizzati per stabilire la complessità di programmi e i criteri utilizzati per scegliere e progettare strutture dati. Dopo aver superato l'esame si ritiene che lo studente sia in grado di risolvere algoritmicamente problemi classici e scegliere motivatamente le strutture dati adatte ad ottenere soluzioni computazionalmente efficienti. Sia in grado di porre limiti superiori sufficientemente precisi e indipendenti dall'architettura alla complessità computazionale di programmi di media difficoltà . Conosca i più importanti problemi e algoritmi “classici” del campo nonché le più importanti e utilizzate tecniche di analisi della complessità e di strutturazione dei dati. Programma: 1. Introduzione e nozioni preliminari Introduzione. Elementi di logica e teoria degli insiemi. Alberi e grafi. Matematica discreta e analisi asintotica. Modelli di calcolo per la determinazione della complessità degli algoritmi. Problemi ricorsivi e aspetti algoritmici. 2. Algoritmi di ricerca e ordinamento Algorimi primitivi di ordinamento e ricerca: selection-sort, insertion-sort, bubble-sort, heap-sort. Algoritmi ricorsivi: quick-sort, merge-sort. Analisi della complessità e limiti inferiori. Algoritmi lineari non basati sul confronto: counting-sort, radix-sort, bucket-sort. Determinazione dell'elemento medio. 3. Strutture dati Strutture dati primitive: liste, pile, code, heap. Algoritmi e strutture dati per la gestione e manipolazione di insiemi: tabelle hash, alberi di ricerca, bilanciamento, red-black alberi e B-alberi. Algoritmi e strutture dati per il problema Union-Find. Cenni alle strutture dati self-adjusting. 4. Algoritmi sui grafi Tecniche di rappresentazione di grafi orientati e e non orientati. Algoritmi di visita in ampiezza e profondità . Algoritmi di visita su alberi. Calcolo delle componenti fortemente connesse. Algoritmi per la determinazione di topological-sort, minimum spanning tree (Prim e Kruskal), cammino minimo da una sorgente (Dijkstra, Bellmann-Ford) cammini minimi da sorgenti multiple (Floyd-Warshall, Johnson). Bibliografia: Testi utilizzati: Appunti delle lezioni; Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms MIT Press, 1990 (anche in italiano). Altri testi utili: Aho A.V., Hopcroft J.E., Ullman J.D. Data Structures and Algorithms Addison-Wesley, 1983. Aho A.V., Hopcroft J.E., Ullman J.D. The Design and Analysis of Computer Algorithms Addison-Wesley, 1974. D. E. Knuth Selected Papers in Computer Science Cambridge University Press, 1996. Tarjan R.E. Data Structures and Network Algorithms SIAM, 1983. Modalità d'esame: Analisi matematica Docente: Prof. Gianluca Gorni Crediti: 12 Finalità : Introdurre i concetti fondamentali dell'analisi matematica per funzioni di una variabile, curando sia gli aspetti concettuali e teorici sia quelli calcolativi. Programma: Numeri reali, manipolazione delle disuguaglianze, principio di induzione, limiti di successioni e funzioni di una variabile reale, continuità delle funzioni e sue conseguenze teoriche, derivate delle funzioni di una variabile, applicazioni delle derivate, integrali. Bibliografia M. Bertsch, R. Dal Passo, L. Giacomelli, Analisi matematica, MacGraw-Hill, ISBN: 9788838662348. Seconda Edizione, ISBN 9788838662812 Modalità d'esame: Due compitini scritti alla fine dei due periodi diattici, con orale facoltativo qualora la media sia almeno 18. Modalità alternativa: un singolo scritto più un orale negli appelli fra giugno e febbraio. Maggiori dettagli sono disponibili nel sito del docente. Architettura degli elaboratori e laboratorio Docente: Prof. Pietro Di Gianantonio Crediti: 12 Finalità : Il corso ha lo scopo di illustrare la struttura e il funzionamento di un computer nelle sue diverse componenti. Il percorso didattico inizia con lo studio delle parti elementari che costituiscono un calcolatore e considera componenti sempre più complesse fino ad arrivare allo studio di architetture complete. Per meglio evidenziare i legami fra il livello hardware e quello software, il corso tratta la programmazione in linguaggio assembly. Programma: - Introduzione: prospettiva storica sulle architetture degli elaboratori, concetti base, livelli d'astrazione nell'analisi di un'architettura. - Reti logiche: porte logiche elementari, algebre booleane, circuiti combinatori d'uso frequente, progettazione circuiti sequenziali, chip di memoria. Rappresentazione delle informazioni: sistema di numerazione binario, conversione tra basi, rappresentazione di numeri interi e reali, rappresentazione di caratteri, codici di rilevamento errori. Processore: ciclo di fetch-decode-execute, data path, unità di controllo, presentazione dettagliata di un semplice microprocessore, pipeline, processori superscalari, predizione di salto, esecuzione fuori ordine, Intel Core. - Linguaggio Macchina: Evoluzione dei linguaggi macchina, tipi di dati, indirizzamento, tipi d'istruzioni, formati istruzioni, - Input/Output: programmed I/O, interrupt, DMA, dispositivi periferici, collegamenti mediante bus, meccanismi d'arbitraggio e sincronizzazione del bus, architettura di un tipico PC, bus PCI, SCSI, USB, dischi magnetici, RAID, dischi ottici. - Gerarchie di Memoria: meccanismi di funzionamento della memoria cache e della memoria virtuale, paginazione e segmentazione, MMU. - Architetture ad elaborazione parallela: tipologie di calcolatori paralleli, multiprocessori e multicomputer, Interconnessione fra processori, cache coherence, architetture UMA, NUMA, COW e MPP. - Programmazione assembly. Architettura del MIPS. Istruzioni MIPS: assegnamento, salto, aritmetiche-logiche. Modalità d'indirizzamento, chiamate di funzione, direttive all'assemblatore. Bibliografia: Andrew S. Tanenbaum. Architettura dei calcolatori, un approccio strutturale. Pearson, 2006. Modalità d'esame: L'esame si compone di una prova scritta, di una prova di laboratorio e di una prova orale. Aspetti sociali Docente: Dott. Antonio Piva Crediti: 1 Finalità : Gli obiettivi principali del corso sono: rendere lo studente consapevole del contesto sociale e delle implicazioni etiche conseguenti alle innovazioni tecnologiche nel campo dell'informatica. In particolare il corso prevede la trattazione del Diritto dell'ICT con particolare attenzione alle innovazioni apportate da internet. Scopo è rendere lo studente consapevole delle implicazioni deontologiche della propria attività professionale, nei confronti dei clienti, datore del lavoro e utenti, e responsabilizzarlo sulle conseguenze a tutti i livelli del proprio operato. Finalità è rendere lo studente competente in questa materia e capace di operare negli ambienti lavorativi nel rispetto delle normative vigenti. Programma: Disamina di casi concreti riguardanti la PRIVACY E LA SICUREZZA (anche in riferimento al syllabus della certificazione privacy e sicurezza disponibile nel sito di AICA www.aicanet.it o di CINDI www.cindi.it) La PROPRIETA' INTELLETTUALE e IL DIRITTO D'AUTORE; dalle origini del diritto d'autore alla proprietà intellettuale nella società dell'informazione; la normativa internazionale, europea ed italiana in materia. La tutela giuridica del SOFTWARE: Il diritto d'autore sul software e la sua brevettabilità ; la durata del diritti, i beni oggetto del diritto in particolare il software e le banche dati, le licenze. La tutela delle BANCHE DATI e delle opere multimediali. La SIAE. Diritto all'informazione e nuove tecnologie: dalle testate on-line ai blog. La concorrenza sleale on-line. I DOMAIN NAMES di internet e gli aspetti giuridici; Il DN ed il marchio, analisi di alcuni casi di protezione giuridica ed alcune decisioni dei tribunali italiani. L'utilizzo dei LINK nei Web ed alcuni casi giuridici (link interni ed esterni). Il diritto d'autore nella rete. La CRIMINALITA' INFORMATICA e Il DIRITTO PENALE in INTERNET; la tutela dei beni informatici, la violazione del domicilio informatico, l'accesso abusivo e gli hackers, il danneggiamento informatico, le frodi telematiche, la normativa penale di riferimento. Il GOVERNO ELETTRONICO ED IL NU)OVO CODICE DELL?AMMINISTRAZIONE DIGITALE; LA FIRMA DIGITALE; il documento elettronico e la sua validità giuridica nell'ordinamento italiano; la crittografia: storia, evoluzione, tecniche di sicurezza sulla rete; La riservatezza, l'integrità , l'autenticazione ed il non ripudio; le certification autority riconosciute dal DIGITPA ed i certificati elettronici; le normative italiane ed Europee sulla firma elettronica; firma autografa e digitale a confronto; la data certa nei documenti elettronici. Accenni sulla Carta d'Identità elettronica e la Posta elettronica certificata. L'Informatica nella Pubblica Amministrazione: il piano di E-Government ed il codice dell'amministrazione digitale. Accenni sul Il COMMERCIO ELETTRONICO; le direttive dell'Unione Europea in materia e la normativa italiana; i CONTRATTI conclusi mediante Internet, i contratti a oggetto informatico e i contratti Telematici; la tutela dei consumatori in Internet e le normative di riferimento per i contratti conclusi fuori dai locali commerciali; La PUBBLICITA' in RETE: definizioni e disciplina legale, i banner. Bibliografia: Lucidi predisposti dal docente; Articoli su Mondo digitale, rubrica di ICT e Diritto (scaricabili su www.mondodigitale.net ). Modalità d'esame: Scritto (24 domande chiuse) e Orale. Chi dispone di Certificazioni Sul Diritto dell'ICT dovrà sostenere solamente un breve colloquio orale. Basi di dati Docente: Prof. Angelo Montanari Crediti: 9 Finalità : Obiettivo fondamentale del corso è l'acquisizione dei concetti, delle metodologie e degli strumenti fondamentali nel campo delle basi di dati, con particolare attenzione ai modelli (concettuale, logico e fisico), ai linguaggi (di definizione, di interrogazione e di aggiornamento) e all'architettura dei sistemi per basi di dati. Vengono descritti in dettaglio i linguaggi per la definizione, l'interrogazione e l'aggiornamento dei dati (algebra relazione, calcolo relazionale, SQL). Vengono, inoltre, forniti elementi di progettazione concettuale (analisi e raccolta dei requisiti, costruzione di modelli Entità /Relazioni), logica (ristrutturazione di schemi concettuali, trasformazione di schemi concettuali in schemi logici, normalizzazione dei dati) e fisica (strutture di indicizzazione) di basi di dati. Infine, viene introdotta la nozione di transazione e vengono analizzate le componenti principali di un DBMS. Dopo aver superato l'esame si ritiene che lo studente sia in grado di formalizzare in un linguaggio relazionale operazioni di definizione e manipolazione dei dati espresse in linguaggio naturale e di progettare semplici basi di dati a livello concettuale (costruzione di schemi Entità /Relazioni a partire da insiemi di requisiti espressi in linguaggio naturale), logico (trasformazione di schemi Entità /Relazioni in schemi relazionali, normalizzazione di schemi relazionali) e fisico (definizione degli opportuni indici). Programma: Parte 1 - Concetti di base Ruolo e funzionalità di una base di dati; astrazioni sui dati; modelli concettuali, logici e fisici dei dati; istanze e schemi; indipendenza logica e fisica dei dati; linguaggi per la definizione e la manipolazione dei dati; i sistemi per la gestione delle basi di dati (DBMS); amministratore e utenti di una base di dati; il dizionario dei dati; la struttura generale di una base di dati. Parte 2 - Il modello Entità /Relazioni (ER) Metodologie, tecniche e modelli per il progetto di una base di dati: il ciclo di vita dei sistemi informativi e le metodologie di progettazione di basi di dati; i costrutti di base del modello concettuale Entità /Relazioni (ER): tipi e istanze di entità e relazioni, attributi (semplici, composti, a singolo valore, a valore multiplo, opzionali, derivati) e chiavi (identificatori interni ed esterni, le nozioni di entità debole, entità proprietaria, chiave parziale e relazione identificante), dominio di un attributo e utilizzo dei NULL, vincoli associati alle relazioni (partecipazione e rapporto di cardinalità ), relazioni ricorsive e ruoli, relazioni di grado superiore al secondo, i diagrammi ER; documentazione di schemi ER: tecniche di documentazione, regole aziendali (vincoli di integrità e regole di derivazione); costrutti avanzati del modello ER: specializzazioni e categorie. Modellazione dei dati in UML: i diagrammi delle classi (classi, associazioni, molteplicità , identificatori, generalizzazioni). Parte 3 - Il modello relazionale Nozioni di base, definizione delle relazioni, definizione dei vincoli sulle relazioni (che coinvolgono un'unica relazione o più relazioni), schemi e istanze di una base di dati relazionale, operazioni di aggiornamento delle relazioni, politiche di reazione alle violazioni dei vincoli. Parte 4 - La progettazione delle basi di dati. La progettazione concettuale dei dati: raccolta e analisi dei requisiti, criteri generali di rappresentazione, strategie di progetto, qualità di uno schema concettuale, strumenti CASE per la progettazione dei dati; la progettazione logica dei dati: analisi delle prestazioni su schemi ER, ristrutturazione di schemi ER (analisi delle ridondanze, eliminazione delle gerarchie, partizionamento/accorpamento di entità e/o relazioni, scelta degli identificatori principali), traduzione del modello ER nel modello relazionale; cenni alla teoria della progettazione delle basi di dati relazionali: dipendenze funzionali, ragionamento sulle dipendenze funzionali, scomposizione di relazioni, scomposizioni lossless-join, scomposizioni che conservano le dipendenze, forme normali per gli schemi di relazione (1NF, 2NF, 3NF e BCNF), scomposizioni in 3NF che conservano le dipendenze. Parte 5 - L'algebra relazionale e il calcolo relazionale L'algebra relazionale: le operazioni di base, interrogazioni in algebra relazionale, operazioni derivate, operazioni addizionali, ottimizzazione algebrica, i limiti dell'algebra relazionale; il calcolo relazionale: nozioni di base, calcolo relazionale su domini, calcolo relazionale su tuple con dichiarazioni di range, confronto tra il calcolo relazionale su domini e il calcolo relazione su tuple con dichiarazione di range, il legame tra calcolo relazionale e algebra relazionale. Parte 6 - Il linguaggio SQL La definizione dei dati in SQL; interrogazioni in SQL; istruzioni di aggiornamento in SQL; altre definizioni dei dati in SQL (vincoli di integrità generici, viste, specifica di vincoli di addizionali sotto forma di asserzioni); il DBMS Oracle Express Edition; cenni a SQL e linguaggi di programmazione (trigger, funzioni e procedure). Parte 7 - XML Introduzione a XML, gli elementi XML, gli attributi XML, documenti XML, XML parser, applicazioni di XML, XML e basi di dati, il linguaggio DTD, dichiarazioni di tipo di un documento XML, validità di un documento XML e modalità di validazione, DTD e schemi relazionali, DTD e XML Schema, linguaggi di interrogazione XML, XPath e XQuery. Parte 8 - L'organizzazione fisica dei dati. Memorizzazione dei record ed organizzazione dei file primari: introduzione, strumenti e tecniche per la gestione della memoria secondaria, memorizzazione di file di record su disco, operazioni sui file, file di record non ordinati, file di record ordinati, tecniche di hashing, altre possibili organizzazioni dei file primari, uso della tecnologia RAID per parallelizzare l'accesso a disco. Strutture di indicizzazione dei file: indici ordinati di singolo livello (primari, di clustering, secondari), indici multilivello statici, indici multilivello dinamici che utilizzano B-alberi e B+-alberi, altri tipi di indice (cenni). Parte 9 - Tecnologia delle basi di dati centralizzate. La nozione di transazione: introduzione, proprietà delle transazioni, scheduling e recupero delle transazioni, tecniche di serializzazione, supporto alle transazioni in SQL. Il gestore del buffer: architettura del buffer manager, primitive per la gestione del buffer, politiche di gestione del buffer, relazione tra il gestore del buffer e il file system. Tecniche di controllo della concorrenza: problematiche, architettura, anomalie delle transazioni concorrenti, tecniche basate su viste, conflitti, locking a due fasi (2PL e 2PL stretto) e timestamp, tecniche multiversione, granularità dei dati. Tecniche di controllo dell'affidabilità : concetti di base, architettura del controllore dell'affidabilità , la nozione di memoria stabile, organizzazione del log, gestione delle transazioni, gestione dei guasti. Elaborazione e ottimizzazione delle interrogazioni: i cataloghi di sistema; ottimizzazione delle interrogazioni (rappresentazione interna delle interrogazioni, profili delle relazioni, ottimizzazione basata sui costi); progettazione fisica di una base di dati. Bibliografia: Testi adottati: R. Elmasri, S. Navathe, Fundamentals of Database Systems (6th Edition), Pearson International Education / Addison Wesley, 2010. In alternativa: R. Elmastri, S. Navathe, Sistemi di basi di dati. Fondamenti (sesta edizione), Pearson Italia, 2011. P. Atzeni, S. Ceri, S. Paraboschi, R. Torlone, Basi di Dati: Modelli e Linguaggi di Interrogazione (terza edizione), McGraw-Hill, 2009. P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone, Basi di Dati: Architetture e linee di evoluzione (seconda edizione), McGraw-Hill, 2007. Altri testi di riferimento: A. Silberschatz, H. F. Korth, S. Sudarshan. Database System Concepts (5th Edition), McGraw-Hill, 2005. A. Albano, G. Ghelli, R. Orsini. Fondamenti di basi di dati,, Zanichelli, 2005. J.D. Ullman, Principle of Database and Knowledge Base Systems I - II, Computer Science Press, 1989. (Trad. it. Basi di dati e di conoscenza, Gruppo Editoriale Jackson, 1991.) S.Abiteboul, R.Hull, V. Vianu. Foundations of Databases, Addison-Wesley, 1995. C. J. Date. An Introduction to Databases Systems (7th Edition), Addison-Wesley, 2000. Modalità d'esame: Esame scritto e orale Calcolo delle probabilità e statistica Docente: Prof. Luigi Pace Crediti: 6 Finalità : Sviluppare una buona competenza nella quantificazione probabilistica dell'incertezza in situazioni sperimentali standard, ottenuta tramite l'acquisizione della padronanza delle parti elementari del Calcolo delle Probabilità . Programma: Esperimenti casuali e spazi probabilizzati: gli assiomi di Kolmogorov. Spazi di probabilità uniformi e probabilità combinatoria. Teoremi elementari. Partizioni e probabilità totale. Probabilità condizionali e formula della probabilità composta. Formula di Bayes. Indipendenza di due e più eventi. Variabili e vettori aleatori. Loro legge di probabilità . Leggi discrete e leggi continue. Leggi degeneri, uniformi discrete, binomiali, geometriche, di Poisson. Leggi uniformi continue, esponenziali, la proprietà di assenza di memoria, tasso di guasto e leggi di Weibull, leggi normali. Trasformazioni di variabili casuali univariate. Variabili casuali multivariate con componenti indipendenti. Variabili casuali bivariate: leggi marginali e condizionali. Loro trasformazioni. Trasformazioni di variabili casuali multivariate con componenti indipendenti (massimo e minimo, somma, combinazioni lineari). Indici di posizione, quantili e valore atteso. Varianza e diseguaglianza di Cebyshev. Momenti e funzione generatrice dei momenti di variabili casuali univariate. Proprietà additive di binomiali, Poisson, normali indipendenti. Il campionamento casuale semplice e la variabile casuale media campionaria: risultati per il campionamento da normali e cenni alla legge dei grandi numeri e al teorema centrale del limite. Bibliografia: Appunti dalle lezioni. Sono indicate anche all'inizio del corso dispense disponibili on-line. Testi di consultazione: P.Baldi, Calcolo delle probabilità e statistica (seconda edizione), McGraw-Hill, Milano, 1998; S. Ross, Calcolo delle probabilità , Apogeo, Milano, 2004. Modalità d'esame: Prova scritta composta da due parti: esercizi e quesiti sul programma del corso. Integrazione orale facoltativa per gli studenti con prova scritta sufficiente in entrambe le parti. Registrazione dell'approvazione contestuale alla prova orale, anche per chi rinuncia all'integrazione orale. Calcolo scientifico Docente: Prof. Rossana Vermiglio Crediti: 6 Finalità : Il corso e' di tipo introduttivo e vuole portare lo studente ad avere familiarità con alcune delle tematiche di base del calcolo scientifico attraverso l'analisi teorica e sperimentale dei principali metodi. Al termine del corso lo studente saprà riconoscere, analizzare e risolvere numericamente alcuni problemi della matematica del continuo; individuare e usare in modo appropriato le risorse informatiche (algoritmi, tempo macchina, memoria) necessarie per la loro risoluzione; conoscere i vincoli di precisione e di tempo imposti dalle risorse disponibili ed infine saper stimare l'attendibilità dei risultati numerici ottenuti ed interpretarli. Prerequisiti: Matematica discreta, Analisi Matematica, esperienze di base di programmazione. Programma: Numeri e aritmetica di macchina, analisi degli errori. Equazioni non lineari. Richiami di algebra lineare: norme di vettori e matrici, prodotto scalare. Risoluzione di sistemi lineari con metodi diretti. Approssimazione di dati e funzioni: interpolazione polinomiale, polinomiale a tratti, trigonometrica e FFT, funzioni splines; splines parametriche e curve di Bezier e B-splines. Soluzione di sistemi lineari sovradeterminati e minimi quadrati: le equazioni normali, cenni al metodo QR e alla decomposizione a valori singolari SVD. Alcune applicazioni della SVD. Le esercitazioni saranno integrate con la risoluzione di alcuni esempi e casi di studio in MATLAB. Bibliografia: [1] R.Vermiglio; Appunti disponibili in rete su materiale didattico. [2] A. Quarteroni, F. Saleri “Introduzione al calcolo scientifico”. Springer Verlag 2002 [3] C. Moler “Numerical computing with MATLAB”. SIAM 2005 Modalità d'esame: Prova scritta e orale. Comunicazione efficace Docente: Prof. Angelo Marzollo Crediti: 1 Finalità : Il corso si prefigge di migliorare le capacità degli studenti di esprimersi in modo corretto ed efficace, sia attraverso il canale orale che quello scritto, e di dotarli di strumenti operativi utili a facilitare il loro inserimento nel mondo del lavoro. Programma: Il corso si articolerà in una serie di lezioni, volte a controllare e migliorare chiarezza, efficacia e correttezza degli studenti nella loro espressione orale e in quella scritta. Si analizzeranno le capacità comunicative individuali così come esse emergono in contesti collettivi (ad esempio lettura e presa di parola in pubblico) ed interpersonali (ad esempio preparazione ed esposizione del proprio curriculum vitae, incontri e colloqui di lavoro, etc.). Questo consentirà di evidenziare i punti critici in tali contesti comunicativi e di fornire elementi utili al loro superamento, grazie anche all'intervento di esperti specifici. Si accennerà anche a metodi per filtrare criticamente i messaggi insiti nella comunicazione di massa. Bibliografia: Data la brevità del corso e il suo carattere nettamente operativo la frequenza è necessaria per affrontare l'esame e non può essere sostituita dalla semplice lettura di testi. Tuttavia, si indicheranno materiali aggiuntivi o integrativi agli studenti che desiderino approfondire argomenti specifici. Modalità d'esame: L'esame consisterà in una prova scritta ed eventualmente anche in una discussione orale. In particolare, agli studenti che non supereranno l'esame saranno forniti individuali suggerimenti di miglioramenti specifici. Cultura d'impresa Docente: Dott. Antonio Piva Crediti: 1 Finalità : Gli obiettivi principali del corso sono: rendere lo studente consapevole del contesto sociale e delle implicazioni etiche conseguenti alle innovazioni tecnologiche nel campo dell'informatica e conoscere i princìpi della protezione dei dati personali nella normativa europea ed italiana. In particolare il corso prevede la trattazione del Diritto dell'ICT riguardante la Privacy e sicurezza, con particolare attenzione alle innovazioni apportate da internet, con la finalità di rendere lo studente competente questa materia e capace di operare negli ambienti lavorativi nel rispetto delle normative vigenti. L'Obiettivo è che lo studente conosca l'evoluzione del concetto di privacy e la normativa italiana sulla privacy, in particolare il Codice in materia di protezione dei dati personali, la figura dell'autorità Garante e il Gruppo dei Garanti europei. Lo studente deve comprendere le norme generali che regolano il trattamento dei dati personali e le particolarità di alcuni settori specifici di trattamento; deve essere consapevole degli obblighi di sicurezza richiesti, della redazione del Documento Programmatico sulla Sicurezza, e delle responsabilità e sanzioni previste dal Codice. Lo studente deve conoscere le norme in materia di comunicazioni elettroniche non sollecitate e alcune particolari fattispecie di trattamenti illeciti. Programma: La PRIVACY E LA SICUREZZA (anche in riferimento al syllabus della certificazione privacy e sicurezza disponibile nel sito di AICA www.aicanet.it o di CINDI www.cindi.it) - nozione e sviluppo di privacy: dalla nascita della privacy alla direttiva europea. Anonimato ed identificabilità . - la normativa italiana in materia di dati personali (informativa, consenso, dati sensibili, le sanzioni, il Garante, le responsabilità civili e penali.) e le figure giuridiche previste. - La gestione della sicurezza, le misure minime ed idonee sulla sicurezza, il Documento programmatico della sicurezza. - Disamina di casi concreti (obblighi per gli Internet Service Provider, scuole, videosorveglianza, phishing ecc..) - Le disposizioni applicabili alla rete (informative, consenso, opt in-opt out, logs l'utilizzo delle Pet's e cokies ..) - Le responsabilità e le sanzioni - La tutela della segretezza della posta elettronica nell'ordinamento italiano e negli altri ordinamenti. - Le comunicazioni non sollecitate - Aspetti giuridici dei social network tra opportunità e rischi Accenni sulla sicurezza delle informazioni e le Normative Internazionali: ISO 9001:2008 - Sistema di Gestione della Qualità (applicato al software ed al mondo IT) ISO 27001 - Sistemi di Gestione della Sicurezza delle Informazioni ISO 20000 - Sistemi di Gestione dei Servizi IT BS 10012 - Sistemi di Gestione delle Informazioni Personali BS 25999 - Sistemi di Gestione della Business Continuity Bibliografia: Lucidi predisposti dal docente Articoli su Mondo digitale, rubrica di ICT e Diritto (scaricabili su www.mondodigitale.net) La tutela dei dati personali (NUMERO 9 - Marzo 2004) 10 anni di Privacy NUMERO 22 - Giugno 2007 Sicurezza informatica e privacy nella scuola (NUMERO 26 - Giugno 2008) Aspetti giuridici dei social network tra opportunità e rischi (NUMERO 2 - Giugno 2009) La sicurezza delle informazioni e le Norme ISO 27000 (NUMERO 27 - Settembre 2008) e gli altri articoli su Qualità servizi IT e Business Continuity ISO/IEC 20000: la Norma per la qualità dell'erogazione dei Servizi IT (NUMERO 1 - marzo 2009) Business Continuity: come prevenire i disastri applicando le normative (NUMERO 3 - Settembre 2009) Governance IT: continua evoluzione dei frameworks per gestirla (NUMERO 4 - Dicembre 2011) Responsabilità degli enti e reati informatici (NUMERO 4 - Dicembre 2009) Materiale ed indicazioni presenti nel sito del Garante www.garanteprivacy.it Ebook in pubblicazione redatto dal docente Modalità d'esame: Scritto (24 domande chiuse) e orale Chi dispone della Certificazione su Privacy e sicurezza dovrà sostenere solamente un breve colloquio orale. Fisica Docente: Prof. Lorenzo Santi Crediti: 6 Finalità : Dal punto disciplinare, far acquisire agli studenti gli elementi formali e la fenomenologia di base della Meccanica Classica, assieme ad una disanima dei suoi concetti fondanti, quale esempio di teoria fisica. Dal punto di vista metodologico, introdurre gli studenti al metodo scientifico ed alla pratica della costruzione e della utilizzazione di modelli formali. Programma: Introduzione alla fisica come scienza sperimentale. - Il ruolo del processo di misura. Definizione operativa delle grandezze fisiche. Unità di misura e sistema internazionale. Elementi di calcolo dimensionale. Errore di misura. - Modelli cinematici. Esempi. Capacità previsionale e verifica sperimentale. - Modelli dinamici. Esempi. Le teorie fisiche ed i loro elementi costitutivi. Cinematica. - Coordinate e sistemi di riferimento: SdR cartesiani, le operazioni di proiezione. Sistemi di riferimento polare. -Vettori: definizioni e proprietà elementari. Operazioni tra vettori (somma, prodotto scalare, modulo,prodotto vettoriale) e loro proprietà . Le componenti ed i componenti dei vettori. -Le grandezze cinematiche: la legge oraria, la velocità e l'accelerazione come grandezze cinematiche derivate finite e puntuali. Il problema dell'integrazione della equazione del moto e le condizioni iniziali. Proprietà di trasformazione delle grandezze cinematiche tra sistemi di riferimento in moto relativo: caso del moto di traslazione e caso del moto di rotazione. Velocità ed accelerazione di trascinamento. -Esempi di moto semplici o emblematici: moto uniforme, uniformemente accelerato, moto circolare, moto armonico. -Rappresentazione in coordinate naturali delle grandezze cinematiche: raggi di curvatura delle traiettorie e componenti dell'accelerazione. -Metodi di analisi e soluzione di problemi di cinematica. Il problema dell'incontro. Dinamica del punto materiale. - Il principio di inerzia, le interazioni ed i sistemi di riferimento inerziali. Urti ed introduzione fenomenologia del concetto di massa inerziale. La quantità di moto e la terza legge della dinamica in termini di variazioni finite. Impulso e forza: la seconda legge della dinamica. Esempi semplici: la interazione gravitazionale ed il peso, passaggio dalle variazioni finite alle grandezze istantanee. - Modelli elementari di interazioni e loro rappresentazioni quantitative: la legge di Hooke per le deformazioni elastiche, forze vincolari e forze normali, funi e sbarre ideali. La forza di attrito, con una modelizzazione qualitativa mesoscopica. - Il lavoro e l'energia cinetica. Equivalente energetico della seconda legge della dinamica, con esempi ed applicazioni. Le forze conservative, l'energia potenziale e la conservazione dell'energia, secondo Feynmann. Teorema della conservazione dell'energia meccanica. - Diagrammi energetici e studio delle caratteristiche fondamentali del moto di sistemi unidimensionali sottoposti a forze conservative: posizioni di equilibrio e moti periodici. Il caso del pendolo semplice. Sistemi sottoposti a forze non conservative. Dinamica dei sistemi estesi La prima equazione cardinale della dinamica ed il concetto di centro di massa. Proprietà del centro di massa (equazioni di Koening e conservazione della quantità di moto). - L'operazione di momento e la caratterizzazione dei moti di rotazione attraverso le grandezze fisiche coniugate tramite tale operazione: momento delle forze e momento della quantità di moto. La seconda equazione cardinale della dinamica. Il moto del pendolo semplice, rivisitato dinamicamente. - Il teorema di conservazione del momento della quantità di moto. Esempi di applicazioni (non per corpi estesi). Il corpo rigido. Statica del corpo rigido. Gravitazione: le leggi di Keplero e la loro interpretazione fisica. La legge di gravitazione universale. Analisi energetica dei moti dei gravi e dei corpi celesti. Bibliografia: Libro di testo consigliato Halliday, Resnick, Krane, Fondamenti di Fisica, Editrice Ambrosiana. Modalità d'esame: Prova scritta propedeutica ad una prova orale (con soglia di sbarramento di una votazione minima di 18/30) Fondamenti dell'Informatica Docente: Prof. Agostino Dovier Crediti: 9 Finalità : Il corso affronta le basi teoriche della scienza del calcolatore. In particolare, dopo aver superato l'esame, si ritiene che lo studente sia in grado di discutere la decidibilità o meno, e la polinomialità o meno, di problemi, anche utilizzando tecniche raffinate di riduzione, e conosca gli aspetti rilevanti della teoria dei linguaggi formali. Programma: Il corso si divide in tre parti: linguaggi formali, calcolabilità , e complessità . Linguaggi formali. Linguaggi regolari. Automi a stati finiti deterministici e non-deterministici e loro equivalenza. Espressioni regolari. Pumping Lemma per i linguaggi regolari e sue applicazioni. Proprietà di chiusura e di decidibilità dei linguaggi regolari. Linguaggi liberi dal contesto. Grammatiche libere dal contesto e alberi di derivazione. Grammatiche ambigue. Le forme normali di Chomsky e di Greibach. Il pumping lemma per i linguaggi liberi e le sue applicazioni. Proprietà di chiusura e di decidibilità dei linguaggi liberi. Grammatiche lineari destre e sinistre, grammatiche di tipo 0 e 1 e gerarchia di Chomsky. Calcolabilità . Il concetto di algoritmo. Modelli di calcolo. La macchina di Turing. Funzioni Turing-calcolabili. Enumerazione. Halting Problem e sua indecidibilita'. Il teorema SMN. I formalismi delle funzioni primitive ricorsive e ricorsive parziali. La funzione di Ackermann. Equivalenza tra le funzioni ricorsive parziali e le funzioni Turing-calcolabili. Teoremi di Rice, Rice-Shapiro e i Teoremi di ricorsione. Applicazioni alla programmazione. Riducibilità funzionale. Studio della relazione. Insiemi ricorsivi e completi. Insiemi creativi e produttivi. Teorema di Myhill. Insiemi semplici: esistenza di un insieme semplice. Complessità . Problemi e linguaggi. Problemi decisionali e funzionali. Classi di complessità in tempo deterministiche e non deterministiche; classi in spazio: principali risultati. Riduzioni, completezza, ed esempi. Teoremi di Cook. NP-completezza di alcuni problemi fondamentali mediante riduzione. Bibliografia: - A. Dovier e R. Giacobazzi: Fondamenti dell'Informatica: Linguaggi Formali, Calcolabilità e Complessità . Disponibile on-line. - N. J. Cutland, Computability: An introduction to recursive function theory, Cambridge Univ. Press, Cambridge 1980. - J. E. Hopcroft e J. D. Ullman, Introduction to automata, languages and computation, Addison-Wesley, Reading 1979. - C. H. Papadimitriou. Computational Complexity. Addison Wesley, 1995. Modalità d'esame: Prova scritta ed orale Interazione uomo-macchina Docente: Prof. Luca Chittaro Crediti: 6 Finalità : Scopo del corso è di introdurre i principi, le metodologie di progettazione e le diverse scelte implementative per la costruzione di software che sia usabile in modo semplice, intuitivo, produttivo ed affidabile dagli utenti a cui è rivolto. Il raggiungimento di questo obbiettivo richiede lo studio di tre diverse tematiche: l'uomo (caratteristiche psicologiche dell'utente); la macchina (strumenti per la realizzazione di interfacce con il mondo esterno); l'interazione (analisi, progetto, valutazione di interfacce uomo-macchina). Oltre a presentare le nozioni di base della disciplina, il corso pone anche l'accento su alcuni sviluppi recenti di particolare importanza, quali le interfacce 3D, il groupware ed i social network. Programma: • Introduzione: Obbiettivi dell'Interazione Uomo-Macchina e sua importanza in diversi settori applicativi. • Aspetti Psicologici dell'Interazione Uomo-Macchina: Psicologia Cognitiva. Canali sensoriali. Limitazioni e aspettative umane nei processi percettivi. Percezione visiva. Percezione auditiva. Percezione tattile. Movimento. La Memoria umana: sensoriale, a breve termine, a lungo termine. Aspetti emotivi. Differenze individuali. Modelli mentali. Metafore. Errori umani: slip e mistake. • Periferiche per l'Interazione Uomo-Macchina: Periferiche per l'inserimento di testo. Periferiche per il puntamento e posizionamento. Periferiche 3D. Periferiche per l'output visivo, auditivo, tattile. Periferiche ed interfacce per utenti disabili. • Modelli e Paradigmi di Interazione Uomo-Macchina: Modelli per caratterizzare le fasi dell'interazione. Aspetti ergonomici dell'interazione. Stili di interazione: dai linguaggi di comando alle interfacce 3D. Interfacce a finestre (WIMP). Progetto dei menu e delle icone. Paradigmi di interazione. Context-aware interaction. • Interaction Design: definizione e processo. User focus. Metodo Personas. Task analysis. Scenari. Navigation design. Screen design. Screen layout. Prototyping iterativo. • Interazione Uomo-Macchina e Ciclo di Vita del Software: Analisi dei requisiti di usabilita'. User-centred design. Usability Engineering. Tecniche di prototyping. Documentazione delle scelte di progetto. • Regole di Design per le Interfacce Utente: Principi. Standard. Guideline. Lo standard ISO 9241. Euristiche. • Valutazione di Usabilita': Scopo della valutazione. Strumenti di registrazione. Osservazione dell'utente. Raccolta di opinioni. Interviste. Questionari. Esperimenti. Valutazione predittiva: KLM. Valutazione mediante esperti: Heuristic Evaluation, Cognitive walkthrough. • Universal design: Principi. Interazione multi-modale. Progettare per una diversita' di utenti. • Assistenza all'utente: Documentazione. Requisiti di un help system. Principali approcci. Interfacce adattative ed adattabili. • Computer-Supported Cooperative Work: Groupware. La comunicazione mediata dal calcolatore. E-mail e sistemi di comunicazione testuale. Videoconferenza. Ambienti collaborativi virtuali. Sistemi per meeting e decision support. Applicazioni ed artefatti condivisi. • Communication Models: La comunicazione faccia a faccia. Spazio personale. Contatto oculare e sguardo. Gesti e linguaggio corporeo. Canali non-verbali. Effetti della comunicazione mediata dal calcolatore. Caso di studio: i social network. • Ubiquitous Computing e Augmented Reality: Definizione ed applicazioni dell'ubiquitous computing. L'interazione nell'ubiquitous computing. Context-aware computing. Cattura automatica di esperienze. Lifelogging. La realta' virtuale: desktop VR, immersive VR, augmented reality. Bibliografia: A. Dix, J. Finlay, G. Abowd and R. Beale. Human Computer Interaction, Third Edition, Prentice Hall, 2003 (disponibile anche la traduzione italiana dal titolo “Interazione Uomo-Macchina”, pubblicata da McGraw-Hill) Materiali aggiuntivi messi a disposizione dal docente su materialedidattico.uniud.it. Modalità d'esame: L'esame di Interazione Uomo-Macchina si compone di (i) una prova pratica (da svolgere prima della prova scritta), (ii) una prova scritta. Istruzioni dettagliate sulle prove sono disponibili al link: http://users.dimi.uniud.it/~luca.chittaro/STUD/indexIUM.html Linguaggi di Programmazione Docente: Prof. Marco Comini Crediti: 9 Finalità : Questo corso, in congiunzione con il corso di Linguaggi e Compilatori, intende fornire una conoscenza delle caratteristiche dei vari paradigmi di programmazione, cercando il più possibile di evitare di concentrarsi su uno specifico linguaggio, andando bensì a presentare i principi che guidano la progettazione, realizzazione e implementazione dei moderni linguaggi di programmazione. Con solida conoscenza delle caratteristiche “universali” si potrà così in futuro imparare nuovi linguaggi in pochissimo tempo. A questa visione generale si giunge attraverso la descrizione dei principali paradigmi di programmazione: imperativo, funzionale, logico e logico-funzionale. Questi paradigmi, oltre a essere esaminati nei loro aspetti pragmatici più immediati, sono analizzati e confrontati sulla base dei principi generali, in modo tale da permettere una comprensione critica della maggior parte dei linguaggi di uso comune. In questo modo s'intende sviluppare uno spirito critico che permetta di arrivare a una programmazione consapevole in cui saper scegliere il paradigma più adatto a seconda del problema da risolvere e sapere quali costrutti di un linguaggio usare, e a quale costo. I due corsi intendono inoltre fornire una conoscenza relativamente approfondita (soprattutto dell'aspetto programmativo) dei paradigmi di programmazione dichiarativa (funzionale, logico e logico-funzionale) che, grazie alla loro espressività , si prestano naturalmente quale base di sviluppo di software corretto. Grazie a ciò si forniscono i concetti fondamentali per valutare come sfruttare al meglio la programmazione in uno specifico paradigma, vedendone anche le problematiche di implementazione, e per saper valutare il linguaggio più adatto in un paradigma di programmazione rispetto al problema applicativo da risolvere. Questo corso, in particolare, tratterà i concetti generali, il paradigma imperativo e quello funzionale. Nello specifico si occuperà di: comprendere i concetti di macchina astratta, compilazione ed interpretazione di linguaggi di programmazione; implementazione dei moduli di analisi lessicale e sintattica di un compilatore mediante i più diffusi strumenti come flex/alex e bison/happy; studiare le relazioni tra tecniche di progetto, semantica ed implementazione dei linguaggi di programmazione; studiare i modelli e le principali tecniche classiche per l'implementazione di linguaggi del paradigma imperativo ed orientato agli oggetti; studiare le tecniche di programmazione mediante funzioni di ordine superiore tipiche del paradigma funzionale. Il corso di Linguaggi e Compilatori completerà la presentazione dei paradigmi dichiarativi, illustrando i paradigmi logico e logico-funzionale. Inoltre introdurrà le principali problematiche, soluzioni e tecniche concernenti il front-end di un compilatore, da sorgente a codice intermedio. Programma: Aspetti Generali e Paradigma Imperativo • Macchine astratte, Interpretazione e Compilazione (proiezioni di Futamura) • Descrivere un linguaggio di Programmazione (Sintassi e Semantica) • Introduzione alla struttura dei compilatori (e tecnica bootstrapping) • Labelled BNF Grammar Formalism e il tool BNFC • Analisi lessicale o Grammatiche Regolari ed Espressioni Regolari o Generatori di Analizzatori Lessicali (Flex e Alex) o Automi riconoscitori (NFA, DFA, minimizzazione) • Analisi Sintattica o Grammatiche libere da contesto o Generatori di Analizzatori Sintattici (Bison e Happy). o Vincoli di semantica statica • I nomi e l'ambiente • La gestione della memoria • Strutturare il controllo • Astrarre sul controllo (Metodi di passaggio dei parametri) • Un esempio di Macchina Astratta completa: P-code Machine. • Strutturare i dati • Sistemi di Tipi monomorfi e polimorfi o Semplice linguaggio imperativo tipizzato o Il sistema di tipi (indecidibile) dei linguaggi funzionali e la regola di ML o cenni all'implementazione di Type checking e type inference Paradigma Funzionale • Introduzione alla Programmazione Funzionale. • High-order Programming. • Il linguaggio Haskell o list comprehensions, partial applications of curried functions, sections, non-strict functions, infinite data structures, case expressions, pattern matching o Types, Classes and Overloading o Haskell's monadic I/O o Standard Haskell Classes o Monads o Modules Bibliografia: • M. Gabbrielli, S. Martini. Linguaggi di Programmazione - Principi e Paradigmi. McGraw-Hill. ISBN 88-386-6261-4 • Hudak, Fasel. A gentle introduction to Haskell, 1992 • B. Wadler, Introduction to Functional Programming using Haskell. ISBN: 0134843460, Prentice Hall PTR, 1998 • N. D. Jones, C. K. Gomard, P. Sestoft. Partial Evaluation and Automatic Program Generation. Prentice-Hall, Englewood Cliffs, NJ, 1993. Modalità d'esame: Progetto a gruppi, scritto e orale individuali Logica matematica Docente: Prof. Giovanna D'Agostino Crediti: 6 Finalità : Lo scopo del corso è quello di acquisire gli elementi di base della logica matematica, con particolare attenzione ai metodi algoritmici. Programma: Calcolo preposizionale: sintassi, soddisfacibilità e conseguenza logica, trasformazione in forma normale congiuntiva o disgiuntiva, tableaux semantici, deduzione naturale. Calcolo dei predicati: sintassi, soddisfacibilità e conseguenza logica, relazioni tra interpretazioni e logica con uguaglianza, tableaux semantici, deduzione naturale. Traduzione dal linguaggio naturale al linguaggio formale. Bibliografia: Dispense del docente Modalità d'esame: Prova scritta e prova orale Matematica discreta Docente: Prof. Giovanna D'Agostino, Prof. Giuseppe Lancia Crediti: 12 Finalità : Fornire concetti e strumenti in aritmetica, combinatorica e algebra lineare. Il corso è diviso in due moduli. L'obiettivo del primo modulo è di fornire competenze teoriche e metodologiche di aritmetica e combinatorica. L'obiettivo del secondo modulo è di fornire competenze teoriche e metodologiche di algebra lineare. Programma: Programma del primo modulo: - Algebra booleana, insiemi e funzioni. Relazioni e equivalenze. Sommatorie. Il principio di induzione. Cenni di calcolo delle probabilità . - Elementi di Combinatorica. Il principio della piccionaia. Numeri di Fibonacci. Il principio di inclusione-esclusione. - Procedure combinatoriche. Problema dei matrimoni stabili. Generazione di tutti i sottoinsiemi/permutazioni e di sottoinsiemi/permutazioni casuali. - Teoria dei grafi. Grafi euleriani e hamiltoniani. Grafi bipartiti. Connessione. Alberi. Grafi orientati e pesati. Il minimo albero di supporto. Accoppiamenti e coperture di vertici. Cliques e insiemi indipendenti. Colorazione di grafi. Aritmetica intera, quoziente e resto, scomposizione in fattori primi. MCD e mcm. Algoritmo di Euclide. Cenni di teoria dei numeri. Numeri primi e fattorizzazione. Programma del secondo modulo: Numeri Razionali, Reali, Complessi; Insiemi finiti e Infiniti e cardinalità di insiemi. Spazi vettoriali, dipendenza ed indipendenza lineare, basi e dimensione. Applicazioni lineari. Matrici, somma, prodotto, inversa e determinante di matrici. Relazione tra applicazioni lineari e matrici. Sistemi Lineari. Autovalori ed autovettori di un'applicazione lineare. Spazi Euclidei. Bibliografia: Per il primo modulo: -Dispensa del docente -Introductory Combinatorics, di R. Brualdi Per il secondo modulo: - Dispense F. Lastaria, M. Saita, Appunti di Algebra Lineare; - Materiale fornito dal docente. Modalità d'esame: La prova scritta è costituita da due parti sul programma del primo e del secondo modulo, rispettivamente. La prova orale è relativa al solo secondo modulo ed è obbligatoria o meno a discrezione del docente. Programmazione e laboratorio Docente: Prof. Claudio Mirolo Crediti: 12 Finalità : Obiettivi del corso Il corso introduce i fondamenti culturali e metodologici della programmazione e si propone di mettere lo studente in condizione di cogliere pienamente la natura di questa attività , stimolando inoltre un atteggiamento critico nei confronti degli strumenti utilizzati. Al termine del corso lo studente dovrebbe aver acquisito le competenze di base e le capacità operative necessarie al fine di progettare, organizzare e formalizzare programmi di piccole dimensioni, sviluppati secondo i paradigmi funzionale e object-oriented. Dovrebbe inoltre essere in grado di analizzare la struttura logica di un programma al fine di verificarne la correttezza in relazione alle specifiche. Organizzazione del corso Il percorso didattico muove dalla discussione di esempi e articola la propria riflessione sui principali processi di astrazione che consentono di gestire la complessità dei problemi affrontati in ambito informatico: l'astrazione procedurale, l'astrazione sui dati e l'astrazione sullo stato, mettendo in rilievo il ruolo preminente delle capacità organizzative del pensiero rispetto alle caratteristiche specifiche dei linguaggi di programmazione. L'approccio seguito è di tipo functional-first (IEEE-CS/ACM Computing Curricula 2001): gli esempi relativi all'astrazione procedurale e sui dati sono affrontati applicando il paradigma di programmazione funzionale, per passare infine al paradigma imperativo e ai rudimenti di quello object-oriented nell'ultima parte del corso che tratta l'astrazione sullo stato. Prerequisiti Conoscenze matematiche di base, del livello acquisito nella scuola superiore. Programma: Parte I - Astrazione procedurale (linguaggio Scheme) Algoritmi basati sul calcolo di espressioni numeriche e non numeriche. Approccio funzionale: procedure come astrazione di espressioni. Costrutti di scelta binaria (if) e multipla (cond). Valori numerici, booleani, caratteri e stringhe. Procedure ricorsive. Definizioni ricorsive ben fondate. Modello di valutazione per sostituzione e riduzione. Costrutto let. Ricorsione generale e ricorsione di coda (tail recursion). Verfica della correttezza dei programmi ricorsivi attraverso dimostrazioni per induzione. Ricorsione ad albero e complessità computazionale. Procedure con argomenti e/o valori procedurali. Parte II - Astrazione sui dati (linguaggio Scheme) Introduzione all'astrazione sui dati attraverso semplici strutture. Strutture dati di base: coppie, liste e procedure che operano sulle liste. Liste ordinate e algoritmi di ricerca. Algoritmi di ordinamento e confronto dei costi computazionali. Specifica astratta di una struttura dati e varietà delle scelte realizzative. Strutture dati dal punto di vista dell'utilizzatore (protocollo) e dal punto di vista dell'implementatore (comportamento). Strutture dati notevoli: pile, code, alberi e relative applicazioni. Alberi binari: alberi di valutazione delle espressioni, alberi binari di ricerca. Schemi di visita di alberi: visita anticipata, posticipata e simmetrica. Parte III - Astrazione sullo stato (linguaggi Scheme e Java) Concetto di stato e paradigma imperativo. Principali comandi e costrutti imperativi del linguaggio Java. Array (vettori, matrici) e operazioni sugli array. Rivisitazione di strutture di dati elementari attraverso il paradigma imperativo. Tecniche di memoization e programmazione dinamica. Paradigmi funzionale e imperativo a confronto. Astrazione sullo stato: concetti di classe, oggetto, costruttore e metodo. Realizzazione di strutture dinamiche in Java: pile, code e alberi. Programmi iterativi: correttezza e terminazione. Concetti di asserzione, invariante dell'iterazione e funzione di terminazione. Concetti ricorrenti: Astrazione procedurale; modello computazionale; schema ricorsivo; ricorsione di coda; ricorsione ad albero; schema imperativo; iterazione; algoritmo; complessità computazionale; precondizioni e postcondizioni (specifiche); invariante; terminazione; astrazione sui dati; astrazione sullo stato; schema orientato agli oggetti; protocollo; istanza (oggetto); incapsulamento dei dati; organizzazione modulare. Bibliografia: - Max Hailperin, Barbara Kaiser, Karl Knight, "Concrete Abstractions: An Introduction to Computer Science Using Scheme" - Brooks/Cole Publishing Company, 1999 (ISBN: 0-534-95211-9) http://gustavus.edu/+max/concrete-abstractions-pdfs/index.html - Walter Savitch, Frank M. Carrano, "Programmazione con Java", Prentice-Hall, 2010 (Edizione italiana; ISBN: 9788871926148) - Appunti tratti dalle lezioni; esempi ed esercizi pubblicati sulle pagine web del corso Modalità d'esame: L'esame di Programmazione prevede due prove di accertamento, che si svolgono al termine dei due periodi didattici in cui è articolato il corso, una prova di Laboratorio e una prova orale. All'orale sono ammessi gli studenti che hanno conseguito una valutazione complessiva di almeno 15 punti su 30 nelle prove di accertamento e che hanno inoltre superato la prova di Laboratorio. La discussione orale è opzionale per valutazioni delle prove di accertamento comprese fra 20 e 28 punti. La prova di Laboratorio e la prova orale, nel caso quest'ultima venga sostenuta, concorrono alla valutazione finale nei termini di una media pesata. Durante le prove scritte è consentito consultare libri e appunti. La valutazione di ciascuna delle prove di accertamento viene espressa nei seguenti livelli qualitativi: ottimo, buono, discreto, sufficiente, quasi sufficiente, insufficiente (la valutazione di una singola prova non pregiudica di per se l'ammissione all'orale). La valutazione complessiva delle prove di accertamento o dei recuperi che vertono sull'intero programma viene espressa con un punteggio da 18 a 30, se sufficiente; da 15 a 17, se consente di sostenere la prova orale; insufficiente altrimenti. Il primo appello scritto di Programmazione consiste normalmente nello svolgimento della seconda prova di accertamento. A partire dal secondo appello sono invece previste unicamente prove scritte di recupero, che vertono sull'intero programma del corso, rivolte a coloro che non abbiano potuto partecipare alle prove di accertamento o vi abbiano conseguito una valutazione insufficiente per l'ammissione all'orale, o che comunque desiderino migliorare il profitto. Indipendentemente dalla valutazione, le prove scritte di recupero non consentono l'esonero dalla discussione orale. Nel caso lo studente si cimenti in più di una prova resta valida la migliore valutazione conseguita. Quando tutte le prove richieste (prove scritte, prova di laboratorio, eventuale prova orale) sono state sostenute, ai fini della registrazione dell'esame, che avviene per via elettronica, è necessario che lo studente confermi personalmente l'accettazione della valutazione finale conseguita presentandosi a una delle sessioni di orali previste dal calendario ufficiale pubblicato a cura della Facoltà . In mancanza di un tale assenso esplicito, non si procederà alla verbalizzazione e quindi il superamento dell'esame non potrà essere certificato da parte della segreteria studenti. Ulteriori informazioni sul corso e sulle lezioni, in particolare gli esempi discussi in classe e i temi d'esame, sono resi disponibili attraverso le pagine del corso all'indirizzo: http://www.dimi.uniud.it/claudio/teaching/programmazione/ Programmazione orientata agli oggetti Docente: Prof. Vitaliano Milanese Crediti: 6 Finalità : Il corso di Programmazione Orientata agli Oggetti intende affrontare le problematiche più significative del paradigma ad oggetti inteso quale estensione del paradigma imperativo. Punti chiave saranno quindi le trattazioni delle diverse forme di astrazione (procedurale, formalizzazione dello stato, modellazione di strutture dati, interazione fra processi) che sono legate allo sviluppo di programmi. La discussione di tali aspetti verrà sviluppata mediante l'analisi di problemi e la delineazione di soluzioni. Al fine di disporre di un riscontro operativo, verrà utilizzato un linguaggio di programmazione ad oggetti, di cui saranno preventivamente analizzati gli aspetti basilari. Programma: Concetti e metodologie di programmazione. Classi, oggetti, metodi, messaggi. Protocollo di specifica per le classi e loro realizzazione mediante incapsulamento di variabili e metodi. Istanzazione di classi su oggetti e definizione del loro stato. Analisi funzionale di progettazione: identificazione delle componenti di un problema, definizione delle loro responsabilità e funzionalità , individuazione delle interazioni fra componenti, specifica dei relativi protocolli. Eccezioni e loro gestione. Ereditarietà e polimorfismo: gerarchie di classi, classi astratte e interfacce, classi interne; riscrivibilità di metodi in gerarchie di classi e loro selezione dinamica. Specializzazione e sostituibilità di implementazione. Pattern di progettazione: singleton, factory, chain of responsability, decorator, observer. Linguaggio Java. Caratteristiche e costrutti principali del linguaggio. Realizzazione di classi, interfacce e classi astratte. Tipi, variabili, metodi, messaggi; specifiche statiche e dinamiche, livelli di protezione per dati e metodi. Classi parametriche. Costruttori e istanzazione di oggetti. Ereditarietà : costruzione di sottoclassi e polimorfismo. Riconoscimento a run-time di tipi. Classi interne: tipologie e utilizzo. Eventi. Eccezioni e loro gestione. Clonazione di oggetti. Thread: definizione, uso, sincronizzazione. Impiego del package Swing per la realizzazione di interfacce grafiche. Classi di utilità per l'impiego di strutture dati. Bibliografia: T.Budd Understanding Object-Oriented Programmino with Java Addison-Wesley (2000) B.Eckel Thinking in Java, voll. 1-3 Pearson - Prentice Hall (2006) Modalità d'esame: Scritto + orale Reti di calcolatori Docente: Prof. Marino Miculan Crediti: 9 Finalità : Scopo del corso è introdurre i concetti fondamentali delle moderne reti di calcolatori, e fornire allo studente le necessarie conoscenze per affrontare l'analisi e lo studio di una rete. In particolare verranno presentate le caratteristiche generali delle reti, i modelli ISO/OSI e TCP/IP, e le problematiche affrontate dai principali protocolli ad ogni livello di questi modelli. Inoltre, vengono affrontate le problematiche di sicurezza delle comunicazioni tra calcolatori; a questo scopo, verranno introdotti anche alcune nozioni di crittografia. Programma: - Introduzione alle reti di calcolatori Reti LAN, WAN, MAN. Internetworking. Internet. Protocolli. Modello ISO/OSI. La suite TCP/IP. - Dati e Segnali Segnali analogici e digitali; spettro e suo significato; larghezza di banda; rappresentazione in bit dei valori del segnale digitale. Deterioramento del segnale; Velocità di trasferimento; Teoremi di Nyquist e Shannon per la capacità del canale. Prestazioni: larghezza di banda, throughput, latenza (ritardo), prodotto banda-ritardo, jitter. - Trasmissione dei dati Conversione digitale-digitale; Codifica di line. Campionamento: teorema di Nyquist e sua interpretazione, frequenza di campionamento; filtraggio di segnali (cenni); quantizzazione e codifica; modulazione e demodulazione Delta; trasmissione parallela e seriale: trasmissione seriale sincrona, asincrona e isocrona. Conversione segnale digitale-analogico. Multiplexing e della diffusione; Strategie di occupazione della banda del canale trasmissivo. Mezzi trasmissivi: doppino, cavo coassiale, fibra ottica; etere: onde radio, microonde, infrarossi. Commutazione: struttura tipica di una rete, switch. Commutazione di circuito. Commutazione di pacchetto. Reti a circuito virtuale. Architettura banyan. Reti tradizionali: trasporto di voce e dati (cenni); utilizzo della capacità del doppino nel protocollo ADSL. - Rilevamento e correzione degli errori Aritmetica modulare; codici a blocchi: distanza di Hamming, distanza minima; codici lineari: distanza minima; codice a parità . Codici di Hamming. Codici ciclici. Codici a controllo di somma. - Funzioni di controllo nello strato di collegamento Framing. Controllo del flusso e degli errori. Protocollo semplice e stop-and-wait. Protocolli per canali con rumore. Comunicazione bidirezionale e piggyback delle informazioni di controllo. Accesso singolo: HDLC e PPP (cenni). Accesso multiplo casuale: ALOHA, ALOHA a intervalli, CSMA, CSMA-CD, CSMA-CA; accesso multiplo controllato: prenotazione, sondaggio, testimone; accesso multiplo per canalizzazione: FDMA, TDMA, CDMA con regole su struttura, proprietà e costruzione dei codici. - LAN cablate e senza fili Ethernet: formato del frame, indirizzi e casting dei destinatari, vincoli su lunghezze di frame e cavo, protocolli 10Base, hub, bridge e switch, modalità full-duplex, ethernet veloce e autonegoziazione; protocolli 100Base, 1000Base e requisiti sullo strato fisico. IEEE802.11: architettura ad-hoc, di base con punto d'accesso ed estesa, coordinamento centralizzato e distribuito, contesa, tipi di frame, indirizzamento, nodi nascosti, tipi di strato fisico. - Protocolli di rete Indirizzamento logico. Indirizzamento IP. Maschere. Subnetting e supernetting. CIDR. NAT. IPv4: obiettivi, motivazioni. Funzione dei router. Proprietà di IP, posizione rispetto agli altri protocolli. Formato del datagramma IPv4. Frammentazione. IPv6: motivazioni, caratteristiche extra rispetto a IPv4. Tecniche di transizione da IPv4 a IPv6. Protocolli ancillari ARP, RARP. BOOTP e DHCP. ICMP: tipi di messaggi, uso per notifica errori, uso per analisi della rete: ping e traceroute. IGMP: gruppi multicast. Consegna e instradamento. Tavole di routing. Routing gerarchico. Strumenti netstat e ifconfig. Protocolli di routing. Routing intra-dominio. Vettore delle distanze. RIP. Calcolo spanning tree. OSPF. Routing inter-dominio. Vettore dei percorsi. BGP. Routing multicast. Differenze con unicast e broadcast, applicazioni. Instradamento multicast: alberi basati sulla sorgente, alberi condivisi sul core router. Protocolli di routing multicast (cenni). - Protocolli di trasporto Indirizzamento di processo, servizi connection-oriented affidabili. Porte, servizi. Modello client/server, porte ben note, porte registrate, porte effimere. Socket. Comunicazione a datagrammi connectionless best-effort: UDP. Caratteristiche, formato header, funzionamento. Esempio di client e server UDP in C. Comunicazione a flusso connection-oriented affidabile: TCP. Caratteristiche, segmenti TCP, numero di sequenza, numero di riscontro. Connessioni TCP. Apertura attiva, passiva; vulnerabilità SYN flooding. Trasferimento dati. Chiusura attiva, passiva. Diagramma di stato di TCP. Controllo del flusso in TCP. La finestra scorrevole. Gestione degli errori, ripetizioni, arrivi fuori ordine. Esempio di client e server TCP in C. Protocollo SCTP: caratteristiche, applicazioni, differenze con TCP. Esempi di protocolli su SCTP. Flussi multipli, multihoming. Struttura dei pacchetti SCTP, chunk di dati e di controllo. Associazione a quattro passi con cookies. Sliding window in SCTP. - Il controllo della congestione Parametri del traffico, funzionamento del router. Ritardo e throughput. Controlli proattivi, e misure reattive. Controllo della congestione in TCP. Calcolo della congestion window. Algoritmi di congestion window. Controllo di congestione nei router. Algoritmo RED. Cenni alla qualità di servizio. Gestione del traffico con schedulazione. Algoritmo dell'imbuto per limitare il jitter. - Protocollo DNS Funzionamento dal punto di vista del client. Struttura gerarchica dei domini, FQDN e PQDN. Completamento. Zone e server di zona. Deleghe. Root name servers. Risoluzione ricorsiva, iterativa. Caching. Name server locale. Struttura dei messaggi DNS di richiesta e di risposta. Protocolli di trasporto per DNS: UDP, TCP, vantaggi e svantaggi. Autorità di assegnazione dei nomi di dominio: ICANN, e ISP locali. - Introduzione alla sicurezza Aspetti generali, definizione dei goal e delle minacce alla sicurezza. Esempi. Metodologia generale per la sicurezza. Costi della sicurezza, trade-off. Goal di sicurezza: la triade CIA. Tipi di attacchi. Attacchi passivi (eavesdropping, traffic analysis) e attivi (masquerade, modify, replay, DoS). Attacchi, servizi, meccanismi di sicurezza. Servizi di sicurezza: autenticazione, controllo di accessi, confidenzialità , integrià , non-ripudio, disponibilità . Meccanismi di sicurezza. Modelli della sicurezza per la rete: il modello del canale insicuro, il modello del controllo di accesso. Collocazione dei meccanismi di sicurezza ai vari livelli dello stack OSI. - Introduzione alla crittografia. Definizione dei concetti fondamentali. Modello di crittografia a chiave simmetrica. Principio di Kerckhoff. Tipi di attacchi. Tipo di sicurezza: assoluta, computazionale. Attacco a forza bruta, costo computazionale. Cifrari classici. Cifrari composti (prodotti). Cifrario di Feistel. DES: caratteristiche, funzionamento di principio, attacco brute-force. Attacchi basati sull'osservazione di covert channels. Cifrario 3DES. Cifrario AES (Rijndael): principio di progetto, caratteristiche salienti (chiavi, efficienza...), funzionamento schematico. Modi di funzionamento: ECB, CBC, OFB, CTR. Cifrari stream: principi generali. Il cifrario RC4. Gerarchia di chiavi simmetriche: chiavi master e chiavi di sessione. Esempio di protocollo di distribuzione chiavi con KDC. Cifratura a chiave pubblica, applicazione per cifratura e firma di messaggi. Implementazione RSA. Meccanismo di cifratura e di decifratura, spiegazione funzionamento. Esponenziazione efficiente. Generazione delle chiavi. Attacchi a RSA: fattorizzazione, CCA, quando esponente piccolo usando Teorema Cinese del Resto, timing. Contromisure. - Autenticazione e integrità dei messaggi Autenticazione con cifratura simmetrica, con MAC. Autenticazione con funzioni hash. Requisiti per funzioni hash. SHA: progetto generale, struttura, dimensioni. Autenticazione con MAC; HMAC: progetto generale, struttura, dimensioni, utilizzo. Esempio: sicurezza nel wireless: WEP, attacco a compleanno, WPA e WPA2 con TKIP. Firme digitali. Firme digitali dirette; firme digitali arbitrate. Algoritmo di firma RSA, con verifica. Possibili servizi di sicurezza per email. PGP: servizi offerti, funzionamento, chiavi di sessione, chiavi pubbliche, web of trust. S/MIME: uso di certificati X.509. Posta Elettronica Certificata: servizi di sicurezza implementati, funzionamento. - Autenticazione di entità Meccanismi "something you know", "something you have", "something you are". Autenticazione con password. Protocolli di autenticazione. Chiavi di sessione. Attacchi replay, contromisure. Versioni con cifratura simmetrica, asimmetrica. Kerberos. Protocollo Needham-Schroeder a cifratura simmetrica. Tokens di Kerberos. Gestione delle chiavi simmetriche. Algoritmo Diffie-Hellman per la creazione di chiavi condivise. Attacco man-in-the-middle, contromisura con messaggi autenticati. Autenticazione a chiave pubblica. Distribuzione di chiavi pubbliche. Certificati. Protocolli per mutua autenticazione con chiave pubblica (asimmetrica). Protocollo di Needham-Schroeder a chiave pubblica; attacco di Lowe, correzione. Distribuzione delle chiavi pubbliche. X.509: funzionamento, creazione dei certificati, uso e revoca dei certificati (CRL). Certification authorities, gerarchie di CA, validazione di certificati in gerarchie di CA. PKI. Procedure di autenticazione in X.509. - Sicurezza ai livelli di trasporto e di rete Sicurezza a livello di trasporto: il protocollo SSL. Protocollo di handshaking, di trasporto. Formato dei pacchetti. Tipologie di chiavi usate, limitazioni. Metodi di scambio di chiavi. TLS e differenze con SSLv3. Porting di applicazioni a SSL: principali API. Sicurezza a livello rete: il protocollo IPSec. Modi di funzionamento tunnel/trasporto. Protocolli AH, ESP, in modo trasporto e tunnel. Servizi di sicurezza offerti, funzionamento. Security association. Security Policy. Gestione delle chiavi in IPSec: manuale, automatica. Il protocollo IKE: cenni a Oakley, a ISAKMP. Esempi di scambio ISAKMP: main mode a chiave precondivisa, a chiave pubblica; aggressive mode a chiave pubblica. Virtual Private Networks: definizione, servizi di una VPN, applicazioni. VPN libere (volontarie) e VPN obbligate (gestite). Protocolli usati per implementare VPN (PPTP, L2TP/IPSec). Bibliografia: - Forouzan, Behrouz, "Reti di Calcolatori e Internet". McGraw-Hill, 2008. Forouzan, Behrouz, "Cryptography and Network Security". McGraw-Hill International Edition, 2008. Modalità d'esame: Esame scritto obbligatorio, seguito possibilmente da esame orale Sistemi operativi e laboratorio Docente: Prof. Marina Lenisa Crediti: 12 Finalità : I sistemi operativi sono parte essenziale di un sistema di calcolo. Nella maggior parte dei casi, essi implementano la vera piattaforma sulla quale si svolge tutta l'attività di analisi, sviluppo, implementazione ed esecuzione dei sistemi software, incapsulando ed astraendo dal sistema hardware sottostante. È pertanto necessario che uno studente di Informatica possieda le basi per comprendere le principali problematiche relative all'efficace utilizzo (da utente, da progettista, da programmatore, da amministratore) di un sistema operativo moderno. Allo scopo di fornire tali basi, durante il corso verranno discussi alcuni concetti fondamentali relativi ai sistemi operativi e alle loro funzionalità primarie (gestione dei processori, della memoria e dei dispositivi di ingresso/uscita). Inoltre verranno illustrate tecniche di programmazione concorrente e gli aspetti concernenti il calcolo parallelo e distribuito. Programma: 1. Aspetti generali: * ruolo del sistema operativo (SO) in un sistema di calcolo; * evoluzione dei SO; tipi di SO (batch/interattivi, time-sharing/dedicati, real-time, paralleli, distribuiti, sistemi embedded...); * richiami sull'architettura di un sistema di calcolo (livelli di esecuzione delle istruzioni, gestione delle interruzioni, gestione dell'I/O); * il SO come gestore di risorse: processi, memoria, dispositivi, file, interazione con l'utente; * il SO come macchina virtuale: il nucleo, le chiamate di sistema; * struttura di un sistema operativo (monolitico, a livelli, macchine virtuali, exokernel, microkernel client-server); * esempi: Unix tradizionale, Linux, Solaris, Mach, Windows. 2. Processi e Thread: * il concetto di processo: definizione e ruolo, il descrittore di processo; * la manipolazione dei processi: la creazione/terminazione di un processo, grafo degli stati di un processo, la commutazione di contesto, lo scheduling di processi; * i processi leggeri (threads): modello a thread, thread a livello utente vs. a livello kernel, soluzioni ibride, thread pop-up, passaggio da thread singolo a multithread; * ruolo del nucleo: gestione interruzioni e traps, operazioni di wait e signal su condizioni di attesa; * lo scheduling dei processori: concetti di base, criteri di scheduling, algoritmi di scheduling, scheduling di sistemi a multiprocessore, scheduling real-time. 3. Programmazione concorrente: * race condition e sezioni critiche; * mutua esclusione; * sincronizzazione tra processi e memorie condivise; * scambio messaggi; * primitive di comunicazione e sincronizzazione: semafori, mutex, monitor, scambio di messaggi; * problemi classici: produttore/consumatore, filosofi, lettori/scrittori, barbiere; * stallo: definizione, modelli per lo stallo, identificazione, prevenzione. 4. Gestione della memoria: * gerarchie di memoria: registri, cache, memoria centrale, memoria virtuale, dischi; * il binding degli indirizzi, spazi logici e fisici di indirizzamento, la rilocazione; * tecniche di allocazione: contigua, la paginazione, la segmentazione; la frammentazione; * la memoria virtuale: paginazione a richiesta, algoritmi di sostituzione delle pagine, il thrashing, il modello Working set. 5. Input/Output: * tipi di dispositivi di I/O - principi dell'hardware di I/O; * gestione a basso livello dei dispositivi di I/O - PIO, DMA, DVMA; * il trattamento delle interruzioni, i driver di I/O - I/O bloccante, non bloccante, asincrono - interfaccia per le applicazioni; * i dischi - algoritmi di schedulazione dei dischi. 6. Il file system: * il file, attributi, operazioni, struttura fisica; * metodi di accesso sequenziale, diretto, a indice; * le directory e la struttura logica di un file system: piatta, gerarchica, a grafo; * la protezione; la consistenza; * implementazione dei file system: organizzazione, allocazione e gestione spazio libero, backup e restore; * struttura di un disco: gestione delle partizioni, gestione delle aree di swap; * il caso di Unix: UFS, EXT2. Tabelle in kernel. Il Virtual File System. Risoluzione dei nomi in inode; * operazioni su dischi, partizioni e file system; * cenni ai journaled file system. Bibliografia: - Trasparenze usate in aula dal docente - A. Silberschatz, P.B. Galvin, G. Gagne, Sistemi operativi (ottava ed.). Pearson, 2009. - A. Tanenbaum, I moderni sistemi operativi (terza ed.). Pearson (Prentice Hall), 2009. Modalità d'esame: Prova scritta + prova orale facoltativa