PROGRAMMI DEL CORSO DI LAUREA IN INFORMATICA CORSO DI LAUREA IN INFORMATICA I ANNO CORSO INTRODUTTIVO DOCENTE: Prof. Maurizio Trombetta FINALITÀ DEL CORSO Lo scopo del Corso è quello di livellare la preparazione degli studenti che si iscrivono al primo anno del Corso di Laurea in Informatica, rimediando alle lacune che essi possono avere sui concetti di base e le nozioni essenziali per affrontare i Corsi di Analisi Matematica e di Matematica Discreta. ARGOMENTI TRATTATI Insiemi, elementi e sottoinsiemi. Relazioni di equivalenza e d'ordine. Applicazioni. Numeri naturali, interi, razionali, reali. Equazioni e disequazioni. Funzioni elementari: funzioni razionali, goniometri-che, esponenziali e logaritmiche. Elementi di geometria analitica e di geometria euclidea. MODALITÀ D’ESAME Test scritto TESTO CONSIGLIATO M.TROMBETTA: Corso introduttivo di Matematica, Forum, Udine (2004) ANALISI MATEMATICA DOCENTE: Prof. Gianluca Gorni CREDITI: 12 FINALITÀ DEL CORSO: Finalità del corso: fornire i concetti e le tecniche di base del calcolo infinitesimale e integrale in modo conciso e adatto alle applicazioni. La teoria viene presentata con un buon livello di rigore formale negli enunciati e in quelle dimostrazioni che si decide di svolgere in dettaglio. Si addestrano gli studenti al calcolo, innanzi tutto con carta e penna, ma anche se possibile usando il computer. Un'enfasi del corso è nel familiarizzare gli studenti col significato intuitivo geometrico o dinamico dei concetti di limite, derivata e integrale, in modo che venga loro spontaneo applicare tali strumenti anche a problemi che non si presentino matematicamente gia' formalizzati. PROGRAMMA: numeri reali, funzioni, limiti e continuità, derivate, integrali, serie, applicazioni. MODALITÀ DI ESAME: ci sono due modi acquisire i crediti: il modo principale consiste in 3 compitini scritti durante l'anno, tipicamente senza orale; l'altro modo consiste in un singolo scritto piu' un orale negli appelli fra giugno e settembre; i dettagli del regolamento sono disponibili in rete. BIBLIOGRAFIA: G. C. Barozzi, Primo Corso di Analisi Matematica, Zanichelli. ARCHITETTURA DEGLI ELABORATORI DOCENTE: Prof. Pietro Di Gianantonio CREDITI: 10 FINALITÀ DEL CORSO Il corso ha lo scopo di illustrare la struttura e il funzionamento di un computer e delle sue diverse parti hardware. Il percorso didattico seguito ha inizio con lo studio delle parti più piccole di cui si compone un calcolatore e si muove verso l'alto fino ad arrivare allo studio di architetture complete di calcolatori. Per meglio evidenziare i legami fra il livello hardware e quello software, il corso tratta la programmazione in linguaggio Assembler. PROGRAMMA Introduzione: Prospettiva storica sulle architetture degli elaboratori. Tipologie di computer disponibili. Settori di applicazione dei sistemi di elaborazione, embedded system. Livelli di astrazione nell'analisi di un'architettura. Reti Logiche: Porte logiche elementari. Algebre Booleane. Rappresentazione di funzioni booleane. Forme canoniche e coperture SP e PS. Circuiti combinatori d'uso più frequente. Flip-flop. Clock. Circuiti sequenziali sincroni e asincroni. Chip di memoria: DRAM, SRAM, ROM, Flash. SIMM/DIMM. Rappresentazione delle Informazioni: Sistemi di numerazione binario, ottale, decimale, esadecimale. Conversione tra basi. Rappresentazioni in modulo e segno, complemento a 2. Addizione, sottrazione, moltiplicazione. Overflow. Standard IEEE per numeri in virgola mobile. Rappresentazione di caratteri: ASCII, UNICODE. Codici di rilevamento errori. Memorizzazione: approccio big endian vs. little endian. Struttura di un Computer al livello Microarchitettural: L'architettura di Von Neumann. Architetture CISC vs. RISC. Bus. Registri. ALU. Data Path. Ciclo di fetch-decode-execute. Unita' di controllo. Microoperazioni. Pipeline, processori superscalari. Memorie cache. Predizione di salto, esecuzione fuori ordine. Pentium II. Linguaggio macchina: Tipi di dati. Indirizzamento. Tipi di istruzioni. Formati istruzioni. Programmed I/O, Interrupt, DMA. Input/Output: Dispositivi periferici. Collegamenti mediante bus. Trasferimenti di dati su bus sincroni ed asincroni. Operazioni sul bus. Meccanismi di arbitraggio: daisy-chaining, arbitraggio decentralizzato. Architettura di un tipico PC. Bus ISA, PCI, SCSI, USB. Hard disk. RAID. Dischi Ottici. Gerarchie di Memoria: Memoria centrale, di massa, cache. Cache a mappatura diretta, cache set-associative. Memoria virtuale. Paginazione e segmentazione. MMU. Architetture ad elaborazione parallela: Tipologie di calcolatori paralleli. La classificazione di Flynn. Multiprocessori e Multicomputer. Interconnessione fra processori: bus, rete. Cache coherence, snooping. Architetture UMA e NUMA. Architetture COW (Clusters of Workstations) ed MPP (Massively Parallel Processor). Programmazione Assembler: Architettura del Motorola 68000. Assembler 68000: formato istruzioni, direttive all'assemblatore. Modalita' di indirizzamento. Istruzioni di assegnamento e confronto, effetti sui condition codes. Istruzioni di salto condizionato ed incondizionato. Subroutine. Istruzioni aritmetiche, logiche, di scorrimento, di manipolazione bit. Gestione delle eccezioni. MODALITÀ D'ESAME L'esame di Architettura degli Elaboratori si compone di una prova scritta, di una prova di laboratorio, e di una prova orale. La prova scritta richiede di svolgere degli esercizi analoghi a quelli presentati nelle esercitazioni, e di rispondere ad alcune domande sugli argomenti trattati a lezione. Durante il corso, verranno svolti tre compitini. Gli studenti che superano positivamente i compitini vengono esonerati dalla prova scritta. TESTO ADOTTATO Andrew S. Tanenbaum. Architettura dei computer, un approccio strutturato. UTET Libreria, 2000. LABORATORIO DI ARCHITETTURA DEGLI ELABORATORI DOCENTI: Dott.ri Forti – Sciavicco - Zantoni CREDITI: 4 FINALITÀ DEL CORSO Il laboratorio ha lo scopo di far sperimentare concretamente allo studente, mediante la realizzazione di brevi progetti al calcolatore, alcuni dei temi di rilievo trattati nel corso di Sistemi di Elaborazione/Architettura degli Elaboratori. TIPI DI PROGETTO Reti Logiche: Progetto e simulazione di reti combinatorie e sequenziali in ambiente Macintosh. Realizzazione di librerie di componenti digitali di base, e loro uso per la costruzione modulare di sistemi digitali più complessi. Rappresentazioni numeriche: Algoritmi concernenti la rappresentazione e l'elaborazione di numeri interi senza segno, con segno, reali in virgola fissa e in virgola mobile. Programmazione Assembler: Sviluppo di programmi mirato ad esplorare le diverse caratteristiche dell'Assembler Motorola 68000: direttive all'assemblatore, istruzioni di assegnamento e confronto, le varie modalità di indirizzamento, sfruttamento dei condition codes, strutture di controllo, istruzioni aritmetico-logiche, manipolazione singoli bit, subroutine, allocazione/deallocazione di memoria sullo stack. Oltre alle tecniche di programmazione Assembler di base, verranno affrontate anche alcune tecniche avanzate, in particolare per l'implementazione e trattamento in assembler di strutture dati (vettori, stringhe, matrici, insiemi, liste), e per la gestione delle eccezioni. MODALITÀ D'ESAME L'esame consiste nella preparazione da parte dello studente di una breve relazione scritta su un progetto volto a riassumere le diverse tematiche affrontate in laboratorio. Il progetto da svolgere va richiesto al docente e la relativa relazione va consegnata prima dello svolgimento dell'esame orale di Sistemi di Elaborazione/Architettura degli Elaboratori. FISICA DOCENTI: Prof. Lorenzo Santi CREDITI: 6 FINALITÀ DEL CORSO Il corso fornisce le conoscenze di base della Fisica. Questo comprende nozioni di Meccanica, di Termodinamica e di Elettromagnetismo. L'impostazione del corso è essenzialmente operativa, nel senso che la capacità di risolvere problemi è considerata determinante. ARGOMENTI Introduzione alla Fisica, ordini di grandezza, unità di misura. Cinematica. Forze e principi della Dinamica. Energia cinetica e potenziale. Forza gravitazionale e potenziale gravitazionale, leggi di Keplero. Urti, conservazione della quantità di moto. Termodinamica. Forze elettriche e magnetiche. Introduzione ai circuiti elettrici. Introduzione elementare alle onde elettromagnetiche. MODALITÀ D'ESAME L'esame consiste in una prova scritta. BIBLIOGRAFIA Tipler: Introduzione alla Fisica, Zanichelli Dispense del corso. MATEMATICA DISCRETA DOCENTE: Dott. Mario Mainardis CREDITI: 9 FINALITÀ DEL CORSO: Introdurre gli strumenti fondamentali di Matematica Discreta, Algera e Geometria con particolare attenzione alle loro applicazioni in Informatica. PROGRAMMA: Insiemi ed applicazioni. Aritmetica: numeri interi, divisori e multipli, algoritmo di Euclide, cenni sulle equazioni lineari diofantee, numeri primi, fattorizzazione, congruenze, rappresentazione n-adica dei numeri interi; numeri complessi,. Strutture algebriche: gruppi, sottogruppi, classi laterali, sottogruppi normali, quozienti, omomorfismi; anelli, ideali. Algebra Lineare: spazi vettoriali, dipendenza lineare, basi, applicazioni lineari, matrici, determinante, autovalori ed autovettori. MODALITÀ D’ESAME: Prova scritta ed eventuale esame orale. LIBRO DI TESTO: Alberto Facchini: Algebra e Matematica Discreta ed. Decibel-Zanichelli 2001. PROGRAMMAZIONE DOCENTI: Dott. Claudio Mirolo - Dott. Fabio Alessi CREDITI: 10 FINALITÀ DEL CORSO: Il corso si propone di sviluppare le competenze culturali e metodologiche di base per affrontare i problemi che ammettono soluzioni algoritmiche, stimolando l’analisi critica degli strumenti a disposizione dell’informatico. Al termine del corso lo studente dovrebbe aver acquisito le capacità operative necessarie a progettare e formalizzare semplici programmi, applicando i paradigmi funzionale e object-oriented, e ad analizzare almeno a livello intuitivo gli elementi critici per il corretto comportamento in relazione alle specifiche. PREREQUISITI: Conoscenze matematiche di base, del livello fornito nella scuola superiore. PROGRAMMA: Parte I - Astrazione procedurale (linguaggio funzionale Scheme) Algoritmi basati sul calcolo di espressioni numeriche e non numeriche. Procedure come astrazione di espressioni. Costrutti di scelta e valori di verità. Definizioni ricorsive. Modello di valutazione per sostituzione e riduzione. Ricorsione generale e ricorsione di coda (tail recursion). Approccio iterativo come ricorsione di coda. Dimostrazioni di correttezza per induzione e concetto di invariante nella ricorsione di coda. Costrutto let. Parte II - Astrazione sui dati (linguaggio Scheme) Introduzione all’astrazione sui dati attraverso semplici dati strutturati. Specifica astratta di una struttura dati e diversità delle scelte realizzative. Dati di dimensione variabile: liste. Strutture dati dal punto di vista dell’utilizzatore e dal punto di vista dell’implementatore. Pile e code. Alberi e alberi di valutazione delle espressioni. Esempi notevoli. Parte III - Astrazione relativa allo stato (linguaggi Scheme e Java a confronto) Concetto di stato e paradigma imperativo/sequenziale. Vettori e operazioni relative. Rivisitazione delle strutture di dati elementari attraverso il paradigma imperativo. Matrici. Costi computazionali di un algoritmo. Tecniche di memoization e programmazione dinamica. Principali comandi e costrutti del linguaggio Java. Programmi iterativi. Invarianti e correttezza dei programmi iterativi; problema della terminazione. Modello funzionale come semantica di un programma imperativo. Elementi di programmazione object-oriented in Java: classi e oggetti; campi, costruttori e metodi. Concetto di invariante di classe e linguaggi per la formalizzazione e per la verifica runtime di asserzioni. Esempi notevoli. Concetti ricorrenti: Approccio imperativo e approccio ricorsivo; invarianti; livelli di astrazione; forme di astrazione; stato e transizione di stato; approccio object-oriented. 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/ MATERIALE DI STUDIO CONISGLIATO: 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) John Lewis, William Loftus Java - Fondamenti di progettazione software Addison-Wesley, 2000 (Edizione italiana 2001; ISBN: 88-7192-092-9) Appunti tratti dalle lezioni; esempi ed esercizi pubblicati sulle pagine web del corso. MODALITÀ D’ESAME: L’esame di Programmazione prevede tre prove di accertamento, che si svolgono al termine dei tre periodi didattici in cui è articolato il corso, una prova di Laboratorio (corso affiancato di Laboratorio di Programmazione) e una prova orale. All’orale sono ammessi gli studenti che hanno conseguito una valutazione complessiva di almeno 15 punti su 30 nelle tre 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. La valutazione di una singola prova di accertamento viene espressa nei seguenti livelli: ottimo, buono, discreto, sufficiente, quasi sufficiente, insufficiente. 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. Infine, la valutazione della prova di laboratorio viene espresse in una scala A - B - C quando la prova è superata. Il primo appello scritto di Programmazione consiste normalmente nello svolgimento della terza 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 abbiano conseguito una valutazione insufficiente per l’ammissione all’orale. Indipendentemente dalla valutazione, le prove scritte di recupero non consentono l’esonero dalla discussione orale. LABORATORIO DI PROGRAMMAZIONE DOCENTI: Dott.ri Marzano - Casagrande - Micheloni - Snidaro CREDITI: 4 OBIETTIVI DEL CORSO • • • Conoscenza dei costrutti di base di un linguaggio di programmazione e capacità di utilizzarlo per formalizzare semplici programmi. Consapevolezza delle varie fasi di sviluppo di un programma, in particolare compilazione, caricamento/collegamento e debugging. Acquisizione di familiarità con il calcolatore e, più specificamente, con gli ambienti di sviluppo di programmi. SAPER FARE • • • • Utilizzare un linguaggio di programmazione per formalizzare programmi iterativi e ricorsivi. Utilizzare in modo elementare un ambiente di sviluppo di programmi. Utilizzare gli strumenti standard di interfaccia per la comunicazione dei dati in ingresso e in uscita durante l’esecuzione di un programma (gestione di tastiera, accesso al file system). Organizzare i programmi più complessi in forma modulare. CONTENUTI DEL CORSO - Gli argomenti principali trattati durante il corso sono i seguenti: • • • Esercizi per familiarizzare con i principali costrutti dei linguaggi di programmazione. Realizzazione di semplici programmi numerici iterativi e ricorsivi. Realizzazione di programmi che fanno uso di tipi di dato strutturati. • Realizzazione di un progetto che utilizzi gli strumenti disponibili nell’ambiente di sviluppo: lo scopo è di realizzare una semplice istanza del processo che porta dalla formulazione di un problema all’implementazione di un programma che lo risolve. Verifica separata delle singole componenti e del programma complessivo. • • Stesura di una relazione con specifiche, analisi del problema, soluzione tecnica adottata e discussione dei risultati. II ANNO ALGORITMI E STRUTTURE DATI DOCENTE: Prof. Alberto Policriti CREDITI: 10 FINALITÀ DEL CORSO 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. ARGOMENTI 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 Algoritmi 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 - Appunti delle lezioni; - Cormen T.H., Leiserson C.E., Rivest R.L, Introduction to Algorithms, MIT Press, Second edition, 2001. (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. LABORATORIO DI INFORMATICA: ALGORITMI E STRUTTURE DATI DOCENTI: Dott.ri Scalabrin – Bresolin - Gentilini CREDITI: 4 OBIETTIVI DEL CORSO Scopo del corso è la realizzazione di algoritmi di una certa complessità, che operano su strutture dati articolate, e la determinazione sperimentale delle relative prestazioni. In questo modo, si intende dare un supporto concreto ai fini di una migliore comprensione delle idee e dei concetti discussi nel corso teorico di Algoritmi e Strutture Dati. Si assume una conoscenza non superficiale del linguaggio di programmazione Pascal, anche se i progetti potranno essere realizzati anche in C, C++, Java, ed altri linguaggi. PROGRAMMA • Misura dei tempi di calcolo e confronto fra diversi ordini di complessità. Stime teoriche dei tempi di calcolo nel caso di semplici algoritmi, notazione O-grande. Misure dei tempi, errore relativo, discussione dei risultati sperimentali. Limiti dell'analisi asintotica e ruolo delle costanti moltiplicative. • Stima del tempo medio. Generatori di numeri casuali, tempo medio, varianza, intervalli di confidenza. • Code tuning La regola del 80-20. Tecniche per migliorare l'efficenza di alcuni programmi. Eliminazione delle chiamate di procedura, macroespansione. Valutazione sperimentale. Sperimentazione di algoritmi e strutture dati sviluppati nel corso teorico. Algoritmi di ordinamento; realizzazione di altre strutture dati e algoritmi (da determinare). MODALITÀ D'ESAME L'esame è integrato con il corso di Algoritmi e Strutture Dati. La prova di laboratorio dà luogo ad un giudizio espresso nell'intervallo A(ottimo) - B (buono) - C (sufficiente) - D (insufficiente, prova non superata). La prova consiste nella risoluzione di alcuni esercizi durante l'anno e nella redazione di tre relazioni, in cui devono essere descritti i risultati degli esperimenti assegnati che saranno assegnati. Le relazioni, che devono essere prodotte usando strumenti informatici di scrittura e produzione di tabelle e grafici, saranno valutate anche relativamente all'efficacia della presentazione dei dati sperimentali. Relazioni ed esercizi sono da consegnarsi in date fissate durante l'anno. Alternativamente, è permessa (anche se sconsigliata) la consegna cumulativa di tutti gli elaborati insieme con l'ultima relazione. MATERIALE DI STUDIO CONSIGLIATO S. Martini: appunti disponibili sulla pagina web Riferimento generale: Cormen et al., Introduction to Algorithms, MIT Press. ASPETTI SOCIALI ED ETICA PROFESSIONALE DOCENTE: Dott. Antonio Piva CREDITI: 3 Gli obiettivi principali del corso sono: rendere lo studente consapevole del contesto sociale e delle implicazioni psicologiche, sociali ed etiche conseguenti alle innovazioni tecnologiche nel campo dell’informatica e al relativo utilizzo; rendere lo studente consapevole delle implicazioni deontologiche della propria attività professionale, nei confronti dei clienti e utenti, e responsabilizzarlo sulle conseguenze a tutti i livelli del proprio operato. In particolare il corso prevede la trattazione dell’informatica giuridica con particolare attenzione alle innovazioni apportate da internet. Verranno trattate le seguenti tematiche: - liberalizzazione delle telecomunicazioni a livello internazionale e nell’ordinamento italiano - La PRIVACY E LA SICUREZZA; nozione e sviluppo di privacy: dalle linee guida dell’OCSE del 1980 alla direttiva europea, la normativa italiana in materia di dati personali, le disposizioni applicabili - - - alla rete, gli obblighi per gli Internet Service Provider, la gestione della sicurezza, le figure Giuridiche previste dal regolamento. La tutela della segretezza della posta elettronica nell’ordinamento italiano e negli altri ordinamenti. 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 diritto, i beni oggetto del diritto in particolare il software e le banche dati. La disciplina della BANCHE DATI nell’ordinamento italiano, nelle normative europee e nelle convenzioni internazionali. Le opere multimediali e gli aspetti giuridici. I DOMAIN NAMES di internet e gli aspetti giuridici; le procedure di registrazione ed il grabbing. Il DN ed il marchio, analisi di alcuni casi di protezione giuridica ed alcune decisioni dei tribunali italiani; Le autorità preposte alla registrazione ed al controllo degli accessi; la risoluzione dei conflitti. L’utilizzo dei LINK nei Web ed alcuni casi giuridici. La MUSICA DIGITALE in rete; la proprietà intellettuale nella musica, analisi di alcune vicende giudiziarie La MUSICA DIGITALE in rete; la proprietà intellettuale nella musica, analisi di alcune vicende giudiziarie. - LA FIRMA DIGITALE E LA CARTA D’IDENTITA’ ELETTRONICA; 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 dall’AIPA ed i certificati elettronici; le normative italiane ed Europee sulla firma elettronica; firma autografa e digitale a confronto; Accenni sulla Carta d’Identità elettronica. L’Informatica nella Pubblica Amministrazione: la Rete unitaria della PA, alcuni progetti intersettoriali. - Il COMMERCIO ELETTRONICO; le direttive dell’Unione Europea in materia; i CONTRATTI mediante Internet, le normative italiane vigenti in materia, i contratti a distanza, i contratti Telematici; la tutela dei consumatori in Internet; i PAGAMENTI ELETTRONICI: validità del pagamento, modi e strumenti di pagamento, la moneta elettronica, le normative a livello Europeo e Nazionale; il regime fiscale; i PROVIDER ed il nostro ordinamento; La PUBBLICITA’ in RETE: definizioni e disciplina legale, i banner, lo spamming in Usa in UE e nell’ordinamento italiano. La CRIMINALITA’ INFORMATICA e Il DIRITTO PENALE di INTERNET; la tutela dei beni informatici, i Virus, la violazione del domicilio informatico, gli hackers, la normativa penale di riferimento a livello europeo ed in Italia. LA QUALITA’. Storia ed evoluzione della qualità, dalle norme ISO 9000:1994 alle Vision 2000; la loro applicabilità alle più diverse situazioni ed organizzazioni, la terminologia, il Sistema di Gestione della Qualità, l’orientamento all’adeguatezza del sistema gestionale, i principi della qualità, i requisiti delle norme, l’approccio ai processi, il manuale, le verifiche ispettive, la gestione delle non conformità, delle azioni preventive e correttive, la soddisfazione del cliente, risorse umane e qualità: il lavoro di gruppo e il miglioramento continuo. - CALCOLO DELLE PROBABILITÀ E STATISTICA DOCENTE: Prof. Luigi Pace CREDITI: 6 FINALITÀ DEL CORSO L'obiettivo del corso è introdurre lo studente a quelli che sono i concetti fondamentali del Calcolo delle probabilità e della Statistica, quale strumentazione di base per lo studio dei fenomeni aleatori. Tali nozioni verranno presentate sottolineando l'ambito delle applicazioni. TEMATICHE 1. Introduzione al calcolo delle probabilità Richiami di calcolo combinatorio; fenomeni aleatori; spazi di probabilità; gli assiomi della probabilità; probabilità condizionata e legge delle probabilità composte; indipendenza stocastica fra eventi; teorema di Bayes. 2. Variabili casuali unidimensionali Definizione di variabile casuale (v.c.); la funzione di ripartizione; v.c. discrete e v.c. assolutamente continue; funzioni di densità e loro proprietà; media, mediana, moda, varianza e momenti di ordine successivo; disuguaglianze notevoli; funzione generatrice dei momenti e sue proprietà; le principali distribuzioni di probabilità discrete e assolutamente continue. 3. Variabili casuali multidimensionali V.c. bivariate discrete e assolutamente continue; funzione di ripartizione congiunta; distribuzioni di probabilità marginali; indipendenza tra due v.c.; covarianza e coefficiente di correlazione; distribuzioni di probabilità condizionate; somme di v.c.. 4. Convergenza e teoremi limite Successioni di v.c.; convergenza in probabilità; legge debole dei grandi numeri; convergenza in distribuzione; teorema centrale del limite. 5. Introduzione all'inferenza statistica Il problema dell'inferenza statistica; modelli statistici parametrici; statistiche campionarie; media campionaria; varianza campionaria. 6. Stima puntuale e intervallare Introduzione alla stima puntuale e intervallare; stime e stimatori; proprietà degli stimatori; metodo della massima verosimiglianza; il metodo dei momenti; intervalli di confidenza e coefficiente di confidenza; intervallo di confidenza per la media e per la varianza di una popolazione normale; il caso di una popolazione bernoulliana; intervalli di confidenza approssimati. 7. Verifica di ipotesi Introduzione alla teoria dei test statistici; test di ipotesi sulla media e sulla varianza di una popolazione normale; test per una percentuale; verifica di ipotesi sulla media per grandi campioni. MODALITÀ D’ESAME L’esame consiste in una prova scritta seguita, per i sufficienti, da una prova orale. Entrambe le prove dovranno essere superate nello stesso appello. TESTI CONSIGLIATI Appunti delle lezioni. G. Cicchitelli Probabilità e Statistica, Maggioli 2a ed., 1992. P. Baldi Calcolo delle Probabilità e Statistica, McGraw-Hill, 1992. CALCOLO SCIENTIFICO DOCENTE: Prof.ssa Rossana Vermiglio CREDITI: 6 OBIETTIVI FORMATIVI Portare lo studente ad avere familiarita' con alcune delle tematiche di base dell' analisi numerica attraverso la conoscenza, la sperimentazione e l'analisi critica dei principali metodi numerici; accrescere le sue capacita' di programmazione. Al termine del corso lo studente sapra’ riconoscere, analizzare e risolvere numericamente alcuni problemi della matematica; 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; sviluppare software numerico, saper stimare l'attendibilita' dei risultati ottenuti ed interpretarli. CONTENUTI DEL CORSO Gli argomenti principali del corso sono i seguenti: Numeri e aritmetica di macchina, analisi degli errori; euqazioni non lineari; risoluzione di sistemi lineari con metodi diretti; approssimazione di dati e funzioni (interpolazione e minimi quadrati), funzioni splines; soluzione di sistemi sovradeterminati, metodo QR, metodo SVD; integrazione e differenziazione numerica; cenni equazioni differenziali e software scientifico. Le esercitazioni saranno integrate con esperienze in laboratorio. PREREQUISITI: Matematica discreta, Analisi Matematica. MODALITÀ D’ESAME: svolgimento di alcuni esercizi di laboratorio, prova scritta e orale. LIBRI DI TESTO [1] V. COMINCIOLI; Analisi numerica, McGraw Hill, 1990. [2] D. BINI, M. CAPOVANI, O. MENCHI; Metodi numerici per l'algebra lineare, Zanichelli, 1988. [3] R. BEVILACQUA, D. BINI, M. CAPOVANI, O. MENCHI Metodi Numerici, Zanichelli, 1992. 783-799. [4] G. MONEGATO, Fondamenti di calcolo numerico, CLUT (1998). [5] G. W. Stewart; Afternotes on Numerical Analysis, SIAM 1996 CAMPI E ONDE ELETTROMAGNETICHE DOCENTE: Dott. Giovanni Luigi Michelutti CREDITI: 6 FINALITÀ DEL CORSO Il corso ha un carattere culturale, di completamento dello studio iniziato nel corso di Fisica, ed inoltre è propedeutico al corso di Laurea di Specializzazione in Fisica Computazionale. Il corso contiene materiale sulle onde che è introduce lo studio di concetti di base della Meccanica Quantistica. ARGOMENTI DEL CORSO Approfondimento dei concetti fondamentali dell'elettrodinamica classica. Le equazioni di Maxwell. Le onde in sistemi continui meccanici. Le onde elettromagnetiche. Ottica ondulatoria. Teoria della relatività speciale. Interazione luce-materia, irraggiamento da parte di cariche accelerate, sorgenti di radiazione. MODALITÀ D'ESAME L'esame consiste in una prova scritta. BIBLIOGRAFIA: dispense del corso. ELEMENTI DI LOGICA MATEMATICA DOCENTE: Prof. Alberto Marcone CREDITI: 3 FINALITÀ DEL CORSO Lo scopo del corso è quello di acquisire gli elementi di base della logica matematica, con particolare attenzione ai metodi algoritmici. PROGRAMMA Calcolo preposizionale: sintassi e semantica, soddisfacibilità e conseguenza logica, trasformazione in forma normale congiuntiva o disgiuntiva, tableau semantici. Calcolo dei predicati: sintassi e semantica, soddisfacibilità e conseguenza logica, tableau semantici. Traduzione dal linguaggio naturale al linguaggio formale. MODALITÀ D'ESAME prova scritta, con prova orale facoltativa. BIBLIOGRAFIA M. Ben-Ari, Mathematical Logic for Computer Science, 2nd edition, Springer, 2002. FONDAMENTI DELL'INFORMATICA 1 DOCENTE: Prof. Furio Honsell CREDITI: 6 OBIETTIVI Far riflettere gli studenti sulle limitazioni dei procedimenti algoritmici, limiti sia intrinseci sia dettati dalle risorse a disposizione. Gli studenti incontreranno il concetto di funzione calcolabile, di linguaggio formale, di automa, di classe di complessità e le loro reciproche relazioni. Dopo aver superato l'esame si ritiene che lo studente: conosca l'esistenza di problemi intrinsecamente irrisolubili per via algoritmica; abbia una chiara idea delle relazioni note tra le classi di complessità logaritmica, polinomiale deterministica e non deterministica, esponenziale; conosca le prime nozioni relative ai linguaggi formali e alle loro relazioni con gli automi. CONTENUTI DEL CORSO 1.Calcolabilità. Modelli di calcolo: la Macchina di Turing. Funzioni calcolabili e problemi decidibili. Enumerazione delle funzioni calcolabili, funzione universale. Tesi di Church. Esistenza di problemi non decidibili. Problemi semidecidibili. 2. Complessità. Macchine di Turing con risorse limitate. Classi di complessità. Alcune classi: P, NP, EXP, PSPACE. Riduzioni polinomiali e problemi completi. NP-completezza, teorema di Cook, esempi di problemi NP completi. 3. Linguaggi formali. Grammatiche a struttura di frase. Linguaggi regolari, espressioni regolari, automi finiti. Linguaggi liberi dal contesto, alberi di derivazione; automi a pila. MATERIALE DI STUDIO Appunti delle lezioni. 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. PROGRAMMAZIONE ORIENTATA AGLI OGGETTI DOCENTE: Dott. Claudio Mirolo CREDITI: 6 OBIETTIVI DEL CORSO L’obiettivo principale del corso è quello di discutere il paradigma della programmazione orientata agli oggetti come evoluzione della programmazione strutturata e della costruzione di tipi di dati astratti, introdotti nel corso di Programmazione. Verranno inoltre presentate le caratteristiche di base di un linguaggio di programmazione orientato agli oggetti. I concetti saranno introdotti soprattutto attraverso la discussione di esempi. Al termine del corso lo studente dovrebbe aver acquisito capacità di problem solving per progettare soluzioni object-oriented, basate sulla definizione di un insieme di moduli interagenti fra di loro. PREREQUISITI: Corso di Programmazione; alcuni dei contenuti dei corsi di Matematica Discreta e Analisi Matematica. CONTENUTI DEL CORSO: Gli argomenti principali trattati durante il corso sono indicati qui di seguito. Gli esempi sono sviluppati utilizzando il linguaggio di programmazione Java. Concetti e metodologie Nozioni di base: moduli interagenti, messaggi e metodi, responsabilità, classi e istanze, gerarchie di classi e ereditarietà, overriding di metodi, eccezioni. Progettazione orientata agli oggetti: identificazione delle componenti e definizione delle responsabilità; definizione del comportamento e delle interazioni fra moduli; specifica dell’interfaccia; concetto di stato. Benefici della programmazione orientata agli oggetti: incapsulamento delle informazioni, maggiore affidabilità e potenzialità di riutilizzo del codice, condivisione di codice, polimorfismo, rapidità di prototipazione. Ereditarietà: sottoclassi, tipi e compatibilità per sostituzione. Specializzazione e altre forme di ereditarietà. Ereditarietà del codice ed ereditarietà del comportamento. Selezione dinamica dei metodi. Confronto fra ereditarietà e composizione relative a classi; composizione dinamica. Classi nidificate. Clonazione. Polimorfismo e variabili polimorfe. Overloading. Overriding: sostituzione e raffinamento. Metodi astratti. Modelli di progetto (design patterns): composite; decorator; factory method; flyweight; observer; prototype; proxy; strategy. Paradigma model-view-controlller. Linguaggio di programmazione Java Caratteristiche e costrutti principali del linguaggio Java. Realizzazioni di classi in Java: struttura di un programma; campi per rappresentare le variabili di stato; costruttori; attributi di campi e metodi; istanziazione di oggetti; ereditarietà e interfaccie. Classi interne e organizzazione del codice. Modello degli eventi in Java. Gestione delle eccezioni. Thread multiple di esecuzione e sincronizzazione. Garbage collection. Alcune caratteristiche avanzate dell’ambiente di programmazione basato su Java. Progetto di interfacce verso l’utente (GUI) attraverso la libreria Application Windowing Toolkit (AWT) di Java: componenti e layout manager. Input e output in Java. Altre classi di utilità: Math, Random, System, String. Grafica elementare in Java. Classi Collection: Vector e confronto con gli array; Dictionnary. Applet e programmazione per la rete. Discussione di esempi in Java. Concetti ricorrenti: Livelli di astrazione; astrazione sui dati; stato; approccio object-oriented; incapsulamento dell’informazione; riutilizzo del codice. 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/prog_oo/ MATERIALE DI STUDIO CONSIGLIATO: Understanding Object-Oriented Programming with Java Addison-Wesley, 2000 (ISBN: 0-20161273-9) Appunti tratti dalle lezioni. TESTI SUL LINGUAGGIO JAVA: David Arnow and Gerald Weiss Introduction to Programming Using Java: An Object-Oriented Approach Addison-Wesley, 1998 (ISBN: 0-201-31184-4) oppure John Lewis, William Loftus Java - Fondamenti di progettazione software Addison-Wesley, 2000 (Edizione italiana 2001; ISBN: 88-7192-092-9) TESTI PER CONSULTAZIONE B. Liskov, J. Guttag Program Development in Java Addison-Wesley, 2000; X. Jia Object Oriented Software Development Using Java Addison-Wesley, 2002; B. Eckel Thinking in Java Prentice Hall, 2000; K.A. Lambert, M. Osborne A Framework for Program Design and Data Structures Brooks/Cole, 2000; MODALITÀ D’ESAME L’esame di Programmazione Orientata agli Oggetti prevede due prove di accertamento, che si svolgono al termine dei due periodi didattici in cui è articolato il corso, e una prova orale. All’orale sono ammessi gli studenti che hanno conseguito una valutazione complessiva di almeno 15 punti su 30 nelle due prove di accertamento. La discussione orale non è obbligatoria per valutazioni delle prove di accertamento comprese fra 20 e 28 punti. Opzionalmente, ai fini della discussione orale il candidato può concordare con il docente la realizzazione di un progetto di programmazione che applichi concetti e metodologie introdotti durante il corso. In tal caso, la discussione del progetto costituirà la parte prevalente della prova orale. Nel caso venga sostenuta, la prova orale concorre alla valutazione finale nei termini di una media pesata. La valutazione di una singola prova di accertamento viene espressa nei seguenti livelli: ottimo, buono, discreto, sufficiente, quasi sufficiente, insufficiente. 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 Orientata agli Oggetti 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 abbiano conseguito una valutazione insufficiente per l’ammissione all’orale. Indipendentemente dalla valutazione, le prove scritte di recupero non consentono l’esonero dalla discussione orale. SISTEMI OPERATIVI DOCENTI: Prof. Marina Lenisa – Dott. Marco Comini CREDITI: 11 FINALITÀ DEL CORSO I sistemi operativi sono parte essenziale di un sistema di calcolo e pertanto è necessario che uno studente di informatica possieda le basi per l’efficace valutazione e utilizzo da utente da progettista da programmatore da amministratore di un sistema operativo moderno allo scopo di fornire tali basi questo corso presenta i concetti fondamentali relativi alle funzionalità primarie dei sistemi operativi come la gestione dei processori della memoria e dei dispositivi di ingresso/uscita. Inoltre il corso fornisce le basi della programmazione concorrente e dei principali modelli di calcolo parallelo e distribuito. PROGRAMMA 1. Aspetti generali. Ruolo del sistema operativo (SO) in un sistema di calcolo; interfacce. Tipi di SO, struttura di un sistema operativo. 2. I processi. Definizioni, concetti base, operazioni sui processi. Commutazione di contesto. I processi leggeri (threads): modello a thread. Lo scheduling dei processori: concetti di base, criteri di scheduling, algoritmi di scheduling. 3. Programmazione concorrente. Race conditions, sezioni critiche, mutua esclusione, sincronizzazione tra processi e memorie condivise, primitive di comunicazione e sincronizzazione. Stallo: definizione, modelli per lo stallo, identificazione, prevenzione. 4. Gestione della memoria. Gerarchie di memoria. Strategie di allocazione, 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. 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. Le directory e la struttura logica di un file system. Aspetti di sicurezza e protezione. Implementazione dei file system. Operazioni su dischi, partizioni e file system. Cenni ai journaled file system. 7. Sistemi con processori multipli. Processori strettamente/debolmente accoppiati. Multiprocessori. Multicomputer. Memoria condivisa distribuita. Sistemi distribuiti. Servizi di rete, e servizi distribuiti. Il modello client/server, protocolli, socket. Modelli distribuiti. Middleware di comunicazione. Chiamate di procedure remote, NFS. MODALITÀ D’ESAME Prova scritta, seguita eventualmente da una prova orale. Per l’ammissione all’orale e la registrazione è necessario aver svolto con successo i progetti obbligatori del corso di Laboratorio di Sistemi Operativi. BIBLIOGRAFIA • A. Tanenbaum, I moderni sistemi operativi (II ed.). Jackson Libri, 2002. ISBN 88-256-1898-0. È il libro di testo principale. • Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, Sistemi Operativi (6 ed.). Addison-Wesley, 2002. Ottima alternativa al precedente. • Graham Glass, King Ables, UNIX for Programmers and Users, seconda edizione. Prentice-Hall, 1999. per consultazione per la programmazione concorrente e di sistema. • Trasparenze usate in aula. PROPEDEUTICITÀ ASD, Programmazione LABORATORIO DI SISTEMI OPERATIVI DOCENTI: Dott. Ivan Scagnetto CREDITI: 4 CONTENUTI DEL CORSO - Gli argomenti principali trattati durante il corso sono indicati qui di seguito: 1. Sistema Operativo UNIX. Struttura, interfaccia utente, varianti (Solaris, Linux). 1. Introduzione alla shell UNIX. Ruolo e varianti. Procedura di login. Organizzazione del file system, comandi base della shell per la gestione di files (cd, ls, rm, tail, wc). Manuale online. La shell bash: espansione del pathname, ridirezione del I/O, pipe, jobs in background, il comando history, editing della linea di comando, completamento di comandi. Gli editors vi e (X)emacs. 2. Comandi rilevanti della shell. - Gestione di processi: ps, top. - Monitoraggio della memoria: df, du, free, top. - Comandi filtro: ricerca (grep, find), ordinamento (sort), editing (sed, cut, paste). - L'utility awk. 3. Shell script. Variabili, passaggio dei parametri, strutture di controllo, login script. 4. Programmazione di sistema. - Controllo di processi: le system call fork(), exec(), wait(), exit(), getpid(), etc. - File system. Apertura, lettura, scrittura di files: le system call open(), creat(), access(), read(), write(), lseek(). I/O bufferizzato e non bufferizzato. Tempi di esecuzione di processi. Inode e gerarchia di directory. Accesso agli attributi dei file tramite la system call stat(). Modifica di attributi: chmod(), umask(), truncate(), etc. Creazione, rimozione di directory: mkdir(), rmdir(). Creazione, rimozione di link(): link(), unlink(). Apertura e lettura di directory: opendir(), readdir(). - Comunicazione tra processi (IPC). Pipe, Named pipe. Shared memory: le system call shmget(), shmat(), shmdt(). Cenni ai Semafori. - Threads e Multithreding. 5. Amministrazione di sistema. - Installazione di Linux: partizionamento del disco, creazione dei file system, configurazioni, installazione di applicazioni (rpm, tgz, make), X, demoni, moduli kernel. - Gestione degli account utente: creazione e modifica di account. Gestione delle password. Sicurezza. - Installazione di servizi di rete: server popd, ftpd, rudimenti di httpd. 6. Il linguaggio C. Introduzione. Tipi, operatori ed espressioni. Strutture di controllo. Funzioni e struttura di programmi. Puntatori e vettori. Strutture. Input ed output. BIBLIOGRAFIA: 1) B.W. Kernighan, D.M. Ritchie, Linguaggio C, Jackson, 2a edizione, 1989. 2) G. Glass, K. Ables, "UNIX for Programmers and Users", Prentice Hall, 2a edizione, 1999. Altri riferimenti: 3) P. Cornes, The Linux A-Z, Prentice Hall, 1997. 4) K. Haviland, D. Gray, B. Salama, UNIX System Programming, Addison Wesley, 2a edizione, 1999. III ANNO BASI DI DATI E SISTEMI INFORMATIVI DOCENTE: Prof. Angelo Montanari CREDITI: 6 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; 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 e modelli per il progetto: 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, multivalore, 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 di 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. Parte 3 - Il modello relazionale e l'algebra relazionale Il modello relazionale: nozioni di base, definizione delle relazioni, definizione dei vincoli sulle relazioni (che coinvolgono un'unica relazione o più relazioni), operazioni di aggiornamento delle relazioni; l'algebra relazionale: le operazioni di base, interrogazioni in algebra relazionale, operazioni addizionali, ottimizzazione algebrica, i limiti dell'algebra relazionale; il calcolo relazionale: nozioni di base, calcolo relazionale dei domini e delle tuple, il legame con l'algebra relazionale. Parte 4 - 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); SQL e sicurezza (controllo discrezionale degli accessi basato sui privilegi); il DBMS mySQL. Parte 5 - 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; la 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 lossless-join in BCNF, scomposizioni in 3NF che conservano le dipendenze. BIBLIOGARFIA Testi adottati R. Elmastri, S. Navathe, Sistemi di Basi di Dati, Pearson Education Italia, 2004. P. Atzeni, S. Ceri, S. Paraboschi, R. Torlone, Basi di Dati: Modelli e Linguaggi di Interrogazione, McGraw-Hill, 2002. ALTRI TESTI DI RIFERIMENTO: J. D. Ullman. Principles of Databases and Knowledge-Base Systems (Volume I), Computer Science Press, 1988. S.Abiteboul, R.Hull, V. Vianu. Foundations of Databases, Addison-Wesley, 1995. A. Albano, G. Ghelli, R. Orsini. Basi di dati relazionali e a oggetti, Zanichelli, 1997. C. J. Date. An Introduction to Databases Systems (7th Edition), Addison-Wesley, 2000. A. Silberschatz, H. F. Korth, S. Sudarshan. Database System Concepts (4th Edition), McGrawHill, 2001. L. Welling, L. Thomson. MySQL Tutorial, Pearson Education Inc., 2004. COMPLEMENTI DI BASI DI DATI DOCENTE: Prof. Angelo Montanari CREDITI: 6 PROGRAMMA Parte 1 - La progettazione delle basi di dati (complementi) La progettazione delle basi di dati e il modello Dataflow: processi, flussi dei dati, depositi dei dati e interfacce, diagrammi contesto e diagrammi di flusso dei dati, progetto funzionale basato sul modello Dataflow; progetto di sistemi informativi: un approccio integrato alla progettazione dei dati e delle funzioni; la progettazione delle basi di dati e il formalismo UML. Parte 2 - Il linguaggio SQL (complementi) SQL e linguaggi di programmazione: SQL embedded statico (interrogazioni semplici e complesse, l'utilizzo dei cursori) e dinamico (esecuzione immediata ed esecuzione in due fasi); le procedure memorizzate; i trigger; le Call Level Interface (CLI); ODBC e JDBC. Parte 3 - L'organizzazione fisica dei dati. Memorizzazione dei record ed organizzazione dei file primari: introduzione, strumenti e tecniche per la gestione della memoria secondaria, la tecnologia RAID buffering dei blocchi, memorizzazione di file di record su disco, operazioni sui file, file di record non ordinati (heap file), file di record ordinati (sorted file), tecniche di hashing, altre possibili organizzazioni dei file primari; strutture di indicizzazione dei file: tipi di indici ordinati di livello singolo (primari, di clustering, secondari), indici multilivello, indici multilivello dinamici che utilizzano B-alberi e B+-alberi, altri tipi di indici. Parte 4 - Tecnologia delle basi di dati centralizzate. La nozione di transazione: introduzione, proprietà desiderabili delle transazioni, scheduling e recupero delle transazioni, tecniche di serializzazione; 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 data item; 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 dell’affidabilità: concetti di base, architettura del controllore dell’affidabilità, memoria stabile, organizzazzione 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; la sicurezza nella basi di dati: introduzione, controllo obbligatorio degli accessi per supportare livelli multipli di sicurezza, la sicurezza nelle basi di dati statistiche (cenni). Parte 5 -. Basi di dati distribuite Introduzione ai DBMS distribuiti, elementi di base dell'architettura client-server, frammentazione dei dati, allocazione dei dati, livelli di trasparenza, tipi di sistemi di basi di dati distribuite, elaborazione delle interrogazioni in basi di dati distribuite, controllo della concorrenza e dell’affidabilità nelle basi di dati distribuite. Parte 6 - Basi di dati e World Wide Web Nozioni di base (Internet, World Wide Web, HTML, protocollo HTTP); gateway e form; tecniche e strumenti per l'accesso a basi di dati attraverso il Web; accesso a basi di dati tramite programmi CGI; strumenti di sviluppo; limiti del protocollo CGI; soluzioni basate sul server; soluzioni basate sul client; sistemi informativi sul web; progettazione concettuale di applicazioni web. Parte 7 - Argomenti conclusivi (cenni) Basi di dati per il supporto alle decisioni (data warehouse); dati semistrutturati in XML; basi di dati a oggetti; basi di dati attive; basi di dati temporali e spaziali. BIBLIOGRAFIA: Testo adottato P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone, Basi di Dati: Architetture e Linee di Evoluzione, McGraw-Hill, 2003. ALTRI TESTI DI RIFERIMENTO: J. D. Ullman. Principles of Databases and Knowledge-Base Systems, Computer Science Press, 1988. Volume I. B. Silberschatz, H. F. Korth, S. Sudarshan. Database System Concepts (4th Edition), McGrawHill, 2001. A. Albano. Costruire sistemi per basi di dati, Addison-Wesley, 2001. R. Elmastri, S. Navathe, Fundamentals of Database Systems (4th Edition), Addison-Wesley, 2004. A. Albano, G. Ghelli, R. Orsini. Basi di dati relazionali e a oggetti, Zanichelli, 1997. P. Atzeni, S. Ceri, S. Paraboschi, TESTI ADOTTATI: P. Atzeni, S. Ceri, S. Paraboschi, R. Torlone. Basi di dati (Second Edizione), McGraw-Hill, 1999. R. Elmasri, S. Navathe. Fundamentals of Database Systems (Third Edition), Benjamin/Cummings, 2000. COMUNICAZIONE EFFICACE (Vedi Corso di Laurea in Tecnologie Web e Multimediali) FISICA MODERNA (Vedi Corso di Laurea Specialistica in Fisica Computazionale) FONDAMENTI DELL'INFORMATICA 2 DOCENTE: Prof. Agostino Dovier CREDITI: 6 FINALITÀ DEL CORSO Approfondire le competenze degli argomenti già trattati nel corso di Fondamenti dell'Informatica I. Dopo aver superato l'esame si ritiene che lo studente sia in grado di discutere la decidibilità o meno (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. Richiami sui linguaggi regolari. Automi a stati finiti deterministici e nondeterministici, e loro equivalenza. Espressioni regolari. Pumping Lemma per i linguaggi regolari e sue applicazioni. Proprietà di chiusura e di decidibilità dei linguaggi regolari. Il teorema di Myhill-Nerode; unicità e determinazione dell'automa minimo. 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à. Richiamo dei formalismi delle funzioni primitive ricorsive, ricorsive parziali e Macchine di Turing. Equivalenza tra le funzioni ricorsive parziali e le funzioni Turingcalcolabili. Calcolabilità e Linguaggi di Programmazione. Il linguaggio While: Sintassi, semantica e funzioni While-calcolabili. Turing completezza del linguaggio While. Il linguaggio For. Equivalenza tra funzioni For-calcolabili e funzioni primitive ricorsive. Indecidibilità dell'halting problem senza aritmetizzazione. Il teorema S-m-n per la While calcolabilità e gli Specializzatori. Il Teorema di ricorsione di Kleene, il Teorema di Rice e le proprietà di programmi e il Teorema di Rice-Shapiro. Applicazioni alla programmazione. Riducibilità funzionale. Studio della relazione. Insiemi ricorsivi e completi. Insiemi creativi e produttivi. Secondo Teorema di Ricorsione e Teorema di Myhill. Insiemi semplici: esistenza di un insieme semplice. Complessità. Problemi e linguaggi. Problemi decisionali e funzionali. Classi di Complessità in tempo deterministiche: Riassunto dei principali risultati. Classi non deterministiche e classi in spazio. Principali risultati. Riduzioni, completezza, ed esempi. Teoremi di Cook. NPcompletezza di alcuni problemi fondamentali mediante riduzione. MODALITÀ D’ESAME Prova scritta ed orale. 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, AddisonWesley, Reading 1979. - C. H. Papadimitriou. Computational Complexity. Addison Wesley, 1995. INGEGNERIA DEL SOFTWARE 1 DOCENTE: Prof. Carlo Tasso CREDITI: 6 FINALITÀ DEL CORSO Obiettivo del corso è l'introduzione ai concetti di base dell'Ingegneria del Software, settore dell'informatica dedicato allo studio delle metodologie, delle tecniche e degli strumenti utilizzati nella produzione industriale del software. In particolare il corso descrive vari modelli del processo di sviluppo del software presentando i problemi relativi alle varie fasi del ciclo di vita, con particolare riferimento all'analisi dei requisiti e alla specifica, al progetto, al testing, alle stime dei costi ed al controllo di qualità. Vengono anche descritti i principali standard per il software. CONTENUTI 1. Concetti e Definizioni di Base dell'Ingegneria del Software Introduzione. Origini e motivazioni dell'Ingegneria del Software. Definizioni di base: prodotti software, caratteristiche generali dei prodotti software. Processi per lo sviluppo del software, modello dei processi: processi primari, di supporto e di gestione; ciclo di vita, metodologia di sviluppo. Modelli generali dei processi: modello a cascata; sviluppo incrementale; modello a spirale di Boehm, gestione del rischio; discussione ed esempi. Visibilità del processo di sviluppo. Ingegneria dei sistemi. Definizioni e problemi. Ambiente di un sistema. Modello contractor/sub-contractor per l'acquisizione del sistema. Fasi del processo di ingegnerizzazione dei sistemi: definizione dei requisiti, progetto, sviluppo dei sotto-sistemi, integrazione, installazione, funzionamento, evoluzione e dismissione. Obiettivi del sistema. Architettura di un sistema, componenti funzionali. Fattori umani, problematiche relative all'interfaccia affidabilità, resilienza. 2. Gestione di un Progetto Software. Gestione di un progetto software. Attività di gestione. Personale. Pianificazione del progetto: piano di progetto, struttura e contenuti. Concetti di milestone e derivable. Schedulazione del progetto; rappresentazioni grafiche: diagramma delle attività, dei tempi, del personale. Cammino critico. 3. Requisiti di un sistema Software. Ingegnerizzazione dei requisiti. Definizione del concetto di requisito. Attività di definizione, analisi e specificazione dei requisiti. Processo di ingegnerizzazione dei requisiti. Documentazione dei requisiti. Validazione dei requisiti: review sui requisiti, parametri di validazione. Evoluzione dei requisiti: requisiti duraturi, volatili, mutabili emergenti, consequenziali, di compatibilità. Analisi dei requisiti: definizione e processo d'esecuzione. Analisi basata sui viewpoint. Analisi basata su metodi. Metodo VORD orientato ai viewpoint: struttura generale ed esempi. Analisi del contesto. Analisi etnografica (cenni). 4. Tecniche di modellizzazione dei sistemi Modellizzazione dei sistemi. Modelli data-flow (DFD): definizioni ed esempi. Modelli semantici; modelli entità-relazioni, modelli SDM secondo Hull & King; definizioni ed esempi. Inadeguatezza dei modelli DFD a rappresentare aspetti di controllo e di sincronizzazione. Automi a stati finiti: definizioni ed esempi. Reti di Petri posti-transizioni: definizioni, esempi, valutazioni. Modelli object oriented: modelli d'eredità, di aggregazione e di utilizzo dei servizi. Metodologia SADT: definizione dei diagrammi ed esempi. Data dictionary. 5. Definizione dei requisiti e specificazione del software Definizione e specificazione dei requisiti: modalità e tecnica di redazione. Uso di linguaggio naturale e di moduli in linguaggio strutturato. Linguaggi per la descrizione dei programmi (PDL). Definizione dei requisiti per interfacce software. Requisiti non funzionali, classificazione. Specificazione del software: definizione. Criteri di accettazione. Relazioni tra specificazione e progetto. Progetto architetturale. Il ruolo delle specifiche formali. 6. Prototipizzazione del Software Prototipizzazione: definizione. Motivazioni, obiettivi, approcci. Prototipizzazione: approccio evolutionary, approccio throw-away, approccio incrementale. Strumenti per la prototipizzazione: linguaggi ad altissimo livello (lisp, prolog, smalltalk), linguaggi di IV^ generazione, riuso del software. Prototipizzazione dell'interfaccia utente. 7. Generalità e Progetto Architetturale Progetto del software. Stadi del processo di progetto. Metodi di progetto: approccio Top-down, metodi strutturati, strategie funzionali e object oriented. Documentazione del progetto. Parametri di qualità del progetto: coesione, accoppiamento,comprensibilità e adattabilità. Porgetto architetturale: definizione, sistema, sotto-sistema, modulo. Modelli per la strutturazione dei sistemi software: modello basato su data base condiviso, modello client-server, concetto di tipo di dati astratto e modello basato su Macchine Astratte. Modelli del controllo; controllo centralizzato: modello call-return e modello basato su manager di controllo; controllo basato sugli eventi: modello broadcast e modello a interrupt. Modelli di scomposizione in moduli: data-flow e object oriented. Architetture specifiche del dominio: generiche e di riferimento, esempi. 8. Progettazione Object-Oriented Definizioni di base della tecnologia object-oriented. Oggetto, classe, eredità semplice e multipla, polimorfismo, late binding, gerarchia IS-A. Comunicazione tra oggetti: protocollo, message passing e procedure call. Specializzazione strutturale e comportamentale. Diversi tipi di specializzazione comportamentale. Progettazione object-oriented (OOD): caratteristiche e vantaggi. Analisi object-oriented e OOD: differenze. Identificazione di Oggetti e Classi basata sul linguaggio naturale. Interfacce tra oggetti (esempi in ADA e C++). Il ruolo dell'astrazione. Classi riusabili, astrazione, standardizzazione e altri criteri di progettazione delle classi. Gerarchia di Aggregazione. Diagramma dei servizi. Progettazione dell'interfaccia tra oggetti. Oggetti concorrenti (cenni). 9. Progettazione funzionale Progettazione funzionale: definizione. Progettazione data-flow. Decomposizione strutturale e diagrammi di struttura. Trasformazione dei diagrammi data-flow in diagrammi di struttura. Progetto di dettaglio (o esecutivo). Modello fetch&execute per i sistemi interattivi. Confronto delle diverse strategie di progetto. 10. Interazione Uomo-Macchina e Progetto e Valutazione dell'Interfaccia Utente Introduzione alla HumanComputer Interaction (HCI). Dialogo uomo-computer. Livelli di dialogo: lessicale, sintattico, semantico, pragmatico. Contesto del dialogo. Controllo del dialogo. Stili di dialogo. Modelli Mentali. Conoscenza Mutua. Modello del sistema e modello dell'utente. Interfacce utente adattive e adattabili. Metafore di interazione. Errori nel Dialogo. Progettazione dell'interfaccia utente: principi di progettazione. Interfacce a manipolazione diretta. Interfacce grafiche. Modelli di interfaccia: metafore desktop e control panel. Interfacce a Menù. Interfacce a comandi. Presentazione dell'informazione: testo, grafica, modalità digitale, e analogica, uso dei colori. Sistemi di Help. Progetto dei messaggi di errore. Documentazione utente. Modelli architetturali di interfacce utente: modello di Cox e di Seeheim. Valutazione delle interfacce utente. Concetto di usabilità, definizione ISO, attributi di usabilità. Tecniche di valutazione: osservazione naturalistiche ed esperimenti in senso stretto. Progetto di esperimenti: soggetti, procedura sperimentale, variabili dipendenti e variabili indipendenti. Elaborazione dei dati di una sperimentazione di valutazione. 11. Verifica e Validazione Processi di supporto. Il controllo di qualità dei prodotti software: la verifica e la validazione, definizioni secondo ISO 12207. Verifica e validazione statiche e dinamiche. Testing e ispezione. Validazione tecnica e sociale. Obiettivi e problematiche generali del testing. Testing statistico e di identificazione dei difetti. Debugging. 12. Testing del Software Processo di debugging. Pianificazione e organizzazione dei test. Strategie di test. Il test incrementale. La metodologia Big Bang. Strategie di testing top down e bottom up. Test dinamico black box (funzionale) e white box (strutturale). Il concetto di test case. Dati di test. Classi di equivalenza. La verifica statica. Il processo di ispezione. 13. Metriche Software Le metriche software: definizione. Le metriche preduttive e di controllo. Attributi interni ed esterni. Collezione dei dati. La Software Science. Il concetto divolume, volume potenziale, sforzo e tempo di sviluppo. Critiche alla metrica di Halstead. Il numero ciclomatico. Il concetto di cammino e di complessità. Metodi di calcolo. Critiche alla metrica di McCabe. 14. Introduzione alla Stima dei Costi del Software Stime dei costi. Le componenti del costo. Metodiche di pricing. Il concetto di produttività. Misurazioni e tecniche di stima: giudizio degli esperti, stima per analogia, pricing to win, top down, bottom up, algoritmica. Il modello COCOMO (base e avanzato). Le classi di progetto. Le equazioni di calcolo. Gli attributi correttivi del modello "intermediate". Il costo della qualità. 15. Introduzione all'Affidabilità del Software Concetto di affidabilità. Fallimenti, guasti, errori. Metriche di affidabilità. Unità di tempo: tempo di esecuzione, di calendario, cronometrico. Confronto del concetto di affidabilità per il software e per l'hardware. Distribuzione probabilistica delle misure di affidabilità. Classificazione delle conseguenze dei malfunzionamenti. Possibili usi delle misure di affidabilità. 16. Qualità del Software Concetto di standard: standard de jure, defacto, aperto, proprietario. Il ruolo dell'ISO e delle organizzazioni nazionali. Definizione di qualità del SW secondo lo standard ISO 8402. Controllo di Qualità secondo ISO 9000. Modello di qualità del software secondo ISO 9126: parametri di funzionalità, affidabilità, usabilità, efficienza, manutenibilità, portabilità. Gestione della qualità. Politica di qualità. Sistema qualità, controllo e assicurazione di qualità. Scope e pianificazione delle attività di assicurazione della qualità. Qualità di un prodotto basata sulla qualità del processo di produzione. Review di qualità. Check di qualità ed azioni correttive. Documentazione dei review di qualità. Processo di valutazione e metriche dei parametri di qualità secondo ISO 9126. Standard ISO 9000 per la gestione ed assicurazione della qualità: ISO 9001, 9002, 9003 e 9004, manuale della qualità. Standard ISO 9000-3: linee guida per l'applicazione dello standard ISO 9001 al software. Certificazione di qualità ed accreditamento. 17. Standard sul Ciclo di Vita Standard ISO 12207 sul ciclo di vita del software. Definizione dei vari processi software. Definizione dei ruoli degli esecutori dei processi: acquirente, fornitore, proprietario, sviluppatore, operatore, manutentore. Prospettiva contrattuale. Processi di monitoraggio e tailoring del ciclo vita. MODALITÀ D’ESAME: Esame scritto e orale. BIBLIOGRAFIA I. Sommerville, Software Engineering Fifth Edition. Addison Wesley, 1996. G. Guida, C. Tasso. Design and Development of Knowledge-Based Systems: from Life Cycle to Development Methodology. John Wiley & Sons, Chichester, UK, 1994. C. Ghezzi, A. Fuggetta. Ingegneria del Software: Progettazione e Verifica. Mondadori Informatica, 1994. Materiale didattico Trasparenze del corso Materiale fornito dal docente CONSULTAZIONE R. Hull, R. King. Semantic Database Modeling: Survey, applications and research issues. Acm Computing Surveys, 19(3), 1987. J. Musa, A. Iannino, K. Okumoto. Affidabilit‡ del Software. McGraw Hill Italia, Milano, 1991. T. Demarco. Structured Analysis and System Specification, Prentice-Hall, 1979. INGEGNERIA DEL SOFTWARE 2 DOCENTE: Dott. Maurizio Pighin CREDITI: 6 FINALITÀ DEL CORSO Obiettivo del corso è l'approfondimento delle principali tematiche dell’Ingegneria del Software. Viene richiamato il ciclo di progettazione e di vita di un prodotto Software. Vengono poi studiati e approfonditi gli argomenti più avanzati, quali il configuration management, le metodologie di test, la progettazione dei sistemi, le metriche teoriche ed operative, i più noti modelli di qualità di prodotto e di processo, le metodiche di pianificazione e controllo, i principali strumenti di lavoro. Nel correlato corso di Laboratorio avanzato (4 CFU) viene svolto un case-study completo, seguendo un processo di sviluppo di un progetto Software in tutte le fasi sia del ciclo di vita (specifiche, progetto, codifica, test, rilascio, manutenzione) che operativo (pianificazione, analisi costi, metriche, organizzazione del lavoro, consuntivazioni economiche) PROGRAMMA Introduzione e Richiami Generali: Le motivazioni del Software Engineering. Richiami alle definizioni di base. La dimensione economica del problema. I fattori di complessità del processo di sviluppo. Configuration Management: Le motivazioni del Configuration Management. Il CM-Planning. Trattamento delle versioni. Assemblaggio dei componenti e System Building. Ingegneria del Software Esistente: L'I.S.E: definizioni e problematiche. Le metodologie di re-engineering. Le metodologie di riuso. Lo sviluppo per il riuso e tramite il riuso. Verifica e Validazione: I risultati teorici negativi. Strategie di test. Test dinamico. Le catene di test. I test di regressione. L'automazione del test e l’analisi mutazionale. Test statico. Cenni sui metodi formali di test. Metriche: Le definizioni generali. Gli obiettivi delle misure. Le scale di misurazione. Le misure di controllo e predittive. Il data collection. Gli attributi interni e le loro misurazioni. La metrica di Halstead. La metrica di Albrecht. La metrica di McCabe ed altre metriche di complessità. Gli attributi esterni e le loro misurazioni Modelli di qualità: La certificazione di qualità e i principali modelli di certificazione di processo e di prodotto: Richiami al modello ISO 9000, il modello CMM, cenni su altri modelli: BOOTSTRAP, SYNQUEST, SPICE, TickIT. Il modello IS0 9126. Valutazione e stima dei costi: L’analisi prestazioni/costo e l’analisi delle decisioni. La stima dei costi del Software. Richiamo modello COCOMO. Altri modelli di stima. Pianificazione e Controllo del Processo Produttivo: L’organizzazione e gestione dei gruppi di lavoro. La pianificazione ed i suoi obiettivi. I diagrammi di Pert e gli schemi di Gantt. Manutenzione: Costi, stime, misurazioni, dinamica del processo manutentivo. Il modello COCOMO. Extreme programming: Metodologie organizzative: pianificazione, testing. Tecniche di sviluppo: refactoring Strumenti di lavoro: La tecnologia CASE: Tools, Ambienti. Le funzionalità. Gli strumenti di supporto nelle varie fasi del processo di sviluppo. MODALITÀ D'ESAME Prova scritta/orale sugli argomenti del programma. BIBLIOGRAFIA 1. I.Sommerville, Software Engineering, 6° Ed., Addison Wesley P.C., 2001. 2. N.E.Fenton, S.L.Pfleeger, Software Metrics - A rigorous and practical Approach, 2° Edition, PWS Publishing Company, 1997. 3. M.Maiocchi, Il miglioramento dei processi nel settore dell'Information Technology, Franco Angeli, 1998 4. C.Ghezzi, A.Fuggetta, S.Morasca, A.Morzenti, Ingegneria del Software - Progettazione, Sviluppo e Verifica, Mondadori Informatica, 1993. 5. L.Buglione, Misurare il Software, Franco Angeli , 2003. 6. P.Metzeger, J. Boddie, Managing a Programming Project, 3° ed. Prentice Hall 7. Materiale didattico consegnato a lazione INTERAZIONE UOMO-MACCHINA DOCENTE: Prof. Luca Chittaro CREDITI: 6 FINALITÀ DEL CORSO 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 il progetto di interfacce World Wide Web. PRINCIPALI ARGOMENTI Introduzione: Obbiettivi dell’Interazione Uomo-Macchina e sua importanza nei diversi settori applicativi dell'Informatica. 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. 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. Interazione Uomo-Macchina e Ciclo di Vita del Software: Analisi dei requisiti di usabilita'. Principi di usabilita'. User-centred design. Usability Engineering. Tecniche di prototyping. Tecniche per favorire la creativita'. Documentazione delle scelte di progetto. Environment, User, Task Analysis: Determinazione del contesto dell'interazione con modelli socio-tecnici. Il metodo USTM/CUSTOM. Analisi dei compiti degli utenti. Il metodo HTA. Modelli predittivi: GOMS, KLM. Metodi Formali nell'Interazione Uomo-Macchina: State transition network ed altre notazioni diagrammatiche. Notazioni testuali. Progetto ed analisi di dialogo mediante state transition network. Guidelines e Standard per le Interfacce Utente: Definizione. Scelta ed uso di guidelines. Esempi di guidelines: MITRE, Apple, Microsoft, guidelines IBM per interfacce 3D. Lo standard ISO 9241. Strumenti per l'Implementazione di Interfacce Utente: Windowing System. Tecniche di programmazione. Toolkit. Caso di studio: il toolkit di Java. User Interface Management System. Valutazione di Usabilita': Scopo della valutazione. Strumenti di registrazione. Osservazione dell'utente. Raccolta di opinioni. Interviste. Questionari. Esperimenti. Valutazione predittiva. Cognitive walkthrough. Valutazione interpretativa. Help: Assistenza all'utente. Requisiti di un help system. Principali approcci. Interfacce adattive ed adattabili. Computer-Supported Cooperative Work: Groupware. La comunicazione mediata dal calcolatore. E-mail e sistemi di comunicazione testuale. Videoconferenza. Ambienti collaborativi virtuali. Sistemi workflow. Aspetti sperimentali ed organizzativi del lavoro cooperativo. Recenti Paradigmi di Interazione Uomo-Macchina: Ubiquitous computing. Realta' virtuale. Tipologie di realta' virtuale. Il linguaggio VRML. Interfacce multi-sensoriali (o multi-modali). Information visualization. Ipertesti. Interfacce multimediali e ipermediali. Interfacce WWW. Progetto di pagine Web usabili. RIFERIMENTI PRINCIPALI A. Dix, J. Finlay, G. Abowd and R. Beale. Human Computer Interaction, Third Edition, Prentice Hall, 2003. J. Preece, Y. Rogers, H. Sharp, D. Benion. S.Holland, and T.Carey. Human Computer Interaction, Addison Wesley, 1994. LABORATORIO DI ELETTRONICA (Vedi Corso di Laurea Specialistica in Fisica Computazionale) LINGUAGGI DI PROGRAMMAZIONE 1 DOCENTE: Prof. Moreno Falaschi CREDITI: 6 CONTENUTI DEL CORSO - Macchine astratte, linguaggi, interpretazione e compilazione - Struttura dei linguaggi - La semantica formale (operazionale, algebrica e denotazionale) per la descrizione dei linguaggi di programmazione - Tipi di dato e astrazioni sui dati - Controllo di sequenza, procedure, ricorsione - Ambiente, regole di scoping, passaggio dei parametri - Gestione memoria - Linguaggi imperativi, logici, funzionali ed orientati ad oggetti con esempi (cenni) - Macchina astratta del Pascal, esempio del P-code BIBLIOGRAFIA: Appunti dalle lezioni. Pratt T.W. Linguaggi di Programmazione, Jackson 1988, (O la nuova edizione del 1996, 'programming languages', prentice-hall) oppure il libro di Sethi (vedere testi di consultazione). TESTI DI CONSULTAZIONE: Sterling L, Shapiro E. The art of Prolog, MIT Press, 1986. Hassan Ait-Kaci. Warren's Abstract Machine: A Tutorial reconstruction, MIT Press, 1991. Bird, R., and Wadler, P. Introduction to Functional Programming, Prentice Hall. Simon L. Peyton Jones. The implementation of Functional Programming Languages, Prentice Hall, 1987. Sethi, 'Programming Languages', Addison-Wesley (tradotto da Zanichelli). Stroustrup B., Ellis M. The annotated C++ Reference Manual. Addison Wesley, 1990. David Flanagan, Java in a Nutshell (2nd Ed.), O'Reilly Ed., 1997. Cay S. Horstmann, Gary Cornell, core Java 1.1 (Volume I - Fundamentals), Prentice Hall 1997. Jon Meyer & Troy Downing, Java(TM) Virtual Machine, O'Reilly & Associates, Inc. 1997. LOGICA MATEMATICA DOCENTE: Dott.ssa Giovanna D'Agostino CREDITI: 6 FINALITÀ DEL CORSO : Raggiungere un'adeguata comprensione degli aspetti teorici collegati all’uso della logica nelle applicazioni informatiche, con particolare attenzione alle questioni di correttezza, completezza, decidibilità e potere espressivo per logiche classiche e non. PROGRAMMA (elenco sintetico degli argomenti da trattare): 1. Sistemi Deduttivi per la logica classica: 1.1 deduzione naturale ; 2. metodo di risoluzione; 1.3 introduzione alla programmazione logica (prolog). 2. Logiche modali e temporali: risultati di correttezza, completezza ed espressività. MODALITÀ D'ESAME : esame scritto e orale BIBLIOGRAFIA: un testo di base di logica per informatica, ad esempio Nerode, Shore, “Logic for application”, Springer. Blackburn, de Rijke,Venema “Modal Logic”, Cambridge Tracts in Theoretical Computer Science, 53. METODI FORMALI DELL’INFORMATICA 1 DOCENTE: Prof. Marina Lenisa CREDITI: 6 FINALITÀ DEL CORSO: In sistemi informatici ''life-critical'', o a forte impatto ambientale, oppure in produzioni su larga scala, che comporterebbero costi ingenti di correzione, le tradizionali tecniche di certificazione del software, basate solo su testing, sono inadeguate. La verfica formale rigorosa del software è pertanto divenuta un requisito essenziale nella produzione industriale di sistemi software complessi. Questo processo comporta l'introduzione e l'utilizzo di tecniche logico-matematiche per specificare rigorosamente la semantica dei programmi e per verificarne la correttezza rispetto a questa semantica. Scopo di questo corso è quello di introdurre le problematiche ed i concetti fondamentali della verifica del software nonché alcuni dei ''metodi formali'' piu' in uso per realizzare questo scopo. PROGRAMMA: Verrano discusse la semantica operazionale strutturata, la semantica denotazionale, i sistemi di riscrittura e svariati sistemi formali a' la Hoare per stabilire proprietà di programmi sequenziali e concorrenti. In particolare, saranno studiati e sperimentati sistemi per stabilire la correttezza parziale e totale di programmi deterministici, programmi paralleli che comunicano attraverso la condivisione di variabili, programmi paralleli con primitive di sincronizzazione, programmi distribuiti che comunicano attraverso lo scambio di messaggi, programmi nondeterministici. Particolare attenzione sarà dedicata allo studio di proprietà di fairness. MODALITÀ D'ESAME: L'esame è costituito da una prova scritta ed una orale. BIBLIOGRAFIA: - K. Apt, E.R. Olderog, Verification of Sequential and Concurrent Programs, GTCS Springer Verlag, New York, 1997. - Appunti del corso. MODELLI E ALGORITMI PER LA GESTIONE DELLE RISORSE DOCENTE: Prof. Giuseppe Lancia CREDITI: 6 FINALIITÀ DEL CORSO: L’obiettivo del corso e’ quello di fornire una panoramica sugli approcci algoritmici piu’ efficaci nella risoluzione di problemi difficili di ottimizzazione (NPhard), quali tipicamente si presentano nella gestione delle risorse. Tra queste tecniche ricordiamo il branch-and-bound, la programmazione lineare intera (anche con un numero enorme di vincoli e variabili), gli algoritmi approssimati ed euristici, con particolare riferimento a algoritmi genetici e tabu search. Il corso si colloca logicamente come un approfondimento delle tematiche trattate nel corso di Ricerca Operativa, anche se (con l’eccezione della programmazione lineare) la maggior parte degli argomenti e’ self-contained e non richiede alcuna conoscenza preliminare di ricerca operativa. Tra gli obiettivi del corso vi e’ anche l’approfondimento dei problemi informatici legati alla costruzione di software che realizzino le tecniche discusse teoricamente. ARGOMENTI: 0) Richiamo a problemi di ottimizzazione e complessita’ Set covering (schedulazione di aerei/equipaggi). Vertex covering. Colorazione di grafi (schedulazione di aule/creazione di orari scolastici). Insiemi indipendenti e clique. Job shop (catene di produzione). Problema di schedulazione di una macchina. Problemi NP-completi e riduzioni. Problemi NP-hard. 1) Approcci esatti nella risoluzione di problemi NP-completi Programmazione dinamica. Il Branch and Bound (enumerazione completa implicita delle soluzioni). Stime inferiori e superiori (lower e upper bounds) all’ottimo. Modelli di programmazione intera con un numero esponenziale di vincoli (Branch and Cut) e di variabili (Branch and Price). Tecniche di pricing e di separazione. Software per la risoluzione di problemi di programmazione lineare intera (CPLEX, GLPK, QSopt) 2) Algoritmi approssimati Algoritmi approssimati per problemi di max e min (con massimo errore relativo limitato). Commesso viaggiatore (TSP) e Vertex cover. TSP euclideo. Non approssimabilita’ e problemi APX-hard. Approssimabilita’ arbitrariamente buona (PTAS). Arrotondamento deterministico e probabilistico da programmazione lineare. Approssimazione probabilistica, Max Cut e Soddisfacibilita’. 3) Algoritmi euristici Ricerca Locale, intorno 2-OPT per il TSP. Euristiche greedy (e.g., nearest neighbor). Algoritmi genetici. Tabu search. Per ulteriori informazioni sulla ricerca operativa e sull'ottimizzazione si consulti il sito dell'INFORMS (Institute for Operations Research and Management Science) oppure quello del CIRO (Centro Interuniversitario in Ricerca Operativa). TESTI: dispensa del docente Consigliati: -Combinatorial Optimization (Papadimitriou & Steiglitz) -Ottimizzazione (Serafini) -Lezioni di Ricerca Operativa (Fischetti) QUANTUM COMPUTING (Vedi Corso di Laurea Specialistica in Fisica Computazionale) RETI DI CALCOLATORI DOCENTE: Prof. Gian Luca Foresti CREDITI: 6 FINALITÀ DEL CORSO L'obiettivo del Corso è quello di 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 distribuita di calcolatori. In particolare, saranno presentate le caratteristiche generali delle reti, la loro topologia, l’architettura ed i principali protocolli utilizzati per la trasmissione delle informazioni tra calcolatori. ARGOMENTI DEL CORSO 1. Introduzione alle reti di calcolatori – Scopi, applicazioni, evoluzione storica, caratteristiche e struttura a livelli, tipologie di rete, architetture di rete, stratificazioni, tipi e primitive di servizio, protocolli di rete, controllo di flusso e controllo di errore, messaggi e pacchetti, strategie di commutazione (circuito e pacchetto), indirizzamento, instradamento ed interconnesione. 2. Principali componenti di una rete e tecniche di trasmissione dati Mezzi trasmissivi elettrici e ottici, banda di un segnale, capacita’ di canale, I e II Teorema di Nyquist, Teorema di Shannon, attenuazione e distorsione, cenni alla trasmissione dati analogica e alla trasmissione dati digitale, principali componenti di una rete (modem, multiplexer, bridge, switch, router). 3. Il modello ISO/OSI Architettura, servizi e protocolli. Il livello fisico. Il livello datalink. Protocolli per il controllo di flusso (Stop& Wait, Go-Back-N, Sliding Window) e per il controllo di errore (controllo di parita’, codici CRC). Calcolo dell’efficienza dei protocolli di livello datalink. Protocollo HDLC. 4. Il livello di rete – Tecniche di instradamento (routing by network, address label swapping, source routing), architettura di un router e tabelle di instradamento, algoritmi di routing statico (fixed directory routing, flooding e selective flooding) e dinamico (distance vector e link state). Il protocollo IP, formato del pacchetto IP e indirizzamento IP, classi di indirizzi, sottoreti e netmask. Protocolli ARP, IGP, RIP, OSPF, BGP. Protocollo Ipv6, formato dei pacchetti, header opzionali. Protocollo Network Address Translation (NAT). 5. Il livello di trasporto - Servizi ed indirizzi del livello di trasporto, creazione, gestione e chiusura di una connessione. Il problema delle due armate. Protocollo Hand-Shake a tre vie. Il livello di trasporto in Internet: i protocolli UPD (User datagram protocol) e TCP (Transport control protocol). 6. Il livello delle applicazioni: Applicazioni di Rete: Domain Name Server (DSN), Simple Mail Transfer Protocol (SMTP), Simple Network Management Protocol (SNMP), la posta elettronica, telnet, file transfer protocol (FTP). 7. Progetto topologico di una rete di calcolatori Progettazione topologica, cenni alla teoria dei grafi, matrice di traffico, matrice di costo e assegnazione di flusso, affidabilita’ di una rete, analisi di connettivita’, reti di flusso, taglio minimo e capacita’ del taglio in una rete, algoritmo di Ford-Fulkerson, flusso massimo, conettivita’ d’arco, percorsi arco-disgiunti, connettivita’ di nodo, esempi. 8. Analisi delle prestazioni di una rete di calcolatori Cenni alla teoria delle code, definizione di Kendall, sistemi a nascita e morte, catene di Markov, intensita’ del traffico, approssimazione di indipendenza di Kleinrock, numero medio di pacchetti in una rete, ritardo medio di pacchetto, Teorema di Little, esempi ed esercizi. 9. Approfondimenti Reti ISDN e ISDN a larga banda. Reti ATM. MODALITÀ D'ESAME L'esame si compone di una prova scritta e di una prova orale. La prova scritta richiede di svolgere esercizi inerenti gli argomenti del Corso. La prova orale consiste nella discussione di alcuni degli argomenti trattati a lezione. TESTI CONSIGLIATI [1] A.S. Tanembaum, Computer Networks, (Quarta Edizione), Addison-Wesley, pubblicato in Italia da Pearson Education Italia, 2003. TESTI DI APPROFONDIMENTO [1] J. Kurose and K. Ross, “Internet e Reti di Calcolatori”, McGraw-Hill Seconda Edizione, 2003 [2] D. Comer, “Internetworking con TCP/IP”, Addison-Wesley, pubblicato in Italia da Pearson Education Italia, 2002 [3] F. Fabris, Teoria dell’Informazione, codici, cifrari, Boringhieri, 2001 [4] M. Baldi, P. Nicoletti, Internetworking, McGraw-Hill, 1999. [5] R. Adinolfi, Reti di Computer, (Seconda Edizione), McGraw-Hill, 1999. [6] F. Halsall, Reti di Calcolatori e Sistemi Aperti, (Quarta edizione), Addison Wesley, 1998. [7] S. Gai, P. Nicoletti, P. Montesoro, Reti Locali: dal cablaggio all'internetworking. SSGRR, 1996. RETI DI CALCOLATORI E SICUREZZA DOCENTE: Prof. Gian Luca Foresti CREDITI: 6 FINALITÀ DEL CORSO L’ obiettivo del Corso e’ quello di approfondire i concetti principali delle Reti di Calcolatori con particolare riferimento agli aspetti legati alla gestione delle reti locali (LAN) e alla sicurezza. In particolare, lo studente acquisira’ competenze specifiche in riferimento all’analisi dei principali requisiti di sicurezza di una rete di calcolatori e alla progettazione di adeguate politiche di sicurezza PROGRAMMA 10. Reti Locali - Le tecnologie LAN. Le topologie di reti LAN (ring, bus, star e tree). Protocolli di accesso al mezzo MAC e LLC. Protocolli ad accesso casuale tipo Aloha e Aloha a slot, protocolli a rilevamento di portante: CSMA e CSMA/CD, protocolli a prenotazione: Aloha a prenotazione, token ring, token bus. Standard IEEE 802 per LAN (Ethernet, Fast Ethernet, Gigabit Ethernet, Token ring, FDDI, DQDB). 11. Reti wireless e LAN wireless – Reti IEEE 802.11Spread Spectrum (Direct Sequence, Frequency Hopping). 12. Reti ATM e ATM LAN Introduzione, caratteristiche principali, protocol reference mode. Trasmissione dati in una rete ATM, la cella ATM, Switch ATM. Reti LAN ATM, differenze tra Ethernet e ATM, emulazione LAN, architettura di una LAN con tecnologia ATM, protocollo LANE, IP over ATM, esempi 13. Bridge - Transparent bridge e bridge remoti, architettura di un bridge, filtering database, processo di bridging, di forwarding e di learning, flooding, inoltro selettivo, spostamento fisico di un host, errore di trasmissione. Processo di spanning tree, elezione del root bridge, selezione della root port, selezione della designated port, esempi 14. Sicurezza nelle reti di calcolatori Livelli di sicurezza, diagnostica e monitoraggio di una rete, protezione delle connessioni alla rete, autenticazione, integrita’, riservatezza, paternita’. Principio di sicurezza minimo. Valutazione della sicurezza di un sistema. Orange book 15. Cenni di crittografia - Crittoanalisi, tipi di cifrari, cifrari per trasposizione, cifrari monoalfabetici (cifrario di Cesare) e polialfabetici, il cifrario di Vigenere. Cifrari poligrafici (Playfair cipher). Cifrari composti. Crittografia moderna, cifrario di Vernam, Enigma. Crittografia contemporanea, algoritmi a chiave segreta: DES, IDEA e 3DES, algoritmi a chiave pubblica: RSA. Esempi. 16. Screening router e Firewall - Definizione e progettazione di uno screening router, packet filtering, teoria e principali architetture dei firewall: multihomed host, bastion host, DMZ. Gateway a livello di circuito e a livello applicativo. Proxy server. Esempio di un firewall commerciale. 17. Tipologie di possibili attacchi esterni ad una rete – Modus operandi di un intruder, classificazione degli attacchi. Acquisizione preliminare di informazioni, footprinting, enumerazione delle reti, interrogazione dei DSN, scanning (ping scanning, port scanning, etc.), enumerazione dei domini, enumerazione degli utenti. Denial of Service, smurf, fraggle, syn food, land, udp flood, e-mail bombing. Spoofing, ARP spoofing, IP spoofing, predizione del numero di sequenza, falsificazione RIP e EGP, ICMP redirect, web e e-mail spoofing. Hijacking, dirottamento di sessione TCP, desincronizzazione attiva, sniffing, firewalking automatico e manuale. 18. Virus Terminologia (trojan horse, chain letter). Worm, verme di Morris. Ciclo di vita di un virus, creazione, incubazione, infezione, attivazione, propagazione, riconoscimento, estirpazione. Classificazione dei virus: file virus, boot virus, macro virus, network virus, TSR virus, virus polimorfi, stealth virus. Esempi di virus. MODALITÀ D'ESAME L'esame si compone di una prova scritta e di una prova orale. La prova scritta richiede di svolgere esercizi inerenti gli argomenti del Corso. La prova orale consiste nella discussione di alcuni degli argomenti trattati a lezione. TESTI CONSIGLIATI [1] A.S. Tanembaum, Computer Networks, (Quarta Edizione), Addison-Wesley, 2003. [2] U. Black Protocolli per la sicurezza in Internet, Mc Graw Hill, 2002 [3] W. Stallings, Sicurezza nelle reti: Applicazioni e Standard, Addison-Wesley, 2001 TESTI DI APPROFONDIMENTO [1] F. Fabris, Teoria dell’Informazione, codici, cifrari, Boringhieri, 2001 [2] W.R. Cheswick, S.M. Bellovin, Firewalls and Internet Security, Addison Wesley, 1998. [3] S. Gai, P. Nicoletti, P. Montesoro, Reti Locali: dal cablaggio all'internetworking. SSGRR, 1996. FINALITÀ DEL CORSO L’ obiettivo del Corso e’ quello di approfondire i concetti principali presentati nel Corso di Reti di Calcolatori con particolare riferimento agli aspetti legati alla gestione delle reti locali (LAN) e alla sicurezza. In particolare, lo studente dovra’ acquisire competenze specifiche in riferimento all’analisi dei principali requisiti di sicurezza di una rete di calcolatori e alla progettazione di adeguate politiche di sicurezza RICERCA OPERATIVA DOCENTE: Prof. Paolo Serafini CREDITI: 6 FINALITÀ: La Ricerca Operativa si occupa di problemi di gestione efficiente tramite l'applicazione sistematica di modelli matematici e di tecniche informatiche. Dei diversi aspetti della Ricerca Operativa (modellistico, matematico e informatico) il corso presenterà soprattutto il primo attraverso una serie di esempi che motiveranno la teoria matematica ed algoritmica. I modelli verranno svolti in classe usando il pacchetto Lingo. CONTENUTI DEL CORSO: Gli argomenti principali trattati durante il corso sono i seguenti: 1) Introduzione alla programmazione lineare (6 ore) Aspetti generali di modellizzazione: identificazione dei vincoli, vincoli rigidi e vincoli flessibili; identificazione degli obiettivi; vincoli e obiettivi. Obiettivi espliciti: ottimi secondo Pareto. Esempio del problema della dieta: modellizzazione con la programmazione lineare e risoluzione con Lingo. Analisi di sensibilità. Identificazione di ulteriori obiettivi. Costruzione della frontiera efficiente. Introduzione dei vincoli di interezza. Raffinamento del modello. 2) Proprietà della programmazione lineare (6) Struttura geometrica. Vertici e soluzioni di base. Problema duale. Complementarità. Cenni sul metodo del simplesso. Cenni sul metodo “branch-and-bound” per variabili intere. 3) Modelli di percorsi (12) Cammini minimi (algoritmo di Dijkstra) e massimi. Programmazione dinamica. Principio di ottimalità. Equazione ricorsiva. Algoritmi per reti con cicli e acicliche. Cammini minimi (Floyd-Warshall). Problema del commesso viaggiatore (formulazione con piani di taglio). Circuiti euleriani e accoppiamento. Minimo albero di supporto (algoritmi di Kruskal e Prim). Modelli a reti di flusso. Flusso a costo minimo. Massimo flusso. Trasporto. 4) Modelli di allocazione (12) Assegnamento. Assegnamento tridimensionale. “Knapsack”. “Bin packing”. Modelli di “staffing”. PL con generazione di colonne: “cutting stock”, massimo flusso, “crew scheduling”. 5) modelli di schedulazione (12) Schedulazione a risorsa infinita (solo precedenze): PERT. Schedulazione a risorsa finita: Problemi ad una macchina (varie formulazioni). Problemi a più macchine: job-shop, flow-shop e open-shop. Esempi di applicazioni. TESTI DI RIFERIMENTO PRINCIPALI: Paolo Serafini, Ottimizzazione, Zanichelli, Bologna 2000. L. Schrage, LINDO: An optimization modeling system, Palo Alto Scientific Press, 1991. MODALITÀ D'ESAME L'esame consiste in una prova orale sul contenuto del corso. Gli studenti che volessero svolgere un progetto di medie dimensioni su tematiche di Ricerca Operativa, utilizzando le strutture di laboratorio, sono consigliati di inserire nel proprio piano di studi anche il corso "Laboratorio di Ricerca Operativa". Per ulteriori informazioni sulla ricerca operativa e sull'ottimizzazione si consulti il sito dell'INFORMS (Institute for Operations Research and Management Science) oppure quello del CIRO (Centro Interuniversitario in Ricerca Operativa). SISTEMI ESPERTI DOCENTE: Prof. Carlo Tasso CREDITI: 6 FINALITÀ DEL CORSO Obiettivo del corso è l'introduzione alle tecniche di base per la realizzazione dei sistemi basati sulla conoscenza e dei sistemi esperti, ed in particolare i meccanismi per la rappresentazione della conoscenza e gli algoritmi di ragionamento, i sistemi per il ragionamento non monotono, e le tecniche di modellizzazione concettuale. Vengono altresì esaminate alcune applicazioni significative, quali le interfacce intelligenti, i sistemi per la modellizzazione dell'utente ed i sistemi tutoriali intelligenti. TEMATICHE Introduzione alle problematiche dell'Intelligenza Artificiale. Definizione di Sistema Basato sulla Conoscenza. Rappresentazione della Conoscenza e Algoritmi di ragionamento. Le reti semantiche. I frame. Le regole di produzione. Grafi Concettuali. Sistemi per il Ragionamento Non Monotono. ATMS. JTMS. Architetture a Blackboard. Tecniche di modellizzazione concettuale. Classificazione Euristica e Task Generici. Interfacce Intelligenti e Modellizzazione dell'Utente nei Sistemi di Reperimento dell'Informazione: i Progetti FIRE, UMT e IFT. Sistemi Tutoriali Intelligenti: il Progetto ET. MODALIITÀ DELL'ESAME Esame scritto e orale. TESTI Appunti delle lezioni. G. Guida, C. Tasso, Design and Development of Knowledge-Based Systems, J. Wiley, 1994. D. Fum, Intelligenza Artificiale, Il Mulino, 1994. SISTEMI INFORMATIVI DOCENTI: Prof. Carlo Tasso e Dott. Maurizio Pighin CREDITI: 6 FINALITÀ DEL CORSO: Obiettivo del corso è la definizione delle problematiche informatiche nell'ambito di un'organizzazione (pubblica o privata) che intenda automatizzare i propri sistemi informativi. Si inquadrano le competenze del responsabile Sistemi Informativi e/o di chi sviluppa software per l'organizzazione, analizzando le problematiche applicative che dovrà affrontare, con uno sguardo ai risvolti tecnologici e ai rapporti di fornitura. PROGRAMMA: Introduzione e concetti generali: Definizione di sistema Informativo. La dimensione economica del problema. Le figure professionali nell'ambito di un Sistema Informativo. Ciclo di vita. Architettura e processi dei Sistemi Informativi: Le tipologie di architettura. Modelli di processi. Catena del valore. Portafoglio direzionale, operativo e istituzionale. Make, buy e outsourcing. Costi e Performance: Meccanismi di misurazione generali. Valutazione di Sistemi Informativi. Analisi costi benefici. Analisi del rischio. Gestione di un Progetto Informatico: Organizzazione risorse e processi decisionali. Metodologie di gestione e pianificazione di progetto. Tecniche di Project Management. Software e Hardware Selection. Definizione capitolato e contrattuale. Gestione rapporti di fornitura. Sistemi ERP: Il concetto di Sistema ERP e principali flussi informativi: amministrativo, logistico, attivo (vendite, passivo (acquisti), produttivo Sistemi Aziendali avanzati: E-Commerce, CRM, DataWarehouse, DataMining, Business Intelligence. MODALITÀ D'ESAME: L'esame consiste in un progetto di gruppo su problematiche reali, seguito da un colloquio orale. In alternativa è prevista una prova scritta/orale sugli argomenti del programma. BIBLIOGRAFIA: • Bracchi G., Francalanci C., Motta G. Sistemi Informativi e aziende in rete. McGraw-Hill Italia, Milano, 2001. • De Marco M., Sistemi Infomativi Aziendali, Franco Angeli Edizioni, Milano 2000. • Bracchi G., Motta G., Processi Aziendali e Sistemi Informativi, Franco Angeli edizioni, Milano 2000 • Camussone P.F., Il Sistema Informativo Aziendale, Etas 2000 • Amour D., E-Business (R)Evolution, Tecniche Nuove, 2000. • C. Tasso, P. Omero, La personalizzazione dei Contenuti Web: E-Commerce, I-Access, EGovernment, Franco Angeli, Milano, 2002. • Han J., Kamber M., Data Mining: concepts and techniques, Morgan Kaufmann, S.Francisco, 2001. • Materiale didattico consegnato a lezione.