Programmazione e laboratorio - Università degli Studi di Udine

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