programmi del corso di laurea in informatica

annuncio pubblicitario
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.
Scarica