Per questo corso di laurea sono già disponibili 15 appunti all'interno della community, registrati subito per iniziare a studiare!
Il Corso di Laurea in Informatica rappresenta il primo passo verso la professione dell'informatico e verso il proseguimento degli studi nella laurea magistrale, in particolare nella classe LM-18 Informatica.
L'organizzazione prevede un biennio propedeutico comune a tutti, e un terzo anno articolato in diverse aree di apprendimento che consentono agli studenti di approfondire tematiche diverse della disciplina informatica.
Il pdf allegato illustra con maggior dettaglio la struttura del corso e gli insegnamenti offerti
La gran parte degli insegnamenti sono nell'ambito informatico, integrati da insegnamenti di area matematico-fisica ed economico-giuridica. Tutti gli insegnamenti di ambito informatico sono tenuti da docenti universitari del settore scientifico disciplinare INF/01 - Informatica. Gli insegnamenti sono spesso accompagnati da una parte sperimentale (che arriva a coprire piu' del 20% dei crediti formativi).
Il Corso di Laurea di Informatica a Torino è stato istituito nel 1970.
Il Corso di Laurea è riuscito negli anni a coniugare efficacemente la necessità di fornire ai suoi laureati le competenze per un brillante proseguimento nei corsi di studio delle lauree magistrali, ma anche le necessarie abilità per un immediato accesso al mondo del lavoro.
A norma del DPR 328, 5 giugno 2001, la Laurea in Informatica dà titolo per l'ammissione all'esame di stato per la professione di Ingegnere dell'Informazione, Sez. B.
La XXI indagine Alma Laurea 2019, che fotografa la situazione dei laureati a un anno dalla laurea (quindi studenti laureati nel 2017) ha rilevato un tasso di disoccupazione ISTAT dell'1,3%, contro il 4,6% del totale dei laureati informatici italiani.
Il 30,9% dei laureati triennali lavoratori ha un contratto a tempo indeterminato, il 50% ha contratti formativi, il 10,1% svolge impieghi di natura non standard o parasubordinati, mentre il 2,9% svolge lavoro autonomo.
La stessa indagine Alma Laurea ha rilevato che il 51,2% dei laureati triennali si e' iscritto ad una laurea magistrale.
Ecco tutti i dettagli sul corso di laurea selezionato. Sul UniDocs troverai gli appunti condivisi dagli altri studenti del tuo corso di laurea, ordinati per materia. Ricordati che per poter visualizzare il materiale devi essere registrato al sito e possedere un numero di crediti sufficiente.
Al momento abbiamo 15 files caricati sul nostro portale suddivisi nelle 56 materie appartenenti al tuo corso di laurea.
Sfoglia il materiale didattico
Con UniDocs hai l'opportunità di studiare insieme a tutto il tuo corso di laurea. Guadagna subito dei crediti, carica il materiale del tuo ultimo esame! Più condividi, più tempo avrai per studiare con tutta la community!
L'insegnamento ha lo scopo di presentare le nozioni di base su funzioni, grafici e loro trasformazioni, di introdurre i concetti di derivata e di integrale definito e di illustrare l’utilizzo di tecniche di tipo…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento ha lo scopo di presentare le nozioni di base su funzioni, grafici e loro trasformazioni, di introdurre i concetti di derivata e di integrale definito e di illustrare l’utilizzo di tecniche di tipo analitico nello studio di fenomeni discreti. Si tratta di argomenti indispensabili per la formazione dei laureati in Informatica (classe L-31). L’insegnamento concorre agli obiettivi formativi dell'area Matematico-Fisica del corso di Laurea in Informatica, fornendo conoscenze relative ai concetti ed agli strumenti matematici e metodologici fondamentali necessari per descrivere, schematizzare e interpretare i principali aspetti della realtà che ci circonda. In particolare, l'insegnamento si inoltre propone di accrescere le capacità di comprensione degli studenti/esse e di consentire loro di acquisire un modo rigoroso ed analitico di ragionare e affrontare nuovi problemi. La significativa presenza di teoremi, molti dei quali con dimostrazione, ha l’obiettivo di rafforzare nello studente/essa le attitudini logico-deduttive apprese nell'insegnamento di Fondamenti dell'informatica. Conoscenza e comprensione. Alla fine di questo insegnamento lo studente/essa saprà:
riconoscere i grafici e le proprietà asintotiche delle funzioni elementari;
ricordare il significato intuitivo e la definizione di limite (sia nel caso continuo, sia nel caso discreto) ed enunciare e dimostrare alcuni risultati fondamentali sui limiti;
ricordare la definizione di funzione continua ed enunciare i principali risultati relativi alle funzioni continue;
confrontare le diverse crescite di una funzione, ricordare le definizioni dei simboli di Landau ed utilizzarli nella discussione della complessità di un algoritmo;
ricordare la definizione di successione geometrica e discuterne il comportamento asintotico e le proprietà qualitative;
riconoscere una successione definita per ricorrenza e discutere la stabilità dell’equilibrio di una successione per ricorrenza lineare del primo ordine;
ricordare la definizione di derivata di una funzione in un punto e le sue interpretazioni applicative (pendenza, velocità istantanea, tasso istantaneo di variazione);
ricordare l’espressione della derivata delle funzioni elementari e le regole di derivazione;
ricordare la definizione di primitiva di una funzione ed illustrare il legame tra diverse primitive della stessa funzione su un intervallo;
enunciare il Teorema di Lagrange ed illustrarne le sue interpretazioni cinematica e geometrica e le sue principali;
enunciare e dimostrare i test di monotonia e convessità;
ricordare l’espressione dei polinomi di Taylor di una funzione in un punto e i polinomi di Mac-Laurin delle funzioni elementari;
enunciare e dimostrare il Teorema di esistenza degli zeri ed il Teorema sulla convergenza del metodo di Newton;
descrivere e confrontare i metodi di bisezione e di Newton per la risoluzione approssimata di un’equazione;
ricordare la definizione di integrale definito di una funzione su un intervallo e le sue interpretazioni in termini di lavoro, spostamento netto, area di regioni piane, valor medio;
ricordare la formula del punto medio per il calcolo approssimato di un integrale definito e valutare l’errore commesso nell’approssimazione;
enunciare e dimostrare il Teorema di Torricelli-Barrow ed il Teorema fondamentale del calcolo;
ricordare la definizione di integrale improprio ed enunciare alcuni criteri di convergenza;
ricordare la definizione di serie ed enunciare alcuni criteri di convergenza;
ricordare la definizione di serie geometrica e le sue applicazioni e discuterne la convergenza
discutere il legame tra integrali impropri e serie
Applicare conoscenza e comprensione. Alla fine di questo insegnamento lo studente/essa avrà sviluppato capacità di lavorare sia su aspetti grafici sia su aspetti di calcolo, approssimato o esatto. In particolare, a livello di grafici saprà:
dedurre dal grafico di una funzione informazioni qualitative e quantitative sulla funzione stessa (dominio, immagine, monotonia, zeri, segno, limiti);
ottenere dal grafico di una funzione il grafico di nuove funzioni, mediante trasformazioni geometriche o mediante l’uso delle proprietà delle funzioni composte;
tracciare il grafico della derivata di una funzione a partire dal grafico della funzione stessa, analizzando in modo critico i legami tra una funzione e la sua derivata;
interpretare il grafico della numerosità di una popolazione in funzione del tempo e tracciare da esso il grafico del tasso di crescita in funzione del tempo;
tracciare il grafico della velocità di un oggetto che si muove di moto rettilineo, a partire dal grafico della sua posizione;
tracciare il grafico della posizione di un oggetto che si muove di moto rettilineo, a partire dal grafico della sua velocità e dalla posizione all’istante iniziale;
discutere la risolubilità di un’equazione, mediante il confronto tra grafici.
A livello di calcolo approssimato saprà:
determinare l’approssimazione di una funzione in un punto mediante un polinomio di Taylor e utilizzarla per approssimare i valori della funzione, stimandone l’errore commesso
eseguire ed implementare l’algoritmo di bisezione e lo schema ricorsivo del metodo di Newton per stimare le soluzioni di un’equazione;
calcolare in modo approssimato integrali definiti utilizzando la formula del punto medio, sia a partire dall’espressione esplicita della funzione integranda, sia a partire dal suo grafico, stimando l’errore commesso
A livello di calcolo esatto saprà:
calcolare la derivata di una funzione;
determinare l’approssimazione di una funzione in un punto mediante un polinomio di Taylor;
calcolare le primitive di funzioni e integrali definiti, in casi immediati;
determinare la somma di una serie geometrica, anche in funzione di eventuali parametri.
Inoltre, lo studente/essa saprà:
discutere la convergenza di un integrale improprio o di una serie, utilizzando in modo opportuno i criteri di convergenza;
interpretare e rielaborare grafici qualitativi e dati quantitativi di fenomeni di tipo fisico (cinematica del punto) o biologico (popolazioni e loro dinamica).
Autonomia di giudizio. Alla fine di questo insegnamento lo studente/essa saprà:
riconoscere ed individuare argomentazioni logiche con una chiara identificazione di assunti e conclusioni;
collegare e commentare criticamente i principali risultati teorici illustrati nel corso dell’insegnamento, individuando i legami che tra essi intercorrono.
Programma
1. Funzioni, grafici e modelli 1.1. Funzioni elementari e loro grafici 1.2. Trasformazioni geometriche di grafici 1.3. Grafici di funzioni composte
2. Il concetto di limite 2.1. Il concetto di limite nel caso continuo (limite di funzioni) 2.2. Il concetto di limite nel caso discreto (limite di successioni) 2.3. Principali risultati teorici sui limiti 2.4. Successioni definite per ricorrenza 2.5. Crescite e confronti di crescite: i simboli di Landau
3. Calcolo differenziale 3.1. Derivata di una funzione in un punto 3.2. Funzione derivata e funzioni primitive; relazioni tra una funzione e la sua derivata o le sue primitive 3.3. Derivata e monotonia; derivata e convessità. 3.4. Approssimazione locale di funzioni mediante polinomi
4. Risoluzione approssimata di equazioni 4.1. Il Teorema di esistenza degli zeri ed il metodo di bisezione 4.2. Il metodo di Newton
5. Calcolo integrale 5.1. Integrale definito di una funzione su un intervallo 5.2. Teorema Fondamentale del Calcolo Integrale 5.3. Teorema di Torricelli-Barrow 5.4. Integrali impropri
6. Serie numeriche 6.1. La serie geometrica 6.2. Le serie armoniche generalizzate 6.3. Definizioni e risultati teorici sulle serie 6.4. Confronto tra serie ed integrali impropri
Modalità d'esame
L'esame consiste in tre prove in modalità informatizzata (tutte obbligatorie per tutti gli studenti, indipendentemente dall’anno accademico di iscrizione). Durante le prove non è consentito l'uso di strumenti elettronici e non è permesso consultare testi o appunti. Si può utilizzare la calcolatrice solamente durante la terza prova.
Prima prova (quiz preliminare) Questa prova consiste nella risposta a cinque domande a scelta multipla, che hanno l’obiettivo di verificare le conoscenze di base dello/a studente/essa. Per superare la prova occorre rispondere in modo corretto ad almeno 4 domande su 5; chi non supera la prova non può accedere alle prove successive.
Seconda prova (teoria) Questa prova verte sugli argomenti trattati a lezione ed esercitazioni e mira anche a valutare le conoscenze di definizioni, enunciati e dimostrazioni di teoremi, nonché le capacità logico-deduttive. La prova è valutata in trentesimi; possono accedere alla terza prova gli studenti che realizzano almeno 14/30.
Terza prova (esercizi) Questa prova prevede la risoluzione di un certo numero di esercizi, in cui lo/a studente/essa deve dimostrare di saper applicare le sue conoscenze in problemi strutturati. La prova è valutata in trentesimi; per superarla occorre realizzare almeno 14/30.
Il punteggio complessivo dell'esame è la media (arrotondata all'intero più vicino) dei punteggi ottenuti nella seconda e terza prova, aumentata di 1 se la prima prova (quiz) è stata superata con 4 risposte corrette ed aumentata di 2 se la prima prova è stata superata con 5 risposte corrette. L'esame è superato se il punteggio finale è almeno 18/30. Il voto finale verrà comunicato agli studenti attraverso la bacheca appelli.
ARCHITETTURA DEGLI ELABORATORI1° anno · 6 CFU · INF/01 · 1 file
L’insegnamento si propone di fornire alle studentesse e agli studenti: la conoscenza dell’organizzazione hardware degli elaboratori, attraverso la nozione di gerarchie di macchine virtuali la comprensione delle…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento si propone di fornire alle studentesse e agli studenti:
la conoscenza dell’organizzazione hardware degli elaboratori, attraverso la nozione di gerarchie di macchine virtuali
la comprensione delle funzioni svolte dall’hardware e utilizzate dai sistemi operativi
le nozioni di base per la comprensione del processo di traduzione da linguaggi ad alto livello a linguaggio macchina
L'insegnamento è supportato da un laboratorio, finalizzato alla programmazione utilizzando un linguaggio assemblativo composto da un insieme di istruzioni appartenente allo standard RISC-V.
Insegnare le architetture degli elaboratori fa parte degli obiettivi formativi specifici del CdS in Informatica (L31), in particolare è tra quelli relativi all'area informatica di base. Al termine dell’insegnamento le studentesse e gli studenti sarano in grado di:
Conoscenza e comprensione
Conoscere le relazioni tra linguaggi ad alto livello (e.g., C e Java) e il linguaggio macchina
Conoscere le tecniche di traduzione in linguaggio macchina e del collegamento (linking/loading)
Analizzare i componenti digitali che sono alla base dell’architettura dei moderni calcolatori
Capacità di applicare conoscenza e comprensione
Sviluppare piccoli programmi in un linguaggio assemblativo
Autonomia di giudizio
Valutare criticamente soluzioni alternative tenendo conto delle specifiche hardware
Abilità comunicative
Presentare i concetti dell'architettura dei moderni calcolatori utilizzando un linguaggio tecnico appropriato
Programma
Teoria (4 CFU - 32 ore)
Calcolatori: astrazioni e tecnologia
Instruction Set Architecture (ISA)
RISC-V ISA
Bit, byte, parola, operandi dell'hardware e gli indirizzi
Rappresentazione delle istruzioni nel calcolatore
Traduzione e avvio di un programma (assembler, linker, loader)
L'aritmetica in virgola mobile nel RISC-V
Il processore RISC-V
Introduzione di base del RISC-V
Unità aritmetica e logica, registri
Metodologia di temporizzazione
Realizzazione di un'unità di elaborazione
Uno schema semplice di implementazione
Bus e I/O
I tipi di bus e l'arbitraggio
I/O programmato con busy waiting (pooling)
I/O controllato dall'interrupt
Direct Memory Access
Il meccanismo di interruzione del RISC-V
Gerarchia delle memorie
Organizzazione delle memorie, località temporale e spaziale
Tecnologie delle memorie
Principi base e prestazioni delle memorie cache
Laboratorio (2 CFU - 20 ore)
RISC-V ISA e linguaggio assemblativo
Operandi allocati in memoria, indirizzi e registri
Operazioni logiche
Istruzioni condizionali - if-then-else e cicli
Supporto hardware alle procedure - registri, stack e heap
Compilazione e traduzione dei programmi
Simulazione di una ALU
Modalità d'esame
L’esame consiste di prove scritte e una prova orale con voto finale espresso in trentesimi (con possibilità di lode). Le prove sono articolate in più parti:
una prova di ammissione (10 punti) finalizzata a verificare l’acquisizione delle competenze elementari
due prove relative agli argomenti di teoria (14 punti) e di laboratorio (8 punti)
Tutte le parti dell’esame devono essere superate e contribuiscono a determinare il voto finale. Le domande della prova di ammissione, che possono essere a risposta aperta oppure a risposta chiusa, sono verificabili in modo automatico.
Le domande di laboratorio vertono sugli argomenti trattati nelle lezioni di laboratorio, in particolare la programmazione nel linguaggio assemblativo del processore RISC-V, e sono svolte (e verificate) con l'assistenza di compilatori e simulatori usati in laboratorio. Le studentesse e gli studenti devono dimostrare la capacità di sviluppare codice assembly corretto, sia dal punto di vista grammaticale che algoritmico.
Le domande di teoria (esame scritto e/o orale) possono essere a risposta aperta oppure a risposta chiusa. Le domande a risposta aperta possono richiedere l’enunciazione e la descrizione di proprietà o di tecniche viste a lezione. Possono altresì richiedere l’applicazione della teoria a particolari esempi. Con queste domande si intende valutare la comprensione dei principi visti a lezione, la capacità di enunciarli con l’uso appropriato di un linguaggio scientifico e la capacità di applicarli a casi pratici.
Tutte le prove si svolgeranno in presenza nelle aule e nei laboratori didattici dell'Università.
Testi di riferimento
Libro Titolo: Struttura e progetto dei calcolatori - Progettare con RISC-V - seconda edizione Anno pubblicazione: 2023 Editore: Zanichelli Autore: David A Patterson e John L Hennessy Note testo: Edizione italiana a cura di Alberto Borghese Obbligatorio:
Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31); in particolare, l’insegnamento getta le basi di un approccio formale all’informatica, e costituisce il…
Scheda dell'insegnamento
Obiettivi formativi
Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31); in particolare, l’insegnamento getta le basi di un approccio formale all’informatica, e costituisce il fondamento metodologico di tutto il successivo percorso formativo. I macro-argomenti dell’insegnamento:
rappresentazione dei dati e loro codifica digitale e circuiti digitali;
introduzione alle tecniche di dimostrazione e alla logica proposizionale e dei quantificatori;
elementi di teoria dei linguaggi regolari e automi a stati finiti,
contengono un insieme di conoscenze e competenze richieste da tutti i successivi insegnamenti di settore informatico. Quindi l’insegnamento ha un carattere propedeutico e multidisciplinare. CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Al termine dell’insegnamento saranno state acquisite:
conoscenza delle tecniche di rappresentazione digitale dell’informazione
conoscenza dei circuiti digitali
conoscenza delle tavole di verità per i connettivi proposizionali, della deduzione naturale per la logica delle proposizioni e dei quantificatori
conoscenza delle principali equivalenze relative ai connettivi proposizionali e ai quantificatori (leggi di de Morgan, dualità dei quantificatori)
conoscenza delle principali costruzioni e dei principali teoremi sui linguaggi formali
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Al termine dell’insegnamento si sarà in grado di:
codificare e decodificare numeri con e senza segno, interi, frazionari, in virgola mobile;
simulare il comportamento di circuiti combinatori e semplici circuiti sequenziali
analizzare e sintetizzare di circuiti logici elementari per realizzare funzioni booleane
formalizzare enunciati nel linguaggio naturale in termini di logica elementare
riconoscere le principali forme di dimostrazione relative ai connettivi proposizionali e ai quantificatori
seguire in dettaglio lo svolgersi delle dimostrazioni illustrate nell'ambito del corso, e produrre in autonomia semplici dimostrazioni, anche utilizzando le regole della deduzione naturale
associare linguaggi regolari ad automi finiti e dimostrare la non regolarità di linguaggi
AUTONOMIA DI GIUDIZIO
Saper valutare la correttezza delle applicazione delle tecniche apprese. Saper scegliere le tecniche più adeguate in situazioni nuove.
ABILITÀ COMUNICATIVE
Saper descrivere sotto forma di testo scritto e con sufficienti dettagli le applicazioni delle tecniche apprese nel corso
CAPACITÀ DI APPRENDIMENTO
Sviluppo di capacità autonome di apprendimento e di autovalutazione della propria preparazione. Capacità di intraprendere gli studi successivi della propria carriera di studente con un alto grado di autonomia.
Programma
Codifica digitale dell’informazione: bit, byte e suoi multipli.
Cenni riepilogativi sulla notazione posizionale
Codifica dei numeri naturali e interi: binario, ottale, esadecimale, complemento a 1 e a 2
Elementi di codifica dei numeri reali: virgola mobile, notazione esponenziale
Porte logiche, tavole di verità, espressioni Booleane e forme normali
Circuiti combinatori
Cenni sui circuiti sequenziali
La rappresentazione insiemistica di relazioni e funzioni, costruzioni su insiemi: insieme potenza, prodotto cartesiano, somma disgiunta e insieme delle funzioni di dominio e codominio dati.
Principali equivalenze relative a operazioni su insiemi e loro dimostrazione.
Tecniche di dimostrazione: dimostrazione diretta, per assurdo, per contrapposizione; dualità dei quantificatori.
Tavole di verità e nozione di conseguenza logica per la logica proposizionale.
Cenni sulla semantica dei quantificatori
Nozioni di base di linguaggi formali: alfabeto, parole su un alfabeto e operazione di concatenazione. L'insieme dei linguaggi e operazioni su linguaggi.
Automi a stati finiti e loro relazioni con i circuiti sequenziali; automi non deterministici con teorema di Rabin-Scott
Espressioni regolari e loro semantica: teorema di Kleene.
Proprietà dei linguaggi regolari.
Modalità d'esame
Esame scritto costituito da domande ed esercizi erogati attraverso la piattaforma Moodle, e diviso in due parti, il superamento dalla prima parte è condizione necessaria per accedere alla seconda. Il punteggio della prova scritta, espresso in 30esimi, sarà dato dalla somma dei punteggi in 30esimi dei singoli esercizi. Il punteggio di ogni esercizio valuterà la conoscenza, la capacità di applicarla e di organizzarla in un discorso. Valuterà inoltre la capacità di ragionamento e la qualità dell’esposizione (competenza nell’impiego del lessico specialistico, efficacia, linearità). Ulteriori dettagli sono presenti sul sito moodle.
Testi di riferimento
Libro Titolo: Fondamenti dell'Informatica Anno pubblicazione: 2023 Editore: Pearson Autore: Richard Johnsonbaugh, J. Glenn Brookshear, Dennis Brylow ISBN 9788891935519 Note testo: Maggiori dettagli alla pagina https://he.pearson.it/catalogo/1701 Obbligatorio:
Codice insegnamento INF0348
Lingua Inglese I1° anno · 3 CFU · L-LIN/12 · 0 file
Tramite esercitazioni di base di Inglese orientate alla comprensione dei testi a alla grammatica di base, l’insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica…
Scheda dell'insegnamento
Obiettivi formativi
Tramite esercitazioni di base di Inglese orientate alla comprensione dei testi a alla grammatica di base, l’insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31) e fa parte dell’area Lingua inglese. CONOSCENZA E CAPACITÀ DI COMPRENSIONE l'obiettivo del corso è quello di garantire che gli studenti laureandi del nostro dipartimento abbiano una conoscenza della lingua inglese nell'intervallo B1-B2 del QCER per quanto riguarda la grammatica e le capacità di lettura.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE alla fine del corso, gli studenti dovrebbero comprendere a sufficienza la natura del sistema dei tempi verbali inglesi, la formazione degli aggettivi comparativi e superlativi, le complicazioni che circondano i sostantivi numerabili e non numerabili e l'importanza dei pronomi per poter superare la Scuola di Scienze in esame di grammatica a domicilio. Dovrebbe inoltre essere in grado di leggere brevi testi semplici su argomenti legati all'informatica.
AUTONOMIA DI GIUDIZIO non applicabile
ABILITÀ COMUNICATIVE non applicabile (non vi è alcuna componente di lingua scritta o parlata nel corso poiché i nostri studenti universitari non sono tenuti a comunicare la loro scienza in inglese a livello universitario. Le materie scientifiche di base hanno comprensibilmente la priorità sull'apprendimento delle lingue straniere nell'orario di insegnamento di questa materia di laurea)
CAPACITÀ DI APPRENDIMENTO alla fine del corso, e dopo aver superato l'esame di inglese interno, gli studenti dovrebbero sentirsi più sicuri di portare il loro inglese alla fase successiva sia che decidano di continuare gli studi universitari o di entrare nel mondo del lavoro.
Programma
Grammatica di base
Lessico
Pratica
(Informazioni dettagliate su https://informatica.i-learn.unito.it/course/view.php?id=2900 - commissione: [email protected])
Lesson 9: Past Perfect, Past Perfect Continuous, Future Perfect, Future Perfect Continuous
Lesson 10: Modals, Acronyms, Reading Signs
Lesson 11: Passive
Lesson 12: Reported Speech
Lesson 13: Social English, Part B text and question types
Lesson 14: Articles, Pronouns, Possessives
Modalità d'esame
Il test finale e` svolto nei laboratori informatici mediante il sistema SET. La prova di Inglese I per informatica e` articolata in due parti, A e B. La parte A (durata 60 min.) deve essere necessariamente superata per poter accedere alla parte B. Il superamento della parte B (durata 30 min.) completa la prova. La valutazione e` automatica e comunicata immediatamente dal sistema allo studente. In ogni appello si svolgono entrambe le parti, in successione; gli studenti che hanno gia` superato la prima parte in un appello precedente devono dare solo la seconda. __Attenzione:__ Gli studenti possono richiedere il riconoscimento dei certificati B1-B2 (secondo il Common European Framework) per l'esame di Lingua Inglese I compilando la richiesta di riconoscimento delle APU - Attività Pre-Universitarie ([https://di.unito.it/aputarm]).
Testi di riferimento
English grammar in use. With answers, Raymond Murphy, Cambridge University Press
Codice insegnamento MFN0590
Matematica Discreta, Algebra E Geometria1° anno · 12 CFU · MAT/02 · 0 file
L’insegnamento si propone di fornire allo studente una introduzione alla matematica discreta e all'algebra lineare, con particolare riguardo per gli aspetti più rilevanti per la formazione di base di un informatico, in…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento si propone di fornire allo studente una introduzione alla matematica discreta e all'algebra lineare, con particolare riguardo per gli aspetti più rilevanti per la formazione di base di un informatico, in particolare una adeguata familiarità con le strutture algebriche, il calcolo combinatorio, l'algebra lineare, le sue applicazioni geometriche e le principali tecniche di dimostrazione.
L'insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31), in particolare di quelli relativi all'area matematica di base, che includono un'introduzione alla matematica discreta e all'algebra lineare.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE Acquisizione di conoscenze teoriche e operative relative alla matematica discreta, all'algebra lineare e alla geometria, con specifico riferimento a tematiche di rilievo per l'Informatica. Al termine del corso occorrerà dare prova di aver compreso le basi fondamentali della teoria dei gruppi e degli anelli e dei loro morfismi, con la conoscenza di alcuni specifici esempi; in particolare ci si aspetta la conoscenza della struttura algebrica degli interi, con applicazione all’aritmetica modulare. Si richiede inoltre la comprensione della nozione di spazio vettoriale e di applicazione lineare, e l'utilizzo di questi concetti in contesti geometrici.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE Acquisizione della capacità di applicare le conoscenze teoriche relative alla matematica discreta alla risoluzione di esercizi e di problemi, con specifico riferimento a tematiche di rilievo per l'informatica. Occorrerà essere in grado di manipolare permutazioni, risolvere equazioni diofantee lineari in due variabili, congruenze lineari ed impostare e risolvere problemi di carattere enumerativo utilizzando in modo appropriato il linguaggio ed il formalismo della teoria degli insiemi, com particolare riguardo alle operazioni tra insiemi (unione, intersezione, prodotto), le relazioni e le funzioni. Si richiederà di familiarizzarsi con il calcolo matriciale, risolvere sistemi lineari, calcolare autovalori e autospazi di endomorfismi.
AUTONOMIA DI GIUDIZIO Acquisizione di consapevole autonomia di giudizio con riferimento a valutazione e interpretazione di dati per scelte risolutive in situazioni nuove.
ABILITÀ COMUNICATIVE Acquisizione di competenze e strumenti per la comunicazione nella forma scritta e orale, in lingua italiana, unitamente all'utilizzo di linguaggi formali e terminologia matematica.
CAPACITÀ DI APPRENDIMENTO Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
Programma
MATEMATICA DISCRETA: Linguaggio degli insiemi • Insiemi: insieme vuoto; sottoinsiemi; unione; intersezione; complementare; insieme delle parti (con particolare attenzione al caso finito). • Corrispondenze, relazioni e funzioni: relazioni d’ordine. • Relazioni di equivalenza e partizioni. • Composizione e inversione di corrispondenze. • Iniettività, suriettività, composizione e invertibilità di funzioni. Calcolo combinatorio • Cardinalità di insiemi finiti • Principi della somma e del prodotto • Disposizioni semplici e con ripetizioni • Combinazioni semplici e con ripetizioni. • Il Teorema del binomio e il triangolo di Pascal-Tartaglia • Il principio di inclusione-esclusione Strutture algebriche • Semigruppi e loro morfismi. • Monoidi e loro morfismi: monoide delle parole • Gruppi e loro morfismi. • Alcuni esempi di strutture algebriche: numeri naturali e interi, gruppo delle biiezioni di un insieme. • Gruppi e sottogruppi ciclici. • Sottogruppi e Teorema di Lagrange. • Corpi e campi: campo dei numeri razionali. Aritmetica modulare • Anelli degli interi e delle classi di resto. • Teorema della divisione • L'algoritmo di Euclide • Identità di Bezout • Equazioni diofantee • Il teorema di Eulero-Fermat Gruppo delle permutazioni • Composizione, potenze e inverse di permutazioni. • Decomposizione in cicli disgiunti e decomposizione in trasposizioni. • Parità di una permutazione • Sottogruppi del gruppo delle permutazioni.
ALGEBRA LINEARE E GEOMETRIA: Polinomi. • Numeri reali e complessi. • Spazi Vettoriali. Spazio Euclideo. Indipendenza lineare, basi, dimensione. • Sistemi Lineari. Riduzione di Gauss-Jordan, Teorema di Rouch ́e-Capelli, spazio delle soluzioni. • Interpretazione geometrica: rette, piani, iperpiani, lineari e affini, in forma parametrica e Cartesiana. • Determinante di una matrice. Algebra dello spazio di matrici.• Applicazioni Lineari. Nucleo e Immagine. Matrice associata, cambiamento di base, matrici simili. • Autovettori e autovalori di una matrice quadrata. Diagonalizzazione.
Prodotti scalari, Complemento ortogonale. Forme quadratiche. • Teorema spettrale per gli operatori auto-aggiunti.
Modalità d'esame
L’esame consiste di due parti, una di Matematica Discreta e una di Algebra lineare e Geometria, che possono essere affrontate anche in appelli differenti. Le prove di esame sono scritte, a meno di motivata richiesta di esame orale da parte dei docenti. Le domande possono riguardare sia la teoria che lo svolgimento di esercizi. L’esito dell’esame è espresso in trentesimi come media dei punteggi riportati nelle due parti.
Testi di riferimento
Libro Titolo: Lezioni di Matematica Discreta - Seconda edizione Anno pubblicazione: 2023 Editore: CreateSpace Independent Publishing Platform Autore: Andrea Mori ISBN 9798861545273 Obbligatorio: Libro Titolo: Algebra e Matematica discreta Anno pubblicazione: 2000 Editore: Zanichelli/Decibel Autore: Alberto Facchini ISBN 9788808097392 Obbligatorio: Libro Titolo: Modern Algebra: an introduction (Sixth edition) Anno pubblicazione: 2009 Editore: John Wiley & Sons Autore: Durbin, J. R., ISBN 9780470384435 Obbligatorio: Libro Titolo: Algebra Lineare Anno pubblicazione: 2014 Editore: Bollati Boringhieri Autore: Serge Lang Obbligatorio: Altro Titolo: Bruno Martelli, “Geometria e algebra lineare”, note del corso. URL: https://people.dm.unipi.it/martelli/Alg%20Lin.pdf Obbligatorio:
Codice insegnamento INF0328
Ofa - Matematica1° anno · SECS-S/06 · 0 file
L'insegnamento si propone di presentare gli strumenti matematici preliminari necessari per seguire i corsi di carattere quantitativo del Corso di Laurea. L'insegnamento consente di acquisire la capacità di utilizzare…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento si propone di presentare gli strumenti matematici preliminari necessari per seguire i corsi di carattere quantitativo del Corso di Laurea. L'insegnamento consente di acquisire la capacità di utilizzare le tecniche matematiche preliminari per seguire i corsi di carattere quantitativo del Corso di Laurea. In particolare, al termine dell'insegnamento, lo/a studente/ssa deve essere in grado di:
riconoscere le tecniche e gli strumenti matematici preliminari utilizzati comunemente nei corsi di carattere quantitativo;
utilizzare tali tecniche e strumenti per la formalizzazione di semplici problemi e la loro soluzione;
interpretare i risultati ottenuti e riconoscerne la corretta formulazione nel linguaggio matematico.
Programma
Insiemi e operazioni tra insiemi
Polinomi
Equazioni e disequazioni
Sistemi di equazioni e di disequazioni
Piano cartesiano
Funzioni lineari, quadratiche, esponenziali e logaritmiche
Modalità d'esame
L'esame è costituito da un quiz erogato a distanza attraverso la piattaforma Moodle, della durata di 45 minuti, costituito da 10 domande a risposta multipla. Per assolvere agli OFA occorre rispondere correttamente ad almeno 6 domande. Non è previsto un limite al numero di tentativi di esame, ma se questo non viene superato entro il termine dell'anno accademico non è possibile compilare il piano carriera del secondo anno. Durante l'esame è ammesso l'uso di una calcolatrice non programmabile. Gli esiti vengono comunicati attraverso la piattaforma Esse3.
Codice insegnamento INT1475
PROGRAMMAZIONE I1° anno · 9 CFU · INF/01 · 0 file
Questo insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31), in particolare di quelli dell’area Informatica di base, mirando a fornire le conoscenze di base…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31), in particolare di quelli dell’area Informatica di base, mirando a fornire le conoscenze di base della programmazione e del funzionamento di un interprete virtuale, propedeutici alla quasi totalità dei corsi a seguire. CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione di metodologie di progettazione e sintesi di algoritmi di base.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Acquisizione dell'uso di strumenti linguistici e del calcolatore elettronico per tradurre algoritmi di base in programmi funzionanti.
AUTONOMIA DI GIUDIZIO. Acquisizione di criteri per stabilire correttezza e coerenza dei programmi sintetizzati rispetto a semplici specifiche.
ABILITÀ COMUNICATIVE. Acquisizione dei primi elementi del lessico che caratterizzano un informatico finalizzati al passaggio da una descrizione algoritmica informale, per descrivere la soluzione ad un problema, alla sua versione in linguaggio di programmazione vero e proprio.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
Programma
Modello di memoria
Tipi elementari: struttura, operazioni
Comando “assegnazione”: espressioni a valori di tipo elementare
Stato con elementi di tipo elementare: definizione e proprietà
Tipo puntatore: struttura e operazioni come incremento, decremento, malloc(), free()
Stato con elementi di tipo elementare e puntatore
Comando “selezione” e verifica proprietà
Programmazione iterativa con cicli
problemi numerici su dati di tipo elementare: addizione, moltiplicazione, serie numeriche
problemi su dati di tipo puntatore/array: filtri, riorganizzazione elementi, conteggi
Funzioni e Frame-stack
struttura funzione e “signature”
meccanismo della chiamata: parametri attuali/formali, frame, variabili locali, frame-stack
rientro dalla chiamata: collocazione risultato, operand stack
classificazione chiamate
Ricorsione e correttezza
problemi numerici su dati di tipo elementare (addizione, moltiplicazione, quadrato, etc.)
problemi numerici su dati di tipo stringa
problemi c/controvarianti e dicotomici su array monodimensionali
problemi su strutture puntate
Schemi algoritmici e strutture dati avanzate
collezioni di dati di tipo eterogeneo (struct)
quantificatori alternati su coppie di array monodimensionali
quantificatori alternati su coppie di matrici
quantificatori alternati su array/matrici
Modalità d'esame
L'esame è essenzialmente uno scritto che si svolge al calcolatore o su carta. Esso verifica la capacità di saper:
progettare semplici algoritmi iterativi e ricorsivi;
codificare programmi che implementano algoritmi iterativi e ricorsivi;
rispondere a domande su aspetti fondamentali della programmazione, come correttezza o terminazione;
simulare il funzionamento di un linguaggio di programmazione a runtime
La somma dei punteggi degli esercizi proposti permetterà di ottenere voti sino al "30 e Lode".
Testi di riferimento
Dispense o lucidi ufficiali, distribuiti dai docenti.
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di programmazione del Corso di Laurea in Informatica (L31) e fa parte dell’area Informatica caratterizzante. Permette a…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di programmazione del Corso di Laurea in Informatica (L31) e fa parte dell’area Informatica caratterizzante.
Permette a studenti e studentesse di proseguire il percorso di introduzione alla programmazione, iniziato con Programmazione I, con l'obiettivo di approfondire concetti di informatica di base e in particolare il paradigma di programmazione imperativa, affrontando in maniera sistematica l’allocazione dinamica di dati in memoria principale e il relativo accesso, le strutture dati ricorsive, la ricorsione e fornendo un’introduzione alla strutturazione del codice in più file. In particolare, l’insegnamento mostrerà come definire ed utilizzare semplici strutture dati (liste, alberi binari,...) e tipi di dati astratti (pile, code, insiemi,..), i meccanismi di base per favorire riuso e modularità del software, la gestione di casi eccezionali, quali per esempio input malformati, così come alcune librerie fondamentali per la programmazione in C. Si darà particolare enfasi all'uso di metodologie di sviluppo del software, utilizzando concetti e pratiche dell'ingegneria del software (sviluppo guidato dal testing, programmazione basata sugli invarianti,...) e fornendo cenni alla complesità computazionale in tempo e spazio. CONOSCENZA E CAPACITÀ DI COMPRENSIONE: Dal punto di vista della acquisizione di contenuti di programmazione e metodologici, studenti e studentesse acquisiranno la capacità di progettare e realizzare piccole/medie applicazioni in C sfruttando gli strumenti di base della programmazione imperativa, impareranno a utilizzare e a realizzare alcune strutture dati fondamentali e approfondiranno la conoscenza della gestione dinamica della memoria.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE: capacita di comprendere semplici specifiche scritte in linguaggio naturale, di individuarne eventuali ambiguità, di riformularle in modo non ambiguo, e di sviluppare funzioni/programmi C (adeguatamente commentati e dotati di una test suite) che soddisfino tali specifiche.
AUTONOMIA DI GIUDIZIO: capacità di ragionare sulle possibilità alternative di rappresentazione e di codifica e sulle conseguenze delle varie scelte.
ABILITÀ COMUNICATIVE: acquisizione di una buona capacità di comprensione delle consegne e di spiegazione delle scelte implementative, unita all’uso corretto della terminologia del settore (e più in generale dell’informatica).
CAPACITÀ DI APPRENDIMENTO: acquisizione di capacità autonome di apprendimento e di autovalutazione.
Programma
Il programma dell’insegnamento è articolato nei seguenti argomenti:
Ripasso dei concetti di base della programmazione imperativa e di C.
Leggere e comprendere una consegna: identificazione dei dati utili da prevedere quali input, rilevazione di eventuali dati inutili, comprensione del compito da svolgere, articolazione di una soluzione e produzione dell’output richiesto.
Gestione esplicita della memoria principale tramite allocazione, accesso e deallocazione di strutture dati.
Strutture dati dinamiche lineari (es. liste collegate ordinate), accesso agli elementi, modifica degli elementi e della struttura, sintesi di informazione dai dati contenuti tramite approccio iterativo e ricorsivo.
Tipi di dati astratti pila e coda realizzati tramite array e liste.
Introduzione alla strutturazione di un programma in più file (inclusi i file header) e sua compilazione.
Alberi binari.
Tipi union.
Lettura e scrittura formattata su file (fopen, fscanf, fprintf, fclose).
La presentazione di argomenti teorici sarà completata dalla risoluzione di problemi pratici, affrontata sia sul piano concettuale che su quello della programmazione al computer.
Modalità d'esame
La verifica è articolata in tre fasi.
1. PROGETTI DI LABORATORIO.
Gli/le studenti dovranno svolgere e consegnare sulla piattaforma Moodle i PROGETTI DI LABORATORIO che verranno assegnati durante lo svolgimento dell'insegnamento. Per essere ammessi all'ESONERO e all'ESAME è necessario aver consegnato con successo tutti i PROGETTI DI LABORATORIO. La consegna dei PROGETTI DI LABORATORIO può essere effettuata durante tutto l'anno e sarà chiusa solo nei periodi di esame. Saranno valide solo le consegne effettuate entro la data di scadenza delle iscrizioni all’ESONERO. I PROGETTI DI LABORATORIO possono essere svolti individualmente o in un gruppo di 2 persone. Se i PROGETTI DI LABORATORIO sono svolti in gruppo, entrambi i componenti del gruppo devono consegnare. Il codice di ciascun progetto sarà sottoposto a dei test automatici. Condizione necessaria ma non sufficiente per effettuare la consegna con successo è che tutti i test siano superati (colore verde) senza eccezione. Sarà a cura dei docenti segnalare agli studenti eventuali problemi nel codice non rilevati automaticamente.
2. ESONERO
L’ESONERO sarà scritto e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito. Gli studenti potranno essere divisi in turni in caso di appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati nei giorni immediatamente precedenti il giorno ufficiale dell'ESONERO. Non ci saranno differenze per gli studenti dei vari canali di erogazione della didattica, che effettueranno l’ESONERO insieme. L’iscrizione è obbligatoria e i non iscritti NON saranno in alcun caso ammessi a sostenere l’ESONERO (attenzione: le iscrizioni chiudono una settimana prima dell’appello). La prova consisterà in un esercizio di programmazione erogato tramite la Piattaforma Esami in laboratorio e/o su carta. Se il programma contiene errori ritenuti significativi dai docenti, ricevete INSUFFICIENTE e dovrete ripetere l’ESONERO agli appelli successivi. Chi ottiene SUFFICIENTE (pari a 1 punto) o BUONO (pari a 2 punti) o OTTIMO (pari a 3 punti) sarà ammesso/a all’ESAME ed il voto, che avrà la validità di un anno solare, contribuirà alla valutazione finale.
3. ESAME
L’ESAME sarà scritto e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito. Gli studenti potranno essere divisi in turni in caso di appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati dopo l'ESONERO e prima dell’ESAME. Non ci saranno differenze per gli studenti dei vari canali di erogazione della didattica, che effettueranno l’ESAME insieme. L’iscrizione è obbligatoria e i non iscritti NON saranno in alcun caso ammessi a sostenere l’ESAME (attenzione: le iscrizioni chiudono una settimana prima dell’appello). La prova consisterà in una serie di domande a risposta chiusa e aperta sul programma dell'insegnamento, erogate tramite la Piattaforma Esami in laboratorio e/o su carta. Il punteggio dell'esame scritto è un numero da 0 a 30, e l'esame si ritiene superato se tale voto è ≥ 17.
Il VOTO DELL'ESAME è ottenuto sommando il punteggio dell'ESONERO (da 1 a 3) e il punteggio dello SCRITTO (da 17 a 30); un volo ≥ 31 viene verbalizzato come "30 e Lode".
===
ISTRUZIONI PER GLI STUDENTI CHE SOSTENGONO L'ESAME DI PROGRAMMAZIONE II [MFN0585] (utilizzando il linguaggio di programmazione Java): l'esame è suddiviso in due parti («PROGRAMMAZIONE II – PARTE 1» e «PROGRAMMAZIONE II – PARTE 2»). Il superamento della PARTE 1 è un prerequisito per sostenere la PARTE 2. Una volta superata la PARTE 1, non è necessario ripeterla (lo studente potrà sempre sostenere la PARTE 2). Nota bene: sul portale di ateneo sono fornite iscrizioni separate per la PARTE 1 e per la PARTE 2. È obbligatorio essere iscritti alle parti di esame che si desidera sostenere.
Testi di riferimento
L’insegnamento si avvarrà di un libro di testo di riferimento ma, nello spirito dello Universal Design for Learning per l’inclusione didattica, saranno forniti materiali didattici aggiuntivi in varie forme, pubblicati tramite la pagina Moodle dell'insegnamento (si veda http://informatica.i-learn.unito.it/).
Oltre alle slide utilizzate a lezione e ai testi degli esercizi affrontati, nei limiti delle risorse disponibili in aula, saranno fornite anche risorse multimediali quali registrazioni audio-video delle lezioni e relative trascrizioni, e quiz di autovalutazione.
La scelta del libro di testo è in corso e sarà comunicata a breve.
Codice insegnamento P434050117
Ricerca Operativa1° anno · 6 CFU · MAT/09 · 0 file
Il corso si propone di fornire a studenti e studentesse conoscenze di ricerca operativa, con particolare riferimento al campo della programmazione lineare, sia sotto l'aspetto modellistico che sotto l'aspetto…
Scheda dell'insegnamento
Obiettivi formativi
Il corso si propone di fornire a studenti e studentesse conoscenze di ricerca operativa, con particolare riferimento al campo della programmazione lineare, sia sotto l'aspetto modellistico che sotto l'aspetto algoritmico. La ricerca operativa studia modelli e metodi, basati sulle tecniche introdotte, per l'utilizzo ottimale di risorse scarse (in ambiti produttivi, finanziari, ecc.). Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare riguardo all'area Matematica di base. Chi frequenta deve apprendere algoritmi e tecniche della programmazione lineare, e acquisire la capacità di sviluppare e risolvere semplici programmi lineari.
CONOSCENZA E CAPACITA' di COMPRENSIONE Acquisizione dei principi e delle tecniche della programmazione lineare, e conoscenza dei meccanismi di base e la teoria relativa agli algoritmi che operano su tali modelli.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE Acquisizione della capacità di costruire modelli di programmazione lineare ---- sia a variabili continue che a variabili intere ---- partendo dall'enunciato di un problema reale, e la capacità di applicare a questi gli algoritmi fondamentali.
AUTONOMIA DI GIUDIZIO Acquisizione di autonomia di giudizio rispetto ai tipi di modelli adeguati a rappresentare un problema reale e nella selezione tra determinati approcci risolutivi sulla base delle risorse computazionali disponibili.
ABILITÀ COMUNICATIVE Acquisizione di competenze e strumenti per poter attivamente discutere le necessità modellistiche e gli aspetti algoritmici di comuni problemi di ottimizzazione, e della matematica sottesa dai più comuni algoritmi per la programmazione lineare.
CAPACITÀ DI APPRENDIMENTO Acquisizione di capacità autonome di apprendimento in campo modellistico e algoritmico.
Programma
Introduzione alla Ricerca Operativa e cenni di teoria della complessità. Sviluppo di modelli di Programmazione Lineare. Algoritmo del simplesso per programmi lineari a variabili continue. Teoria della dualità lineare e algoritmo simplesso duale. Metodi per la programmazione con variabili intere (Branch and bound). Introduzione ai problemi di flusso su reti e problema del cammino minimo.
Modalità d'esame
L’esame è costituito da una prova scritta di durata di almeno 1.5 ore seguita da una prova orale facoltativa. Lo scritto potrebbe essere erogato su supporto informatico in laboratorio.
La prova scritta vale da 0 a 33 punti mentre la prova orale facoltativa vale da -16 a 6 punti che si sommano al voto dello scritto, che quindi può diventare insufficiente.
Validità dei risultati ottenuti durante le prove che formano l’esame:
Il voto ottenuto durante una prova rimane valido durante tutto l’Anno Accademico in cui la prova è stata sostenuta.
La ripetizione di una prova, ovvero presenza effettiva all'appello anche in caso di ritiro, comporta l’annullamento dell’esito della prova precedente.
Testi di riferimento
Altro Titolo: Appunti/Lecture notes Descrizione: Appunti forniti dai docenti. / Lecture notes provided by the instructors. Obbligatorio: Libro Titolo: Linear programming: foundations and extensions Anno pubblicazione: 2014 Editore: Springer Autore: R. J. Vanderbei ISBN 9783030394158 Note testo: Facoltativo, solo per approfondimenti. / Only for autonomous in-depth study. Obbligatorio:
Codice insegnamento INF0327
TECNOLOGIE DEL LINGUAGGIO NATURALE1° anno · 2 file
ALGORITMI E STRUTTURE DATI2° anno · 9 CFU · INF/01 · 2 file
L’insegnamento ha lo scopo di introdurre i concetti e le tecniche fondamentali per l’analisi e la progettazione di algoritmi, che sono alla base dello sviluppo del software. Gli obiettivi dell'insegnamento degli…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento ha lo scopo di introdurre i concetti e le tecniche fondamentali per l’analisi e la progettazione di algoritmi, che sono alla base dello sviluppo del software. Gli obiettivi dell'insegnamento degli algoritmi fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare sono tra quelli relativi all'area informatica di base. Gli studenti acquisiranno conoscenze circa l’analisi di correttezza e complessità computazionale degli algoritmi, sulle strutture dati per la rappresentazione dell’informazione, sulle tecniche di problem-solving mediante lo sviluppo di algoritmi efficienti. L’insegnamento è supportato da un laboratorio che ne costituisce parte integrante, finalizzato alla realizzazione e sperimentazione degli algoritmi e delle strutture dati mediante un linguaggio imperativo ed uno object-oriented CONOSCENZA E CAPACITÀ DI COMPRENSIONE Acquisizione di conoscenze teoriche e operative relative a problemi algoritmici di base e della loro risoluzione mediante il disegno di algoritmi e di strutture dati efficienti, nonché la capacità di analizzare le soluzioni adottate sotto il profilo della loro correttezza logica e complessità computazionale.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE Acquisizione della capacità di applicare le conoscenze teoriche a problemi concreti nei vari ambiti della programmazione di sistemi informatici, tanto producendo il codice dei programmi quanto utilizzando librerie software preesistenti, con particolare attenzione al rigore metodologico, alla chiarezza e verificabilità delle soluzioni adottate nonché alla loro efficienza ed affidabilità.
AUTONOMIA DI GIUDIZIO Acquisizione di consapevole autonomia di giudizio con riferimento alla valutazione delle diverse soluzioni teoriche che si possono adottare e del loro impatto sulle applicazioni pratiche.
ABILITÀ COMUNICATIVE Acquisizione di competenze e strumenti per la comunicazione nella forma scritta e orale per documentare le soluzioni adottate in modo tecnicamente rigoroso.
CAPACITÀ DI APPRENDIMENTO Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
Programma
Programma
Problemi e algoritmi: risolubilità, correttezza, complessità.
Analisi computazionale e complessità asintotica
Algoritmi di ordinamento
Algoritmi elementari quadratici
Divide et impera: mergesort e quicksort
Risoluzione di relazioni di ricorrenza
Limiti inferiori per l’ordinamento
Programmazione dinamica
Massima sottosequenza comune
Strutture dati
Strutture concrete: array, liste, tabelle hash
Strutture astratte: pile, code, dizionari
Code di priorità, heapsort
Analisi ammortizzata, cenni
Alberi
Definizione e visita
Alberi di ricerca
Alberi rosso-neri
Grafi
Definizione e visita
Ordinamento topologico e componenti fortemente connesse
Algoritmi greedy: alberi di copertura minima
Cammini minimi: algoritmo di Dijkstra
Modalità d'esame
L'esame di Algoritmi e strutture dati consiste in una prova scritta, somministrata mediante la piattaforma Esami, ed in una discussione orale del progetto di laboratorio. Il superamento dello scritto permette di accedere alle prove orali della sessione in cui è stato superato lo scritto. Nel caso in cui questa seconda prova non venga superata entro i termini della sessione, lo scritto dovrà essere ripetuto. Il voto sarà la media pesata dei voti ottenuti nelle due prove scritta ed orale, valutate in 30+1 esimi, essendo comunque necessario il raggiungimento della sufficienza in entrambe le prove.
Testi di riferimento
Libro Titolo: Introduzione agli algoritmi e strutture dati (ed. terza) Anno pubblicazione: 2010 Editore: McGraw-Hill Autore: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, , Clifford Stein Obbligatorio:
L'insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31), in particolare tra quelli relativi all'area informatica di base, fornendo un'introduzione alle…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31), in particolare tra quelli relativi all'area informatica di base, fornendo un'introduzione alle basi di dati e ai sistemi di gestione delle medesime (DBMS). Si propone perciò di fornire le competenze teoriche e pratiche necessarie alla progettazione e gestione delle basi di dati, e la padronanza degli strumenti per analizzare, progettare, sviluppare e gestire le basi di dati. CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Al termine dell'insegnamento si dovranno conoscere:
i fondamenti matematici del modello relazionale,
i linguaggi per le interrogazioni in algebra relazionale, in calcolo relazionale e in SQL,
i fondamenti della teoria della normalizzazione,
i concetti e l'uso di transazioni,
le strutture dati per la memorizzazione efficiente dell'informazione.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Al termine dell'insegnamento si dovrà essere in grado di:
analizzare i requisiti per la progettazione di una base di dati,
rappresentare i requisiti in forma di schemi Entity-Relationship (ER),
trasformare schemi ER in schemi relazionali,
trasformare interrogazioni dal linguaggio naturale a SQL,
eseguire semplici ristrutturazioni di schemi ER sulla base di dati quantitativi.
AUTONOMIA DI GIUDIZIO
Alla fine di questo insegnamento si saprà:
progettare una piccola base di dati analizzandone in autonomia i requisiti e traducendoli in schema ER e relazionale,
motivare e argomentare le scelte progettuali di una piccola base di dati.
ABILITÀ COMUNICATIVE
Al termine dell'insegnamento si sarà in grado di:
esporre, in forma scritta e orale, una relazione tecnica che spieghi e motivi le scelte progettuali nel caso di studio proposto.
CAPACITÀ DI APPRENDIMENTO
Al termine dell'insegnamento, si saranno acquisite capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte a intraprendere gli studi successivi con un alto grado di autonomia.
Programma
Fondamenti teorici delle basi di dati relazionali (5 CFU, 40 ore):
Introduzione ai sistemi informativi e alle basi di dati
Il modello relazionale
L'algebra relazionale, con progetto di espressioni in algebra
Introduzione al calcolo relazionale
Introduzione alle transazioni
Ridondanze e anomalie, dipendenze funzionali e teoria della normalizzazione
Introduzione all’architettura dei sistemi di gestione delle basi di dati: strutture per la memorizzazione dei dati, problemi di concorrenza, affidabilità.
Laboratorio di Progettazione e SQL (4 CFU, 40 ore):
Laboratorio di Progettazione
Metodologie di progetto
Il modello Entity-Relationship
La progettazione concettuale
La progettazione logica
Cenni di progettazione fisica
Laboratorio di SQL con PostgreSQL
Il linguaggio SQL e gli standard
Definizione dei dati in SQL (DDL)
Modifica dei dati in SQL (DML)
Interrogazioni in SQL (DML/DQL) e progettazione delle espressioni in SQL
Modalità d'esame
È obbligatoria l'iscrizione all'ambiente di e-learning Moodle dove si troveranno forum di discussione, materiale didattico e compiti assegnati. L'esame consiste in una prova scritta e in una discussione orale del progetto di laboratorio. Il progetto si può svolgere in gruppo.
Prova scritta
Per accedere alla prova scritta, è necessario avere consegnato la relazione di progetto. La prova prevede da 6 a 8 domande in tutto, al fine di verificare l'apprendimento dei concetti di base. Di queste, due o tre domande riguardano argomenti di laboratorio (SQL), le restanti domande riguardano argomenti ed esercizi della parte di teoria. La valutazione è in trentesimi. Il superamento dello scritto da parte di almeno un/una componente di un gruppo di progetto permette all'intero gruppo di accedere a una delle prove orali previste per la sessione in cui lo scritto è stato superato. Nel caso in cui questa seconda prova non venga superata, lo scritto dovrà essere ripetuto. Si ha diritto al più a tre correzioni dello scritto in un anno accademico. Il voto dello scritto è valido per la sola sessione d'esame in cui è stato conseguito.
Discussione orale del progetto di laboratorio
Viene assegnato un progetto (su argomenti di progettazione) che può essere svolto individualmente o in gruppo formato da 2 o 3 studenti. La discussione della prova di laboratorio è individuale e verte sull'intero progetto. La valutazione è in trentesimi. La parte di laboratorio riguardante SQL verrà invece valutata contestualmente allo scritto. La valutazione è in trentesimi. Il progetto dev'essere discusso nella stessa data da tutti/e i/le componenti del gruppo.
Voto finale
Il voto finale sarà la media pesata dei voti ottenuti nelle due prove (scritta peso 70% e orale di laboratorio peso 30%), valutate in trentesimi, essendo comunque necessario il raggiungimento della sufficienza (18/30) in ciascuna prova.
Testi di riferimento
Libro Titolo: Basi di dati, VI edizione Anno pubblicazione: 2023 Editore: McGraw-Hill Autore: Atzeni, Ceri, Fraternali, Paraboschi, Torlone ISBN 9788838656545 Note testo: In alternativa alla quinta edizione. Obbligatorio: Libro Titolo: Basi di dati, V edizione Anno pubblicazione: 2018 Editore: McGraw-Hill Autore: Atzeni, Ceri, Fraternali, Paraboschi, Torlone ISBN 9788838694455 Obbligatorio:
Codice insegnamento P947133777
Diritto E Privacy Per L'Informatica2° anno · 6 CFU · IUS/02 · 0 file
L’insegnamento si propone di fornire una preparazione approfondita sui temi più attuali del Diritto dell'Informatica e della Privacy, esaminando i casi pratici più ricorrenti per professionisti e operatori nel settore…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento si propone di fornire una preparazione approfondita sui temi più attuali del Diritto dell'Informatica e della Privacy, esaminando i casi pratici più ricorrenti per professionisti e operatori nel settore ICT.
Attraverso l'analisi di esempi concreti tratti da accordi contrattuali, sentenze, modelli organizzativi di policy e compliance programs, l’insegnamento offrirà una visione completa e integrata degli aspetti legali, tecnologici e operativi per fornire le competenze giuridiche e normative fondamentali adeguate al futuro contesto professionale.
L'obiettivo di insegnare alle studentesse e agli studenti le nozioni di questo insegnamento ricade negli obiettivi formativi specifici del CdS in Informatica (L31), in particolare all'area multidisciplinare per quanto concerne le nozioni di diritto dell'informatica.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Acquisizione di una conoscenza essenziale delle nozioni e degli strumenti interpretativi necessari alla comprensione dei concetti giuridici fondamentali relativi al Diritto dell’Informatica e della Data Protection / Privacy sulla base delle diverse discipline nazionali, straniere e sovranazionali adottando la prospettiva comparata ed il metodo casistico
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Attraverso l'insegnamento la studentessa/lo studente acquisirà un metodo di analisi multidisciplinare dei temi trattati nel contesto giuridico nazionale ed internazionale nonché gli strumenti critici e i concetti per approfondire gli argomenti in questo settore
AUTONOMIA DI GIUDIZIO
Sviluppo di valutazione critica e di analisi in ordine alle tematiche affrontate durante l'insegnamento; capacità di valutare autonomamente, attraverso il metodo della comparazione, i tratti fondamentali dell’attuale evoluzione del Diritto dell’Informatica e della Data Protection / Privacy in relazione ai principi posti alla base dei principali ordinamenti giuridici e come interpretati dalle Corti Giudiziarie
ABILITÀ COMUNICATIVE
La studentessa/lo studente dovrà formulare concetti giuridici e interpretare le categorie giuridiche con capacità argomentativa e proprietà di linguaggio.
CAPACITÀ DI APPRENDIMENTO
Capacità di interpretare ed applicare le norme dell’ordinamento giuridico nazionale e straniero nonché analizzare e comprendere la legislazione, la giurisprudenza e la dottrina nazionali e straniere.
Programma
Particolare attenzione sarà dedicata alla gestione e protezione dei dati personali in ambito aziendale e nel settore pubblico, attraverso l'analisi delle migliori prassi da adottare nei rapporti di lavoro e in occasione di attacchi informatici e violazioni dei dati (data breach).
Inoltre, verranno trattati i principali temi legati al commercio elettronico, alla responsabilità delle piattaforme e degli Internet Service Provider, al valore dei documenti informatici e delle firme elettroniche nei contratti e nei processi, ai crimini informatici e agli aspetti più significativi per la tutela del diritto d'autore in ambiente virtuale.
Modalità d'esame
L'apprendimento degli argomenti trattati nell'insegnamento sarà valutato mediante una verifica in cui saranno accertate le conoscenze degli aspetti informatico giuridici affrontati (cfr. Risultati dell’apprendimento attesi).
Testi di riferimento
I materiali didattici saranno quelli forniti dai docenti durante il periodo di insegnamento*.
Fermo quanto sopra, a titolo di eventuale ausilio e chiarimento integrativo degli argomenti, saranno forniti su richiesta testi ulteriori
*Materiali didattici forniti dai docenti > Cliccare qui per la pagina Moodle
Codice insegnamento INF0334
Economia E Gestione Dell'Impresa2° anno · 6 CFU · SECS-P/08 · 0 file
L'obiettivo dell'insegnamento è analizzare le caratteristiche basi di una azienda, per fornire elementi interdisciplinari di carattere economico e giuridico. L'obiettivo di insegnare alle studentesse e agli studenti le…
Scheda dell'insegnamento
Obiettivi formativi
L'obiettivo dell'insegnamento è analizzare le caratteristiche basi di una azienda, per fornire elementi interdisciplinari di carattere economico e giuridico. L'obiettivo di insegnare alle studentesse e agli studenti le nozioni di l'Economia e gestione dell'impresa ricade negli obiettivi formativi specifici del CdS in Informatica (L31), in particolare all'area multidisciplinare per quanto concerne le nozioni di economia e organizzazione aziendale
Nello specifico, si approfondiranno i temi chiave per la creazione di un'impresa a carattere innovativo e/o che opera in un contesto innovativo: dal modello di business teorico alla creazione dei processi produttivi, alla comunicazione e vendita dei prodotti. Verranno studiate le relazioni delle aziende all'interno della catena del valore (clienti/fornitori) e i loro settori di riferimento. I framework teorici saranno poi applicati per l'analisi di aziende, settori e mercati innovativi, al fine di valutare come vengono colte le opportunità che l'innovazione dà alle aziende e ipotizzare sviluppi futuri di modelli.
Le studentesse/gli studenti si confronteranno con casi aziendali reali e con imprenditori. Nello specifico, al termine dell’insegnamento la studentessa/lo studente sarà in grado di:
CONOSCENZE E CAPACITA' DI COMPRENSIONE
identificare e classificare le variabili che compongono l’ambiente di riferimento dell’impresa
riconoscerne l'influenza sull’impresa
identificare i building block su cui l’impresa può costruire il vantaggio competitivo
identificare e riconoscere le principali funzioni aziendali
CONOSCENZA E COMPRENSIONE APPLICATA
analizzare l’ambiente esterno ed individuare le forze ambientali rilevanti per l’impresa
costruire un modello di business per un’impresa tesa all’innovazione ovvero operante in un contesto innovativo
formulare scelte strategiche coerenti con le condizioni ambientali e di business
AUTONOMIA DI GIUDIZIO
La studentessa/lo studente dovrà sviluppare una propria autonomia di giudizio nel valutare e interpretare: le opportunità offerte dall’innovazione per le imprese, le scelte strategiche per guidare l’innovazione dell’impresa ed esprimere considerazioni critiche. Infine, la studentessa/lo studente saprà esprimere considerazioni analitiche e di sintesi sugli aspetti fondamentali della disciplina nonché effettuare collegamenti interdisciplinari.
ABILITÀ COMUNICATIVE
La studentessa/lo studente acquisirà la terminologia, gli strumenti e le competenze per comunicare gli aspetti teorici e applicativi dell'insegnamento in forma scritta e orale. La studentessa/lo studente saprà comprendere problemi, fornire idee e soluzioni relative alla gestione d’impresa in contesti innovativi. La studentessa/lo studente saprà esprimersi con efficacia ad un pubblico esperto e non, attraverso l’impiego di linguaggi grafici e formali.
CAPACITÀ DI APPRENDIMENTO
La studentessa/lo studente avrà acquisito capacità autonoma di apprendimento e autovalutazione della sua preparazione, che gli consentiranno di proseguire gli studi con un elevato grado di autonomia.
Programma
Business model, struttura dell'organizzazione, struttura dei processi, struttura delle funzioni, strategie, analisi di settore, analisi di mercato, analisi unità organizzativa e processi aziendali.
Modalità d'esame
L'apprendimento sarà valutato mediante un esame scritto sui temi trattati a lezione per la verifica delle conoscenze e della comprensione dei temi riguardanti le caratteristiche dell'impresa e le sue funzioni principali (cfr. Risultati dell’apprendimento attesi).
Costituiscono altresì elementi di fondamentale importanza il corretto e appropriato utilizzo della terminologia, una efficace esposizione e la capacità di effettuare collegamenti logici nell'esposizione degli elementi discussi.
Testi di riferimento
In aggiunta ai materiali didattici forniti dai docenti durante il periodo di insegnamento tramite la piattaforma Moodle*, si consigliano i seguenti testi:
Osterwalder, A., & Pigneur, Y. (2020). Creare modelli di business: Un manuale pratico ed efficace per ispirare chi deve creare o innovare un modello di business. Edizioni Lswr.
Lipparini, A. (2022). L'impresa. Fondamenti di economia e gestione sostenibile. Il Mulino.
Sciarelli, S. (2020). La gestione dell'impresa: tra teoria e pratica aziendale. Wolters Kluwer.
*Materiali didattici forniti dai docenti. La pagina Moodle del corso verrà indicata durante la prima lezione del corso
Codice insegnamento INF0333
Elementi Di Logica Matematica (On-Line)2° anno · 6 CFU · MATH-01/A · 0 file
Italiano English L’insegnamento si propone di fornire allo/a studente le basi della logica matematica, con particolare riguardo per i suoi aspetti più rilevanti per la formazione di base in informatica, tra cui una…
Scheda dell'insegnamento
Scheda dell'a.a. 2025/2026: quella dell'anno in corso non è ancora pubblicata.
Obiettivi formativi
Italiano English L’insegnamento si propone di fornire allo/a studente le basi della logica matematica, con particolare riguardo per i suoi aspetti più rilevanti per la formazione di base in informatica, tra cui una adeguata familiarità con le strutture algebriche e le principali tecniche di dimostrazione. Aim of the course is to provide the student with mathematical logic basics, with particular attention to its most relevant aspects for the basic training of a computer scientist, including adequate familiarity with algebraic structures and the main proof techniques. Italiano English CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Conoscenza delle principali tecniche di dimostrazione e delle formulazioni classiche del principio di induzione. Conoscenza della struttura delle formule del primo ordine. Conoscenza delle definizioni delle principali nozioni semantiche relative alla logica del primo ordine (validità, conseguenza logica) CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Capacità di riconoscere le principali tecniche di dimostrazione (diretta, per assurdo, per contrapposizione, per casi) in semplici dimostrazioni di proposizioni relative a strutture algebriche e relazionali. Dovrà dimostrare di riconoscere l’esistenza o meno di biiezioni tra insiemi infiniti costruiti mediante le operazioni di unione disgiunta, prodotto cartesiano, insieme potenza, e insieme delle sequenze finite. Dovrà essere in grado di utilizzare le principali forme del principio di induzione (ordinaria, forte, principio del minimo) in semplici dimostrazioni aritmetiche o relative alla sintassi formale dei linguaggi proposizionali e del prim’ordine. Dovrà essere in grado di analizzare sia sintatticamente che semanticamente le formule proposizionali, anche mediante l'uso di tavole di verità. Dovrà dimostrare di essere in grado di formalizzare mediante formule logiche semplici asserzioni formulate in italiano. Dovrà essere in grado di valutare la validità o meno di semplici formule del prim'ordine in strutture algebriche in accordo con le regole della semantica di Tarski e dovrà essere in grado di stabilire quando una formula non è conseguenza logica di altre formule provvedendo semplici controesempi. Dovrà inoltre sapere determinare l'insieme di verità di una data formula del prim'ordine in una struttura assegnata. AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per riconoscere la corretta impostazione di una semplice dimostrazione. ABILITÀ COMUNICATIVE. Acquisizione degli elementi della terminologia logica di base. CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, teorica e pratica. KNOWLEDGE AND UNDERSTANDING. Knowledge of the main proof techniques and the standard formulations of the induction principle. Knowledge of the structure of first-order formulas. Knowledge of the definitions of the main semantical notions of first-order logic. APPLYING KNOWLEDGE AND UNDERSTANDING. Ability to recognize the main proof techniques (direct, reductio ad absurdum, contraposition, proof by cases) in the proof of simple propositions about algebraic and relational structures. Ability to recognize the existence or non-existence of bijections among infinite sets built by disjoint union, cartesian product, power set and formation of finite sequences. Ability to apply the main forms of the induction principle (ordinary induction, strong induction and least number principle) in simple proofs concerning properties of natural nmumbers and propositional and first-order formulas. Ability to analyze syntactically and semantically propositional formulas, also by means of truth tables. Ability to translate simple natural language statements into first-order formulas. Ability to assess the validity of simple first-order formulas in algebraic structures according to the clause of Tarski's semantic definition, and to prove that a given formula is not a logical consequence of other formulas by means of counterexamples. Finally, the student is assumed to be able to establish the truth-set of a first-order formula in a given structure. MAKING JUDGMENTS. Acquisition of the basic criteria to assess the soundness of a simple proof. COMMUNICATION SKILLS. Acquisition of the elements of the basic logical terminology. LEARNING SKILLS. Acquisition of autonomous learning and auto-evaluation skills of their own compentences, theoretical and practical.
Programma
Italiano English Tecniche di dimostrazione (8 ore circa) • Dimostrazione diretta, per assurdo, per contrapposizione; • Connettivi logici e loro significato in termini di condizioni di verità; • Tavole di verità e conseguenza logica tra proposizioni. Insiemistica di base (8 ore circa) • Insiemi • Relazioni • Funzioni Cardinalità (10 ore circa) • Insiemi numerabili e più che numerabili: esempi; • Operazioni infinitarie: unioni e intersezioni, prodotti e somme, con le principali proprietà. Il principio di induzione (6 ore circa) • Forma ordinaria e forte del principio di induzione; • Principio del minimo; • Equivalenza tra forme del principio di induzione; • Induzione strutturale; • Ricorsione. Formalizzazione (6 ore circa) • Linguaggi proposizionali e del prim’ordine: termini, quantificatori, alfabeto non logico, formule; • Schemi di traduzione da linguaggio naturale in linguaggi del prim’ordine (condizione sufficiente, necessaria, per tutti gli n abbastanza grandi, ci sono n arbitrariamente grandi,…) Semantica della Logica del primo ordine (14 ore circa) • Regole della semantica di Tarski per formule del primo ordine: esempi, e definizioni; • Conseguenza logica tra formule del primo ordine: definizioni e costruzione di contro-esempi. Proof techniques (8 hours) • Direct proof, proof by contradiction and by contraposition. • Logical constants and their meanings in terms of truth tables. • Logical consequence. Basic set theory (8 hours) • Sets • Relations • Functions Cardinality (10 hours) • Countable and uncountable sets: examples; • Infinitary set operations: union and intersections, sums and products, and their main properties. The principle of induction (6 hours) • Ordinary and strong forms of the induction principle.The least number principle. • Equivalence of the forms of the induction principle. • Structural induction. • Recursion. Formalization (6 hours) • Propositional and first order languages: terms, quantifiers, non-logic alphabet, formulas; • Patterns of translation from natural language to first order languages (sufficient condition, necessary condition, for all n large enough…, there are arbitrarily large n…) Semantics of first order logic (14 hours) • Tarski semantics for first order formulae: examples and definitions; • Logical consequence between first order formulae: definitions and construction of counterexamples.
Modalità d'esame
Italiano English Le prove di esame sono scritte a meno di motivata richiesta di esame orale da parte del docente come integrazione della prova scritta. Le domande dello scritto e dell'eventuale orale possono riguardare sia la teoria che lo svolgimento di esercizi. L’esito dell’esame è espresso in trentesimi. The exams are written unless the teachers request an oral exam as a supplement to the written exam. The questions of the written and possible oral can involve both the theory and the carrying out of exercises. The result of the exam is expressed in thirtieths.
Testi di riferimento
Oggetto: Materiale didattico Bacheca appelli Orario lezioni Vai a Moodle Registrati a questo insegnamento Studenti registrati Invia email agli studenti registrati Esporta tabella
Codice insegnamento MAT0139
Elementi Di Probabilita' E Statistica2° anno · 9 CFU · MAT/06 · 0 file
L'insegnamento della probabilità e della statistica contribuisce al raggiungimento degli obiettivi formativi specifici del CdS in Informatica (L31) coerentemente con i profili professionali e gli sbocchi occupazionali…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento della probabilità e della statistica contribuisce al raggiungimento degli obiettivi formativi specifici del CdS in Informatica (L31) coerentemente con i profili professionali e gli sbocchi occupazionali previsti, in particolare quelli relativi all'area matematico-fisica. Coerentemente con gli obiettivi del corso di Laurea in Informatica riportati nel quadro A4.a, SUA-CDS, l'insegnamento, importante per tutte le scienze applicate, concorre in particolare alla costruzione del solido nucleo scientifico e metodologico che è parte della formazione di base della figura professionale dell'informatico/infomatica. I contenuti del corso riguardano specificamente la teoria fondamentale (di Kolmogorov) della probabilità (eventi, variabili aleatorie discrete, variabili aleatorie continue) e della statistica (statistica descrittiva e inferenziale classica: stima puntuale, stima intervallare, test di ipotesi). Conoscenza e capacità di comprensione: Al termine dell'insegnamento, si avrà familiarità con il calcolo della probabilità di eventi, il concetto di variabile aleatoria e con le principali distribuzioni di probabilità. Si saranno inoltre acquisiti i concetti base della statistica descrittiva e inferenziale.
Capacità di applicare conoscenza e comprensione: Si dovrà essere in grado svolgere calcoli di base sulla probabilità di eventi anche con l'uso delle variabili aleatorie. Si sarà in grado di svolgere una prima analisi di un assegnato dataset: descrittiva, intervalli di confidenza e verifica di ipotesi sui parametri. Si saprà usare a tale scopo R, software dedicato al calcolo di quantità aleatorie e allo svolgimento di analisi statistiche.
Autonomia di giudizio: Si sarà in grado di selezionare il modello probabilistico che può descrivere propriamente l'esperimento presentato nell'esercizio. Si sarà in grado di commentare criticamente ed estrarre informazione dal calcolo di indici statistici e dal disegno di opportuni grafici. Si saprà scegliere l'analisi statistica adeguata al fine di rispondere alle domande proposte e reinterpretarne l'esito nell'ambito del quesito stesso.
Capacità di apprendimento: Si saranno migliorate le capacità autonome di apprendimento e di autovalutazione della propria preparazione, mediante un percorso guidato di apprendimento che parte dalla lezione, prosegue con l'esercitazione guidata dal docente e poi autonoma su esercizi proposti dal docente e infine si completa con lo svolgimento delle prove di autovalutazione.
Programma
Il programma di lavoro è articolato in due parti, la probabilità e la statistica.
Probabilità. Spazio campionario e probabilità, insiemi, modelli probabilistici, probabilità condizionata, teorema delle probabilità totali, formula di Bayes, indipendenza. Variabili aleatorie discrete, funzione di densità discreta, funzioni di variabili aleatorie, attesa, varianza. Densità discreta congiunta di variabili multidimensionali, condizionamento e indipendenza, indipendenza condizionale. Variabili aleatorie continue, funzione di densità, funzione di distribuzione cumulata.
Statistica. Legge dei grandi numeri e teorema del limite centrale. Introduzione a R. Dati univariati, tipi di dati, indici riassuntivi di posizione, di variabilità e di forma. Rappresentazioni grafiche, istogrammi, box plot e scatterplot. Confronti qualitativi, dati appaiati. Dati univariati categoriali e tabelle. Statistica inferenziale: distribuzioni campionarie e stimatori. Stime con un campione: proporzione, media e varianza. Stime con due campioni: differenza tra proporzioni, differenza tra medie. Stima intervallare. Verifica di ipotesi: concetti basilari. Test con un campione e con due campioni (media e differenza tra mede, proporzione e differenza di proporzioni). Test per la verifica di normalità. Test per la bontà del fit e per l'indipendenza. Cenni ai test non parametrici. Correlazione e regressione lineare: modelli lineari, stima dei parametri e relativi test di ipotesi.
Modalità d'esame
La verifica della preparazione avviene con un esame scritto, erogato sulla piattaforma Moodle, in presenza. Il quiz contiene esercizi sia di probabilità che di statistica. Per lo svolgimento del quiz sarà necessario utilizzare il software R.
Testi di riferimento
Libro Titolo: Introduction to probability Anno pubblicazione: 2008 Editore: Athena Scientific Autore: Dimitri P. Bertsekas, John N. Tsitsiklis Obbligatorio: Libro Titolo: Using R for Introductory Statistics Anno pubblicazione: 2014 Editore: Chapman & Hall/CRC Autore: J. Verzani Obbligatorio: Libro Titolo: Introduction to Probability and Statistics for Engineers and Scientists Anno pubblicazione: 2014 Editore: Academic Press Autore: Sheldon M. Ross Obbligatorio:
L'insegnamento concorre alla realizzazione degli obiettivi formativi del Corso di Laurea in Informatica (L31), in particolare rispetto al nucleo scientifico e metodologico che lo caratterizza, e fa parte dell’area…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento concorre alla realizzazione degli obiettivi formativi del Corso di Laurea in Informatica (L31), in particolare rispetto al nucleo scientifico e metodologico che lo caratterizza, e fa parte dell’area "Affine-integrativa". Esso si propone di fornire alle studentesse e agli studenti conoscenze di base su meccanica ed elettromagnetismo classici, specificamente in relazione alla comprensione della struttura fisica dei calcolatori e dei circuiti che li compongono. L'insegnamento ha per scopo anche lo sviluppo di competenze analitiche con rilevanza interdisciplinare, utili in vista sia di un rapido e proficuo inserimento nel mondo del lavoro, sia di una continuazione degli studi nel Corso di Laurea Magistrale. Conoscenza e capacità di comprensione Al termine dell'insegnamento, le studentesse e gli studenti saranno in grado di:
descrivere le leggi fondamentali della meccanica classica, nonché le principali proprietà dei campi elettrico e magnetico, con cenni al comportamento della materia soggetta a tali campi;
comprendere il comportamento degli elementi di un circuito in corrente continua;
illustrare i principi fisici alla base del funzionamento delle porte logiche.
Capacità di applicare conoscenza e comprensione Al termine dell'insegnamento, le studentesse e gli studenti avranno acquisito la capacità di applicare le conoscenze teoriche relative alla fisica di base alla risoluzione di semplici esercizi, in particolare sulle leggi fisiche alla base delle tecnologie impiegate nei calcolatori attuali e della strumentazione per la rilevazione dei fenomeni naturali.
Autonomia di giudizio Al termine dell'insegnamento, le studentesse e gli studenti saranno in grado di:
esprimere i concetti con un formalismo matematico rigoroso;
collegare fra di loro in modo armonico i principi fondamentali della meccanica e dell'elettromagnetismo;
fornire una risposta quantitativa ai problemi assegnati.
Abilità comunicative Acquisizione di competenze nella formulazione di un problema fisico.
Capacità di apprendimento Al termine dell'insegnamento, le studentesse e gli studenti avranno acquisito capacità autonome di apprendimento di argomenti nell'ambito delle scienze fisiche e di relativa autovalutazione della propria preparazione.
Programma
Il campo elettrostatico. Legge di Gauss. Conservatività del campo elettrostatico. Superfici equipotenziali. Conduttori e dielettrici. Capacità elettrica di un conduttore. Condensatori. Densità di energia del campo elettrico. Correnti elettriche. Leggi di Ohm e di Kirchhoff. Circuiti RC.
Fisica dei dispositivi elettronici. Conduttori, isolanti e semiconduttori. Giunzione pn e diodo. Dispositivi MOS e porte logiche (NOT, NOR, NAND).
Il campo magnetico indipendente dal tempo. Magneti. Moto di una carica in campo magnetico; esempi ed applicazioni. Filo percorso da corrente in campo magnetico. Campo magnetico generato da un filo percorso da corrente. Legge di Ampere. Legge di Gauss per il campo magnetico.
Campi elettrici e magnetici variabili nel tempo. Induzione elettromagnetica. Legge di Faraday-Henry. Correnti alternate. Legge di Ampere. Autoinduzione. Induttanza del solenoide ideale. Densità di energia del campo magnetico. Circuiti RL.
Modalità d'esame
L'esame è comune per il corso A e per il corso B. L'esame consiste in due prove erogate in modalità informatizzata che si svolgono nello stesso giorno sulla Piattaforma Esami di Moodle.
Prima prova: esercizi (18 punti)
Questa prova consiste nel risolvere 1 esercizio sul campo elettrico o sul campo magnetico ed 1 esercizio su circuiti elettrici. La prova è articolata in domande, in parte a scelta multipla e in parte a risposta aperta di tipo numerico. Per superare la prova occorre ottenere almeno 9 punti.
Seconda prova: teoria (12 punti)
Questa prova consiste nel rispondere a un quesito di teoria articolato in sotto-punti. Una lista di possibili temi d'esame è reperibile a questo link. Per superare la prova occorre ottenere almeno 6 punti.
Il punteggio complessivo dell'esame è la somma dei punteggi ottenuti nelle due prove. Le studentesse e gli studenti che hanno totalizzato 30 punti possono accedere alla lode sostenendo un orale integrativo sul programma del corso.
All'esame è possibile utilizzare la calcolatrice. Non è consentito l'uso di libri o appunti ma solo di un formulario distribuito dai docenti in sede di esame.
Testi di riferimento
Libro Titolo: Fisica (Vol. 2). Elettromagnetismo, ottica e fisica moderna Anno pubblicazione: 2008 Editore: Pearson Addison Wesley Autore: Richard Wolfson ISBN 9788871924304 Obbligatorio: Libro Titolo: Fisica per scienze ed ingegneria (Vol. 2) Anno pubblicazione: 2015 Editore: EdiSES Autore: Raymond A. Serway, John W. Jewett ISBN 9788879598248 Obbligatorio: Libro Titolo: Fisica 2 Anno pubblicazione: 2004 Editore: Casa Editrice Ambrosiana Autore: David Halliday, Kenneth S. Krane, Robert Resnick ISBN 9788840812793 Obbligatorio:
L’insegnamento si propone di fornire allo studente le basi della logica matematica, con particolare riguardo per i suoi aspetti più rilevanti per la formazione di base di un informatico, tra cui una adeguata…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento si propone di fornire allo studente le basi della logica matematica, con particolare riguardo per i suoi aspetti più rilevanti per la formazione di base di un informatico, tra cui una adeguata familiarità con le strutture algebriche e la semantica di Tarski per la logica del primo ordine. Questi contenuti fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare sono tra quelli relativi all'area di Matematica di base. CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Conoscenza delle nozioni fondamentali di insiemistica e loro utilizzo in contesti logici o informatici. Conoscenza delle formulazioni classiche del principio di induzione e suo utilizzo in ambito informatico. Conoscenza della struttura delle formule del primo ordine. Conoscenza delle definizioni delle principali nozioni semantiche relative alla logica del primo ordine (validità, conseguenza logica)
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Capacità di riconoscere le principali tecniche di dimostrazione (diretta, per assurdo, per contrapposizione, per casi) in semplici dimostrazioni di proposizioni relative a strutture algebriche e relazionali. Dovrà essere in grado di utilizzare le principali forme del principio di induzione (ordinaria, forte, principio del minimo) in semplici dimostrazioni aritmetiche o relative alla sintassi formale dei linguaggi proposizionali e del prim’ordine. Dovrà essere in grado di analizzare sia sintatticamente che semanticamente le formule proposizionali, anche mediante l'uso di tavole di verità. Dovrà dimostrare di essere in grado di formalizzare mediante formule logiche semplici asserzioni formulate in italiano. Dovrà essere in grado di valutare la validità o meno di semplici formule del prim'ordine in strutture algebriche in accordo con le regole della semantica di Tarski e dovrà essere in grado di stabilire quando una formula non è conseguenza logica di altre formule provvedendo semplici controesempi. Dovrà inoltre sapere determinare l'insieme di verità di una data formula del prim'ordine in una struttura assegnata.
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per riconoscere la corretta impostazione di una semplice dimostrazione.
ABILITÀ COMUNICATIVE. Acquisizione degli elementi della terminologia logica di base.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, teorica e pratica.
Programma
Ripasso sulle tecniche di dimostrazione:
Dimostrazione diretta, per assurdo, per contrapposizione;
Connettivi logici e loro significato in termini di condizioni di verità;
Tavole di verità e conseguenza logica tra proposizioni.
Ripasso su insiemistica di base:
Insiemi, Relazioni, Funzioni
Operazioni infinitarie: unioni e intersezioni, prodotti e somme, con le principali proprietà.
Il principio di induzione:
Forma ordinaria e forte del principio di induzione;
Principio del minimo;
Equivalenza tra forme del principio di induzione;
Induzione strutturale;
Ricorsione.
Formalizzazione:
Linguaggi proposizionali e del prim’ordine: termini, quantificatori, alfabeto non logico, formule;
Schemi di traduzione da linguaggio naturale in linguaggi del prim’ordine (condizione sufficiente, necessaria, per tutti gli n abbastanza grandi, ci sono n arbitrariamente grandi,…).
Semantica della Logica del primo ordine:
Regole della semantica di Tarski per formule del primo ordine: esempi, e definizioni;
Conseguenza logica tra formule del primo ordine: definizioni e costruzione di contro-esempi.
Strutture algebriche:
ordini parziali, alberi finiti, reticoli, algebre di Boole: proprietà di base e formalizzazione al primo ordine.
Modalità d'esame
Le prove di esame sono scritte, a meno di richiesta da parte dei docenti di esame orale come integrazione della prova scritta. Le domande dello scritto e dell'eventuale orale possono riguardare sia la teoria che lo svolgimento di esercizi. L’esito dell’esame è espresso in trentesimi. L'eventuale orale potrà contare fino ad un totale di 15 punti.
Testi di riferimento
Altro Titolo: Note e slides dei docenti Descrizione: materiale distribuito dai docenti Obbligatorio:
Codice insegnamento INF0336
Principi Di Programmazione Orientata Agli Oggetti2° anno · 9 CFU · INF/01 · 0 file
L’insegnamento ha l'obiettivo di estendere i concetti e la capacità di programmazione acquisiti con Programmazione I e Programmazione II. In particolare, si vuole fornire una introduzione al paradigma di programmazione…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento ha l'obiettivo di estendere i concetti e la capacità di programmazione acquisiti con Programmazione I e Programmazione II. In particolare, si vuole fornire una introduzione al paradigma di programmazione orientata agli oggetti tramite il linguaggio Java. L'obiettivo di insegnare la programmazione fa parte degli Obiettivi formativi specifici del CdS in Informatica (L31), infatti è tra quelli relativi all'area informatica di base. In particolare, l'insegnamento illustrerà le astrazioni fondamentali per la progettazione del software (classi e oggetti), la definizione di semplici strutture dati (liste, alberi, pile, code) e operazioni corrispondenti, i meccanismi di base per favorire riuso e modularità del software (ereditarietà, polimorfismo, tipi generici, wild card), la specifica degli invarianti di classe e la gestione delle loro violazioni (asserzioni ed eccezioni). Si darà particolare enfasi agli aspetti di buona progettazione del software, utilizzando concetti presi a prestito dall'ingegneria del software e formalismi grafici quali UML. La/lo studente acquisirà la capacità di progettare e realizzare applicazioni di piccole e medie dimensioni in Java sfruttando gli strumenti di base della programmazione a oggetti, imparerà a utilizzare e a realizzare alcune strutture dati fondamentali e approfondirà la conoscenza della libreria standard di Java.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione dei principi e degli strumenti linguistici dei linguaggi orientati agli oggetti. Acquisizione delle metodologie di progettazione e implementazione di applicazioni di piccole e medie dimensioni utilizzando il linguaggio Java.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Utilizzo dei principi, degli strumenti e delle metodologie acquisite per progettare e implementare applicazioni di piccole e medie dimensioni in Java secondo un approccio multiparadigma (orientato agli oggetti e imperativo).
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per comprendere il codice sviluppato da altre persone e stabilire come impostare una corretta progettazione e una solida implementazione delle applicazioni.
ABILITÀ COMUNICATIVE. Acquisizione e sviluppo di elementi del lessico informatico finalizzati al lavoro di progettazione, implementazione e valutazione delle applicazioni tramite linguaggi multiparadigma.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, teorica e pratica. Alla fine dell’insegnamento, le/i discenti avranno le conoscenze necessarie per poter apprendere le funzioni avanzate della programmazione ad oggetti, altri linguaggi orientati agli oggetti e per mantenersi aggiornati sugli sviluppi del settore tecnologico.
Programma
Il programma è basato sulle dispense rese disponibili sulla pagina I-learn dell’insegnamento, integrate con il testo di riferimento “Paul J. Deitel - Harvey M. Deitel, Programmare in Java - 11/Ed.” e/o altro eventuale materiale fornito dai docenti. Segue un sommario degli argomenti trattati. Tale sommario non riflette necessariamente l’ordine di esposizione degli argomenti.
Ripasso dei concetti di base della programmazione imperativa: principali differenze tra C e Java.
Incapsulamento, definizione di una classe, creazione e uso di oggetti.
Specializzazione di una classe, ereditarietà.
Relazioni tra classi, polimorfismo, classi parzialmente definite, interfacce.
Generalizzazione di una classe, classi parametriche, tipi generici, wild card.
Invarianti di classe, asserzioni, eccezioni e loro gestione.
Progettazione e implementazione di strutture dati (liste, alberi, pile, code).
Iteratori.
Cenni su progettazione a oggetti e UML.
Alcuni esempi di design pattern (Composite, Singleton, State).
Modalità d'esame
L’esame sarà SCRITTO e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito. Tuttavia, le/gli studenti potranno essere raggruppate/i in turni, per gli appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati nei giorni immediatamente precedenti il giorno ufficiale dell'esame.
Non ci saranno differenze per le/gli studenti dei canali A e B, che effettueranno l’esame insieme.
L’iscrizione all'esame su MyUnito è obbligatoria: le/gli studenti non iscritti NON potranno sostenere l’esame (attenzione: le iscrizioni chiudono approssimativamente una settimana prima dell’appello).
Nello specifico, la prova scritta sarà organizzata come segue:
Pre-test: svolgimento di alcuni esercizi a calcolatore, da effettuarsi in apposito appello in itinere della durata di un’ora. Il risultato del pre-test è un voto tra 0 e 31 (31 vale per la lode). Il superamento del pre-test (si considerano sufficienti i voti ≥18) è condizione necessaria per poter partecipare allo scritto. Inoltre, permette di partecipare a qualunque esame scritto fino a Febbraio 2028.
Esame scritto della durata di 2 ore. Esame svolto su carta, in aula. Consisterà in tre esercizi sul programma dell'insegnamento. Il voto è un numero intero compreso tra 0 e 31 (31 vale per la lode). Si considerano sufficienti i voti ≥18.
Il voto finale dell’esame viene calcolato come segue:
voto finale = ¾ * voto dell’esame scritto + ¼ * voto del pre-test
Testi di riferimento
Dispense delle/dei docenti, disponibili sui siti I-learn di Principi della programmazione orientata agli oggetti (A, B). Si noti che questo è uno dei testi fondamentali per l’insegnamento. Per quanto riguarda gli altri testi consigliati:
“Programmare in Java - 11/Ed.”: è un testo con un approccio molto pratico alla programmazione in Java.
“UML Distilled - 4/Ed”: è una guida minimale al formalismo di progettazione UML, che verrà introdotto in questo corso e trattato anche in corsi successivi.
“Java Generics and Collections”: è un testo che copre aspetti teorici e pratici dei generici e aiuta a usare al meglio questa caratteristica avanzata ma utilissima di Java.
Codice insegnamento INF0332
SISTEMI OPERATIVI2° anno · 9 CFU · INF/01 · 1 file
Il sistema operativo costituisce l’interfaccia fondamentale tra l’utilizzatore di un computer e il computer stesso. Parte essenziale del curriculum di base di una laureata o laureato in informatica è la conoscenza di…
Scheda dell'insegnamento
Obiettivi formativi
Il sistema operativo costituisce l’interfaccia fondamentale tra l’utilizzatore di un computer e il computer stesso. Parte essenziale del curriculum di base di una laureata o laureato in informatica è la conoscenza di come il sistema operativo sia in grado di amministrare le varie componenti hardware di cui è composto un computer. Queste modalità di amministrazione devono essere il più possibile trasparenti alla generica utilizzatrice o al generico utilizzatore del computer, ma devono essere conosciute a fondo da ogni specialista del settore. L’insegnamento fornisce dunque una conoscenza di base dell'architettura interna e del funzionamento dei moderni sistemi operativi, e di come, ai fini di garantire un ragionevole compromesso tra efficienza, sicurezza e facilità d’uso, vengono amministrate le risorse fondamentali della macchina su cui il sistema operativo è installato: il processore, la memoria principale e la memoria secondaria. L'obiettivo di insegnare i sistemi operativi fa dunque parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare è tra quelli relativi all'area informatica di base. Per la parte di laboratorio l'obiettivo formativo è l’apprendimento dei rudimenti della programmazione nell’ambiente del sistema operativo Unix. La parte di laboratorio mira dunque a fornire alla studentessa e allo studente una conoscenza (teorica e pratica) di base sui comandi della shell, sulla gestione dei processi, sugli strumenti di inter-process communication e sulla gestione dei segnali forniti dal sistema, oltre che alcuni rudimenti di programmazione bash. I temi introdotti durante il laboratorio corredano e integrano le conoscenze derivanti dalla parte teorica (knowledge and understanding), al tempo stesso presentando esempi di problemi realistici di comunicazione e sincronizzazione su cui studentesse e studenti sono sollecitati a cimentarsi, anche investigando soluzioni alternative (applying knowledge and understanding). La preparazione e la discussione del progetto sono inoltre volte a stimolare le capacità di organizzare il lavoro in piccoli gruppi (2-3 studentesse/studenti), e poi di illustrare verbalmente le soluzioni adottate (communication skills). TUTTE LE INFORMAZIONI SUL CORSO E IL MATERIALE DIDATTICO SI TROVERANNO IN MOODLE. Le studentesse e gli studenti acquisiranno la conoscenza dell'architettura e del funzionamento dei moderni sistemi operativi, e dovranno essere in grado di ragionare sulle prestazioni fornite dal sistema e su eventuali inefficienze. Avranno inoltre appreso i fondamenti della programmazione concorrente e la capacità di sviluppare programmi concorrenti in grado di interagire fra loro senza causare anomalie o blocchi del sistema. Infine, avranno una conoscenza di base di come le risorse della macchina (in particolar modo il tempo di CPU, lo spazio di memoria primaria e lo spazio di memoria secondaria) possano essere sfruttate al meglio. Le studentesse e gli studenti dovranno essere in grado di sviluppare programmi di sistema e concorrenti codificati con i comandi propri dell’ambiente del sistema operativo Unix; dovranno inoltre essere in grado di ragionare su alcuni problemi di comunicazione fra processi e sincronizzazione utilizzando gli strumenti introdotti durante il laboratorio.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE: le studentesse e gli studenti acquisiranno la padronanza della terminologia tecnica dei sistemi operativi e del loro funzionamento, in particolare del modo in cui riescono ad amministrare tutte le risorse di un computer e di come garantiscono in modo trasparente agli utenti i diversi tipi di servizi forniti. La conoscenza dell'ambiente Unix permetterà loro di ragionare sul caso più paradigmatico di sistema operativo oggi esistente.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE: le studentesse e gli studenti acquisiranno le competenze di base per ragionare sul funzionamento (ed eventuale mal funzionamento) di un generico sistema operativo, e su come si possa intervenire per modificare o migliorare le prestazioni in base allo specifico sistema e al contesto in cui è utilizzato.
AUTONOMIA DI GIUDIZIO: le studentesse e gli studenti saranno in grado di compiere in modo autonomo scelte e decisioni che impattano sull'installazione di un sistema operativo, sulla sua configurazione e sul suo funzionamento, incluse eventualmente le caratteristiche hardware che deve avere la macchina su cui il sistema operativo viene installato.
ABILITÀ COMUNICATIVE: la terminologia specifica dei sistemi operativi e la loro configurazione interna, acquisita dalle studentesse e dagli studenti e testata in fase di esame, permetterà loro di interloquire con altre figure professionali informatiche nonché con utenti eventualmente non competenti in materia.
CAPACITÀ DI APPRENDIMENTO: acquisizione di capacità autonome di apprendimento e di autovalutazione sugli argomenti del corso.
Programma
NOTA: Par la parte di teoria, il programma è basato sul TESTO DI RIFERIMENTO. PARTE DI TEORIA:
Introduzione al Corso di Sistemi Operativi
PARTE I: GENERALITA'
o Introduzione (cap. 1)
o Strutture dei Sistemi Operativi (cap. 2)
PARTE II: GESTIONE DEI PROCESSI
o Processi (cap. 3)
o Thread (cap. 4)
o Scheduling della CPU (cap. 5)
o Sincronizzazione dei Processi (cap. 6)
o Deadlock (Stallo di Processi) (cap. 7)
PARTE III: GESTIONE DELLA MEMORIA (PRIMARIA)
o Memoria Centrale (cap. 8)
o Memoria Virtuale (cap. 9)
PARTE IV: GESTIONE DELLA MEMORIA SECONDARIA
o Interfaccia del File System (cap. 10)
o Realizzazione del File System (cap. 11)
o Memoria Secondaria e Terziaria (Gestione dell'Hard disk)
System call per la creazione e la sincronizzazione di processi
System call per l'Inter-Process Communication e per la gestione di segnali
Esercitazioni pratiche, in particolare: esercitazioni finalizzate ad utilizzare Unix e a sviluppare programmi concorrenti
Modalità d'esame
Per superare l'esame di sistemi operativi le studentesse e gli studenti devono ottenere un punteggio sufficiente (almeno 18) nelle prove in cui si articola l’esame, che dovranno essere sostenute nel seguente ordine: - 1) Prova di laboratorio: consiste nella discussione individuale del progetto di laboratorio ed è finalizzata a valutare le competenze acquisite nel modulo di laboratorio. - 2) Prova scritta: è finalizzata a valutare le competenze acquisite sugli argomenti insegnati nel modulo di teoria. In generale potrà essere composta da domande aperte, domande chiuse a scelta multipla, esercizi. - 3) Orale facoltativo. Può essere sostenuto solo avendo preso nella prova scritta almeno 26/30. Integra il voto ottenuto sostenendo le parti di esame 1) e 2), e permette di prendere un voto massimo di 30/30 e lode. Il voto finale sarà ottenuto come somma pesata dei voti conseguiti nelle prove descritte.
Testi di riferimento
Teoria (TESTO DI RIFERIMENTO):
Silberschatz-Galvin-Gagne. Sistemi Operativi - ottava, nona o decima edizione -; Agli studenti sono anche resi disponibili fin dall’inizio del corso i lucidi usati dal docente nelle lezioni di teoria.
Laboratorio:
R. Stevens, S. Rago: "Advanced Programming in the UNIX Environment", 2a ed., Addison Wesley
M.J. Bach: "The Design of the UNIX Operating System", Prentice-Hall International Editions (L3167), per la parte relativa all'implementazione del kernel Unix.
S.R. Bourne: "The Unix System" (L1856, L1803, L2140)
K. Christian: "The Unix Operating System", John Wiley & Sons (L3147)
Tipo di esame: Orale. Valutazione: Giudizio Finale.
Codice insegnamento INF0426
Altre Attivita'3° anno · 6 CFU · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento MFN1522
Altre Attivita'3° anno · 6 CFU · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento MFN1408
Altre Attivita'3° anno · 12 CFU · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento MFN1409
Architettura Avanzata Degli Elaboratori3° anno · 6 CFU · INFO-01/A · 0 file
L'insegnamento approfondisce i principali meccanismi hardware e software che determinano le prestazioni dei moderni sistemi di calcolo (architettura, livelli di cache e interconnessione fra processori) e di come il…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento approfondisce i principali meccanismi hardware e software che determinano le prestazioni dei moderni sistemi di calcolo (architettura, livelli di cache e interconnessione fra processori) e di come il sistema operativo gestisce questi meccanismi. L'insegnamento fornisce dunque conoscenze avanzate sui meccanismi di esecuzione delle istruzioni del singolo processore (pre-fetch, branch prediction, pipeline, out-of-order execution, stallo) e sulle interazioni fra processori in architetture multicore ed eterogenee (bus contention).
Verra` approfondito l'impatto della memory hierarchy a partire dai registri, dai vari livelli di cache, fino ad arrivare ai meccanismi di paginazione e gestione dello spazio virtuale di indirizzamento.
L'obiettivo è quello di fornire gli strumenti a disposizione del programmatore di basso livello per influenzare le prestazioni agendo attraverso l'interfaccia del sistema operativo Unix/Linux. In particolare, verranno illustrate avanzate politiche di scheduling (scheduling classes, locking, CPU affinity, etc.), il monitoraggio di performance counter. Le studentesse e gli studenti acquisiranno una comprensione dei principali meccanismi architetturali e di sistema che influenzano le prestazioni dei moderni sistemi di calcolo, inclusi pipeline, branch prediction, esecuzione out-of-order, gerarchie di memoria e architetture multicore ed eterogenee. Comprenderanno inoltre il ruolo del sistema operativo nella gestione delle risorse e nell’ottimizzazione delle prestazioni.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Le studentesse e gli studenti conosceranno i principi di funzionamento delle architetture di calcolo moderne e dei sistemi operativi con particolare riferimento ai meccanismi che influenzano le prestazioni (CPU, memoria, cache e scheduling). Comprenderanno il ruolo dell’ambiente Unix/Linux come piattaforma di riferimento per l'analisi di tali sistemi.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Le studentesse e gli studenti saranno in grado di analizzare le prestazioni di programmi su architetture moderne, identificando colli di bottiglia legati a CPU, memoria e concorrenza. Sapranno utilizzare strumenti di sistema (es. performance counters e strumenti Unix/Linux) per osservare e confrontare il comportamento dei programmi.
AUTONOMIA DI GIUDIZIO
Le studentesse e gli studenti sapranno valutare criticamente l’impatto delle scelte architetturali e di sistema sulle prestazioni e proporre semplici strategie di ottimizzazione.
ABILITÀ COMUNICATIVE
Le studentesse e gli studenti saranno in grado di descrivere problemi e analisi prestazionali utilizzando terminologia tecnica appropriata e di presentare risultati derivanti da osservazioni sperimentali.
CAPACITÀ DI APPRENDIMENTO
Le studentesse e gli studenti svilupperanno la capacità di approfondire autonomamente i temi relativi alle architetture dei sistemi di calcolo e all’ottimizzazione delle prestazioni.
una prova orale (obbligatoria per tutti coloro con un voto di 25/30 o piu`, opzionale per gli altri) Per coloro che sosterranno solo la prova scritta (con voto di 24 o meno) il voto finale sara` uguale a tale voto. Per coloro che dovranno sostenere anche la prova orale (con voto di 25 o piu` nello scritto oppure volontari), il voto finale sara` determinato dalla prova orale.
Codice insegnamento INF0345
Blockchain, Sistemi Distribuiti E Decentralizzati3° anno · 6 CFU · INFO-01/A · 0 file
Il principale obiettivo del corso è sviluppare una solida comprensione delle tecnologie blockchain nel contesto dei sistemi distribuiti. La blockchain ha recentemente introdotto un nuovo modello di calcolo…
Scheda dell'insegnamento
Obiettivi formativi
Il principale obiettivo del corso è sviluppare una solida comprensione delle tecnologie blockchain nel contesto dei sistemi distribuiti.
La blockchain ha recentemente introdotto un nuovo modello di calcolo decentralizzato che si basa su idee provenienti da differenti discipline, quali crittografia, economia, informatica, … La comprensione di questo modello richiede competenze avanzate che questo corso autocontenuto si propone di fornire allo studente, con un approccio sia teorico che pratico, con una consistente parte di laboratorio su tecnologie cutting-edge.
L'obbiettivo è contribuire alla formazione di esperti che possano sia partecipare allo sviluppo della tecnologia, per esempio con percorsi di ricerca, sia trovare spazio nel relativo mercato del lavoro, selettivo e attualmente in espasione, localmente e su scala internazionale.
Partendo dalla teoria dei sistemi distribuiti, viene introdotta la computazione decentralizzata e le sue motivazioni, e il rilevante problema del consenso distribuito e sue applicazioni.
Bitcoin, che ha permesso lo sviluppo della tecnologia, viene analizzato in dettaglio come caso paradigmatico, fornendo allo studente gli strumenti per un’analisi critica su innovazione e limitazioni della tecnologia.
In seguito, viengono studiati gli smart contracts e la programmazione decentralizzata, su Bitcoin e su Ethereum, una blockchain mainstream per questo tipo di applicazioni. Lo studente così acquisisce sia la capacità di sviluppare smart contracts e semplici applicazioni decentralizzate, che di analizzare il loro funzionamento e progettare soluzioni corrette.
Per il conseguimento dei propri obiettivi formativi, il corso integra teoria e pratica tramite un approccio learning by doing, supportato da un sostanziale numero di ore di laboratorio, che permetterà agli studenti di imparare a progettare e implementare applicazioni software decentralizzate. Alla fine di questo insegnamento, le/gli studentesse/studenti saranno in grado di:
Conoscenza e capacità di comprensione
Conoscere e valutare le principali caratteristiche e le proprietà delle architetture decentralizzate e i principi generali della loro progettazione
Capacità di applicare conoscenza e comprensione
Comprendere il ruolo e le caratteristiche dei differenti algoritmi di consenso
Autonomia di giudizio
Comprendere il funzionamento della rete bitcoin e del suo linguaggio di scripting
Abilità comunicative
Conoscere le caratteristiche delle piattaforme blockchain basate su smart contract, con particolare riferimento alla piattaforma Ethereum
Capacità di apprendimento
Progettare e implementare smart contract e semplici applicazioni decentralizzate
Programma
Introduction to distributed systems and their features
Distributed programming, execution model over the Internet
Distributed algorithms, examples
Decentralised technologies
Use case: microblogging (Twitter, Mastodon, Nostr)
Use case: internet money
Defining decentralisation and its motivations
Cryptography: a recap
Main primitives (for blockchain)
Attacks and complexity notions
The Blockchain decentralised consensus
Brief history of consensus
Bitcoin’s Proof-of-Work
Incentives and tokenomics
Transactions and key management
The SCRIPT verification language
Transaction types and SCRIPT smart contracts
BIPs and some further developments (Inscriptions, Taproot…, covenants)
LAB: Bitcoin
Interaction with the Bitcoin testnet
Verifying transactions
Writing and executing a simple smart contract (Alice at the pub)
The Ethereum blockchain
Smart contracts on Ethereum
Definitions and decentralised execution model
Introduction to Ethereum’s EVM: accounts, smart contracts and gas
Ethereum cryptography
Consensus on Ethereum
Programming smart contracts: the Solidity language
ERC standards and libraries, tokenization, non-fungible tokens
LAB: Ethereum smart contracts
Development tools, and execution environments
Programming solidity smart contracts
Programming a dApp: frontend and interaction with smart contracts
Decentralised games, auctions, lotteries, tokens and NFTs ...
Group project
Modalità d'esame
La valutazione dello studente si basa su
(i) un progetto pratico guidato da concordare con il docente,
(ii) una presentazione orale del progetto svolto con discussione sul progetto e sulla parte teorica del corso.
Tutte le componenti della valutazione devono essere superate e contribuiscono a determinare il voto finale secondo una proporzione predeterminata. La consegna del progetto è condizione necessaria per accedere agli esami orali.
Testi di riferimento
Altre indicazioni bibliografiche e suggerimenti per testi di riferimento e/o di consultazione verranno discussi durante il corso
Codice insegnamento INF0422
CALCOLABILITA' E COMPLESSITA'3° anno · 9 CFU · INF/01 · 0 file
Questo insegnamento appartiente all'area Informatica caratterizzante e ha il seguente obiettivo formativo specifico del CdS in Informatica (L31): fornire approfondimenti su linguaggi di programmazione e strumenti…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento appartiente all'area Informatica caratterizzante e ha il seguente obiettivo formativo specifico del CdS in Informatica (L31): fornire approfondimenti su linguaggi di programmazione e strumenti correlati, in particolare per quanto riguarda gli strumenti per valutare l'efficienza in tempo e spazio di un algoritmo.
Iniziamo il corso chiedendoci: che cos'e' un algoritmo? Quali problemi si possono risolvere con un algoritmo? E in quali casi un algoritmo richiede risorse inaccessibili nella pratica?Il corso affronta questi problemi, trattando anzitutto la teoria della computabilita' sia dal punto di vista matematico - macchine di Turing, funzioni ricorsive - che da prospettive legate ai linguaggi di programmazione. Si discutono poi i vari possibili criteri di misura delle risorse disponibili (tempo, memoria) e le classi di complessita'. Finiamo presentando il problema P = NP . Conoscenza delle definizione del concetto di calcolo in un modo indipendente dalla macchina e dal particolare linguaggio di programmazione usato. Conoscenza dei problemi aperti in questo campo, in particolare P=/=NP. una capacità di classificare i problemi in non risolubili con un programma, in risolubile in tempo tempo polinomiale, in tempo polinomiale non deterministico e in tempo esponenziale, e dei più importanti algoritmi in ognuno di questi gruppi. Un'idea dei limiti delle soluzioni non polinomiali e delle strategie per affrontare tali limitazioni.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Classificazione delle risorse di tempo e spazio richieste da un algoritmo e comprensione dei limiti che esse pongono all'utilizzo dei programmi.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Capacità di valutare i tempi e spazi di calcolo richiesti dagli algoritmi utilizzati nei corsi.
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per confrontare l' efficenza in tempo e spazio tra diverse soluzioni di un problema.
ABILITÀ COMUNICATIVE. Capacità di capire le richieste di tempi di calcolo e di spazio di memoria attese per un programma, e di comunicare tempi e spazi effettivamente realizzati.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione in teoria della complessità.
Programma
Teoria della computabilita'
Le Macchine di Turing
Problemi non risolubili
Funzioni ricorsive
Calcolabilita' e Linguaggi di Programmazione Teoria della complessita'
Misure e classi di Complessita'
Classi di Complessita' Temporale
Classi di Complessita' Spaziale
Le classi P ed NP
Problemi NP completiDefinizione di PSPACE e NPSPACE. Teorema di Savich. Inclusioni P in NP in PSPACE in EXPTIME. Classi L e NL e inclusioni note.
Modalità d'esame
Esame scritto in presenza, fatto di due parti. Nella prima parte dell'esame, indicativamente di 25 minuti, lo studente deve rispondere a delle domande a risposta chiusa formulate sul sito Moodle di esame, e le cui risposte vengono valutate automaticamente da moodle. Nella seconda parte dell'esame, indicativamente di 90 minuti, lo studente deve rispondere a delle domande a risposta aperta formulate sullo stesso sito, le cui risposte vengono corrette manualmente.
Testi di riferimento
Libro Titolo: Introduction to the theory of Computation Anno pubblicazione: 2024 Editore: Thompson Course Technology Autore: M. Sipser ISBN 0534950973 Capitoli: 3,4,5,7 Obbligatorio:
Codice insegnamento P924086841
Calcolabilita' E Complessita'3° anno · 6 CFU · INF/01 · 0 file
Questo insegnamento appartiente all'area Informatica caratterizzante e ha il seguente obiettivo formativo specifico del CdS in Informatica (L31): fornire approfondimenti su linguaggi di programmazione e strumenti…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento appartiente all'area Informatica caratterizzante e ha il seguente obiettivo formativo specifico del CdS in Informatica (L31): fornire approfondimenti su linguaggi di programmazione e strumenti correlati, in particolare per quanto riguarda gli strumenti per valutare l'efficienza in tempo e spazio di un algoritmo.
Iniziamo il corso chiedendoci: che cos'e' un algoritmo? Quali problemi si possono risolvere con un algoritmo? E in quali casi un algoritmo richiede risorse inaccessibili nella pratica?Il corso affronta questi problemi, trattando anzitutto la teoria della computabilita' sia dal punto di vista matematico - macchine di Turing, funzioni ricorsive - che da prospettive legate ai linguaggi di programmazione. Si discutono poi i vari possibili criteri di misura delle risorse disponibili (tempo, memoria) e le classi di complessita'. Finiamo presentando il problema P = NP . Conoscenza delle definizione del concetto di calcolo in un modo indipendente dalla macchina e dal particolare linguaggio di programmazione usato. Conoscenza dei problemi aperti in questo campo, in particolare P=/=NP. una capacità di classificare i problemi in non risolubili con un programma, in risolubile in tempo tempo polinomiale, in tempo polinomiale non deterministico e in tempo esponenziale, e dei più importanti algoritmi in ognuno di questi gruppi. Un'idea dei limiti delle soluzioni non polinomiali e delle strategie per affrontare tali limitazioni.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Classificazione delle risorse di tempo e spazio richieste da un algoritmo e comprensione dei limiti che esse pongono all'utilizzo dei programmi.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Capacità di valutare i tempi e spazi di calcolo richiesti dagli algoritmi utilizzati nei corsi.
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per confrontare l' efficenza in tempo e spazio tra diverse soluzioni di un problema.
ABILITÀ COMUNICATIVE. Capacità di capire le richieste di tempi di calcolo e di spazio di memoria attese per un programma, e di comunicare tempi e spazi effettivamente realizzati.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione in teoria della complessità.
Programma
Teoria della computabilita'
Le Macchine di Turing
Problemi non risolubili
Funzioni ricorsive
Calcolabilita' e Linguaggi di Programmazione Teoria della complessita'
Misure e classi di Complessita'
Classi di Complessita' Temporale
Classi di Complessita' Spaziale
Le classi P ed NP
Problemi NP completiDefinizione di PSPACE e NPSPACE. Teorema di Savich. Inclusioni P in NP in PSPACE in EXPTIME. Classi L e NL e inclusioni note.
Modalità d'esame
Esame scritto in presenza, fatto di due parti. Nella prima parte dell'esame, indicativamente di 25 minuti, lo studente deve rispondere a delle domande a risposta chiusa formulate sul sito Moodle di esame, e le cui risposte vengono valutate automaticamente da moodle. Nella seconda parte dell'esame, indicativamente di 90 minuti, lo studente deve rispondere a delle domande a risposta aperta formulate sullo stesso sito, le cui risposte vengono corrette manualmente.
Testi di riferimento
Libro Titolo: Introduction to the theory of Computation Anno pubblicazione: 2004 Editore: Thompson Course Technology Autore: M. Sipser ISBN 0-534-95097-3 Capitoli: 3,4,5,7 Obbligatorio:
Codice insegnamento INF0090
Complementi Di Reti3° anno · 6 CFU · INFO-01/A · 0 file
Questo insegnamento fornisce agli studenti un'esperienza pratica nell'architettura di rete moderna, nei protocolli e nell'amministrazione attraverso laboratori virtuali hands-on. Gli studenti lavoreranno con scenari di…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento fornisce agli studenti un'esperienza pratica nell'architettura di rete moderna, nei protocolli e nell'amministrazione attraverso laboratori virtuali hands-on. Gli studenti lavoreranno con scenari di rete emulati per padroneggiare sia i concetti teorici che le implementazioni pratiche. Al termine di questo corso, gli studenti saranno in grado di:
Configurare e risolvere problemi in topologie di rete Utilizzare strumenti di monitoraggio della rete per analizzare il traffico Implementare protocolli di routing sia intradominio che interdominio Configurare BGP per il routing nei data center Implementare e testare soluzioni di load balancing per il web Configurare e risolvere problemi nelle infrastrutture DNS
Gli obiettivi di questo corso contribuiscono agli Obiettivi Specifici del corso di Laurea triennale (L31), poiché l'ambiente di laboratorio virtuale consente agli studenti di acquisire competenze di rete applicabili in contesti enterprise, provider di servizi e data center.
Capacità di progettare semplici esperimenti utilizzando emulatori di rete per valutare le prestazioni di vari protocolli e tecnologie di rete.
Conoscenza delle diverse tecniche di virtualizzazione (macchine virtuali, container)
Capacità di progettare la topologia di semplici reti
Capacità di utilizzare container Docker
Capacità di progettare il piano di indirizzamento IP e di implementare diverse strategie di routing
Capacità di utilizzare emulatori di rete (es., kathara.org)
Capacità di utilizzare i comandi Linux per la configurazione avanzata della rete
Programma
Teoria:
Introduzione all'ambiente di laboratorio virtuale basato sul framework Katharà: kathara.org
Strumenti e tecniche di base per l'amministrazione di rete
Fondamenti di monitoraggio della rete
Configurazione e ottimizzazione di OSPF
Fondamenti di BGP e relazioni tra vicini (neighbor relationships)
BGP nei data center
TCP, UDP e QUIC
Algoritmi e tecniche di load balancing
Gerarchia DNS e tipi di record
Laboratori:
Argomenti di base
Routing intradominio
Routing interdominio
Routing nei data center
TCP, UDP e QUIC
Livello applicativo
Laboratori che integrano più tecnologie
Modalità d'esame
L'esame consiste in una prova orale in cui verranno valutati i seguenti aspetti: 1) la comprensione delle tecnologie e degli scenari trattati nel corso, con particolare attenzione al perché (le idee fondamentali alla base di ciascuna tecnologia o scenario) piuttosto che al come (comandi specifici, modalità di implementazione); 2) la capacità dello studente di operare all'interno del framework Kathará.
Testi di riferimento
Support text for consultation: Kurose, J. F., & Ross, K. W. (2026). Computer Networking: A Top-Down Approach (9th ed.). Pearson.
Codice insegnamento INF0342
Cybersecurity3° anno · 6 CFU · INF/01 · 0 file
Il corso si propone di fornire agli studenti gli strumenti crittografici e tecnici utilizzati per garantire la sicurezza del software, delle reti e dei calcolatori. In particolare il corso si articola in due parti: (1)…
Scheda dell'insegnamento
Obiettivi formativi
Il corso si propone di fornire agli studenti gli strumenti crittografici e tecnici utilizzati per garantire la sicurezza del software, delle reti e dei calcolatori. In particolare il corso si articola in due parti: (1) crittografia e (2) sicurezza del software e delle reti, ciascuna con diversi obiettivi formativi. Nella prima parte l'obiettivo formativo è principalmente orientato a far comprendere nel dettaglio alcuni esempi di cifrari, sia simmetrici che asimmetrici, ed alcuni metodi di autenticazione. Nella seconda parte l'obiettivo consiste nell'illustrare i principali attacchi alla sicurezza del software (es. memory corruption, injection) e delle reti (es. sniffing, spoofing, DoS), illustrando le possibili contromisure. Inoltre, attraverso l'uso di esempi pratici, il corso fornisce agli studenti una comprensione concreta dei maggiori rischi di sicurezza e delle soluzioni disponibili. Tali rischi vengono analizzati seguendo le più diffuse best practice e con riferimento agli standard internazionali del settore.
Con riferimento agli Obiettivi formativi specifici del CdS in Informatica (L31), il corso si prefigge di offrire competenze necessarie per garantire un livello elevato di robustezza, affidabilità e sicurezza. Inoltre, più in generale, l'obiettivo di insegnare la crittografia e la sicurezza dei sistemi e delle reti fa parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare è tra quelli relativi all'area sicurezza del software, delle reti e dei calcolatori. Il corso si propone di preparare gli studenti a lavorare nelle aziende e nelle organizzazioni pubbliche, per la gestione dei sistemi informatici, cooperando con i livelli organizzativi per garantire la sicurezza del sistema informativo nel suo insieme. In particolare gli studenti dovranno essere consapevoli dei principali rischi legati alla cybersecurity, conoscendone il funzionamento tecnico dettagliato. Al tempo stesso dovranno conoscere le contromisure più efficaci, essendo quindi in grado, nella loro successiva attività, di valutare prodotti e soluzioni di volta in volta disponibili sul mercato.
Con riferimento agli indicatori di Dublino, gli obiettivi comprendono: CONOSCENZA E CAPACITÀ DI COMPRENSIONE La conoscenza degli argomenti trattati è un obiettivo fondamentale del corso, che copre gran parte dei temi considerati di base per la Cybersecurity. Gli argomenti però non vengono trattati e valutati su base mnemonica, ma attraverso esercizi ed approfondimenti ci si pone l'obiettivo di una comprensione personale delle tematiche. CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE Le tematiche introdotte durante il corso vengono applicate a casi concreti, anche attraverso esempi ed esercizi "hands-on". AUTONOMIA DI GIUDIZIO Durante il corso vengono introdotte domande finalizzate ad un approfondimento personale degli studenti, che dovranno essere in grado di rispondere in modo autonomo, in base ai corsi prerequisiti, agli argomenti svolti a lezione, e agli esercizi ed approfondimenti richiesti. ABILITÀ COMUNICATIVE Durante le lezioni si richiede una partecipazione attiva, e si interagisce attraverso domande e risposte, anche in sede della soluzione di esercizi. All'esame quattro domande su cinque sono a risposta aperta, pertanto vengono valutate le abilità comunicative e la chiarezza espositiva. CAPACITÀ DI APPRENDIMENTO Partendo da conoscenze di base e strumenti crittografici generali, si richiede capacità di apprendimento e di generalizzazione, attraverso l'applicazione ai principali domini della cybersecurity (software/network/dispositivi). La capacità di apprendimento viene sollecitata attraverso questo processo di generalizzazione e indirizzamento applicativo.
Programma
Strumenti crittografici: cifrari simmetrici e asimmetrici, funzioni di hash resistenti alle collisioni, attacchi del compleanno, autenticazione simmetrica e firma elettronica Sicurezza delle reti e del software: sicurezza delle reti locali e geografiche, disponibilità e Denial of Service, sicurezza perimetrale e firewall,sicurezza del software (memory corruption, Web Application security)reti private virtuali, analisi dei rischi di cybersecurity
Modalità d'esame
La verifica viene fatta sulle conoscenze acquisite durante il corso. La durata della prova scritta è di un'ora e prevede domande aperte e domande a risposta multipla, relative agli argomenti trattati nel corso. Vi sono normalmente 4 domande aperte, che coprono argomenti abbasta vasti e complessi, e 1 domanda a risposta multipla, suddivisa in due parti. La risposta ad ogni domanda viene valutata da 0 a 6 punti, e non è consentito l'utilizzo di materiale di consultazione durante l'esame stesso.
Testi di riferimento
Libro Titolo: William Stallings: Crittografia (vol I) e Sicurezza dei Computer e delle Reti (vol II), a cura di Alessandra de Paola e Giuseppe Lo Re, Pearson, Prima Edizione, 2022 Anno pubblicazione: 2022 Editore: Pearson Autore: William Stallings Obbligatorio:
Codice insegnamento INF0343
Economia E Gestione Delle Tecnologie Emergenti3° anno · 6 CFU · SECS-P/08 · 0 file
L'insegnamento ha l'obiettivo di fornire gli skill, tools e approcci per la comprensione e l'implementazione delle tecnologie emergenti nei processi aziendali nell'era digitale. L'obiettivo di insegnare alle…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento ha l'obiettivo di fornire gli skill, tools e approcci per la comprensione e l'implementazione delle tecnologie emergenti nei processi aziendali nell'era digitale.
L'obiettivo di insegnare alle studentesse e agli studenti le nozioni del presente insegnamento ricade negli obiettivi formativi specifici del CdS in Informatica (L31), in particolare all'area di approfondimento delle competenze e capacità interdisciplinari necessarie ad acquisire una visione dell'informatica arricchita da un'ampia preparazione tecnologica con elementi interdisciplinari di tipo economico e manageriale.
L'insegnamento è multidisciplinare e costruito sulle ultime ricerche inerenti ai framework di gestione delle imprese e all'adozione delle tecnologie emergenti. Le studentesse/gli studenti impareranno ad identificare le opportunità dell'economia 4.0 in considerazione dei punti di forza e di debolezza del proprio business.
L'obiettivo dell'insegnamento non sarà solo acquistare gli strumenti teorici e pratici per comprendere come implementare e innovare le tecnologie emergenti, ma anche riuscire ad applicarli per attuare e innovare i processi di gestione aziendale. Conoscenze e capacità di comprensione
Al termine dell’insegnamento, la studentessa/lo studente sarà in grado di:
riconoscere e classificare le principali tecnologie emergenti (es. AI, IoT, Blockchain, realtà estesa);
comprendere le implicazioni organizzative e gestionali derivanti dall’adozione di tali tecnologie nei contesti aziendali;
conoscere e identificare l’evoluzione dei modelli di business influenzata dalla trasformazione tecnologica.
Conoscenze e capacità di comprensione applicate
La studentessa/lo studente sarà in grado di:
riconoscere le opportunità derivanti dall’uso delle tecnologie emergenti nel proprio ambito professionale o imprenditoriale;
analizzare criticamente le caratteristiche e i campi di applicazione delle tecnologie emergenti;
valutare l’impatto dei cambiamenti tecnologici sulle strategie e sui processi aziendali;
progettare e gestire le fasi di implementazione di nuovi modelli di business tecnologicamente abilitati;
formulare scelte strategiche innovative, coerenti con le dinamiche ambientali, competitive e di mercato.
Autonomia di giudizio
La studentessa/lo studente svilupperà una solida autonomia di giudizio nel:
interpretare e valutare criticamente le opportunità e i rischi legati all’adozione delle tecnologie emergenti;
riflettere sull’impatto delle innovazioni tecnologiche nella creazione di valore e nella costruzione di modelli di business sostenibili;
elaborare analisi e sintesi personali sugli argomenti affrontati, mettendo in relazione i concetti teorici con i contesti reali;
integrare prospettive interdisciplinari nella valutazione delle strategie di innovazione.
Abilità comunicative
La studentessa/lo studente sarà in grado di:
utilizzare con proprietà il lessico tecnico e manageriale relativo alla gestione dell’innovazione e delle tecnologie emergenti;
comunicare con chiarezza ed efficacia, in forma scritta e orale, concetti, analisi e proposte progettuali a pubblici specialistici e non;
formulare soluzioni e argomentazioni in modo strutturato, anche mediante strumenti grafici, visuali o digitali.
Capacità di apprendimento
La studentessa/lo studente avrà acquisito capacità autonoma di apprendimento e autovalutazione della sua preparazione, che gli consentiranno di entrare nel mondo nel lavoro ovvero proseguire gli studi con un elevato grado di autonomia.
Programma
1) Perché le nuove tecnologie richiedono Economia, Governance e Management
2) Innovazione e Intelligenze artificiali e aumentate. Riflessioni evolutive
3) Imprenditorialità e Intelligenza artificiale
4) L’innovazione dei modelli di business con e per le tecnologie emergenti
5) Dal management dell’impresa al management dell’ecosistema: il ruolo delle tecnologie della rete
6) Dal Management lineare al management circolare: le tecnologie della rete che curvano la catena del valore
7) Come cambia il marketing con le tecnologie emergenti
8) Come cambia la comunicazione d'impresa con le tecnologie emergenti
9) Il knowledge management e l'AI
10) Finanza e nuove tecnologie emergenti
Modalità d'esame
Le modalità d'esame prevedono le seguenti alternative a scelta delle studentesse/degli studenti:
80% della valutazione attraverso una prova scritta; 20% della valutazione su progetti/moduli di progetto di gruppo o individuale
100% della valutazione attraverso una prova scritta
Testi di riferimento
Libro Titolo: INTELLIGENZE ARTIFICIALI E AUMENTATE ELEMENTI DI ECONOMIA E MANAGEMENT Anno pubblicazione: 2022 Editore: Egea Autore: Pironti, Marco Note testo: In aggiunta al libro di testo, si consiglia di approfondire i contenuti dell'insegnamento con le slide del corso e il materiale fornito durante le lezioni Obbligatorio:
Nella progettazione e sviluppo di un’applicazione software si devono infatti tenere in conto due aspetti fondamentali: l’interazione con l’utente che, indipendentemente dall’efficacia delle funzionalità offerte da…
Scheda dell'insegnamento
Obiettivi formativi
Nella progettazione e sviluppo di un’applicazione software si devono infatti tenere in conto due aspetti fondamentali:
l’interazione con l’utente che, indipendentemente dall’efficacia delle funzionalità offerte da un’applicazione, influenza sensibilmente il suo successo in termini di utilizzo. L’applicazione deve quindi essere usabile ed accessibile per permettere un uso agevole del software e prevenirne l’abbandono da parte degli utenti;
l’implementazione dell’applicativo, che richiede di guardare “dietro all’interfaccia utente” per andare a fondo su aspetti architetturali e tecnologici che possono influenzare non solo le prestazioni dell’applicazione, la sua scalabilità e robustezza, ma anche le tipologie di servizio che possono effettivamente essere offerte.
Partendo da queste considerazioni, l’insegnamento concorre agli obiettivi formativi dell'ambito propedeutico del Corso di Laurea in Informatica (L31) e fa parte dell’area Informatica caratterizzante. È mirato a fornire alle studentesse e agli studenti solide conoscenze di base sull'interazione uomo-macchina e sulle metodologie per la progettazione e lo sviluppo di applicazioni mobili.
L'insegnamento si pone quindi un duplice obiettivo: da una parte, fornire la conoscenza di base necessaria per il disegno corretto di interazioni persona-macchina, che sta alla base della progettazione di applicazioni di ogni genere (web e non, mobili, etc.).Una parte dell’insegnamento sarà dedicata alla visualizzazione di dati di grandi dimensioni. Dall’altra, fornire la conoscenza di base necessaria per la progettazione e lo sviluppo di applicazioni Web interattive, accessibili da terminali desktop e mobili (come gli smartphones), e caratterizzate da una logica applicativa mediamente complessa.
Più precisamente, per quanto riguarda l'interazione persona-macchina, verranno acquisite competenze sia teoriche sia pratiche nel disegno corretto di interazioni, con specifico riferimento alla progettazione user-centered.
Per quanto riguarda la visualizzazione di dati verranno affrontate le principali basi teoriche dell’interazione con grandi quantità di dati e verranno poi introdotte le principali tecniche di pulizia e organizzazione dei dati in Python, usando la libreria Pandas e la visualizzazione usando le librerie tipo MatplotLib e Seaborn. CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione di conoscenze teoriche e applicative relative a:
progettazione centrata sull’utente e il processo di User Experience - UX (personas, rapid prototyping, ecc.)
valutazioni euristiche e testing di usabilità per il responsive web
analisi e visualizzazione di grandi quantità di dati
progettazione e organizzazione dell’architettura dell’informazione
valutazione dell’accessibilità web secondo le linee guida internazionali e nazionali
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Acquisizione della capacità di applicare le conoscenze teoriche relative alle tematiche di cui sopra.
AUTONOMIA DI GIUDIZIO. Acquisizione di consapevole autonomia di giudizio con riferimento alla progettazione e realizzazione di applicazioni web e mobili con interfacce utente accessibili e analisi di larghe quantità di dati.
ABILITÀ COMUNICATIVE. Acquisizione di competenze e strumenti per la comunicazione nella forma scritta e orale, in lingua italiana, unitamente all'utilizzo di linguaggi formali.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
Programma
Parte 1A - Human-computer interaction (HCI)
I concetti e ai principi dell’Interaction Design e della User Experience (UX)
Il processo di UX e il rapid prototyping
Le linee guida di usabilità per il responsive web
Principi di architettura dell’informazione
Principi, linee guida e casi di studio di visualizzazione dell’informazione
Le linee guida di accessibilità internazionali e nazionali: le WCAG, le linee guida AGID
Il design centrato sull’utente e le metodologie di valutazione: la fase di valutazione preliminare, la fase di valutazione formativa e la fase sommativa.
La valutazione dell’accessibilità, sia oggettiva che soggettiva
Parte 1B - Visualizazione di grandi quantità di dati
Il linguaggio Python: introduzione al linguaggio
Data Preparation and Orgnisation in Python and Pandas
Data visualisation in Python (usand librerie come MatplotLib, Seaborn)
Modalità d'esame
L'esame è composto da uno SCRITTO a risposte aperte VERIFICA DI LABORATORIO:
1A) l'esame scritto si compone di una serie di domande aperte su tutto il programma della parte 1A (HCI). In alternativa all'esame scritto la docente proporrà, nel corso delle settimane di lezione una serie di piccoli progetti da consegnare (4-5 ASSIGNMENTS) che se consegnati in tempo e valutati positivamente sostituiscono lo scritto finale;
1B) un progetto di data visualisation scritto in Python. La discussione deve essere effettuata preferibilmente in unica soluzione, con tutti i membri del gruppo di laboratorio presenti.
Il voto finale sarà determinato dalla somma dei risultati di ciascuna parte Ia e Ib diviso per due. La discussione deve essere effettuata con tutti i membri del gruppo presenti. Il voto di ciascuna parte è un numero intero compreso tra 0 e 30 (31 vale per la lode), si considerano sufficienti i voti ≥18. NB: si richiede di consegnare i progetti di laboratorio prima dell'esame in modo da controllare eventuali fenomeni di colusione e plagio.
Quando si supera la prova, è necessario registrare il voto finale entro i limiti imposti dal Regolamento di Ateneo.
Testi di riferimento
PARTE 1A:
Polillo, R. - FACILE DA USARE, Edizioni Apogeo, 2010. http://www.rpolillo.it/libri/libri-di-informatica/facile-da-usare/
Don't make me think. Un approccio di buon senso all'usabilità web e mobile, Steve Krug, Tecniche nuove
https://www.interaction-design.org/literature
Interaction Design: Beyond Human-computer Interaction, Preece et al., Wiley
Principi di Web design, di Joe Sklar, Apogeo
Codice insegnamento INF0340
LINGUAGGI E PARADIGMI DI PROGRAMMAZIONE3° anno · 9 CFU · INF/01 · 0 file
L'insegnamento propone un'introduzione al paradigma di programmazione funzionale, in linea con gli Obiettivi formativi specifici del CdS in Informatica (L31), ampliando e approfondendo tematiche necessarie a…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento propone un'introduzione al paradigma di programmazione funzionale, in linea con gli Obiettivi formativi specifici del CdS in Informatica (L31), ampliando e approfondendo tematiche necessarie a programmare con paradigmi diversi da quello imperativo e a maturare a livello sia metodologico, sia applicativo, il concetto generale di sistema software affidabile.
I 6 CFU di base forniscono un'introduzione al paradigma di programmazione funzionale, ai sistemi di tipi per i linguaggi funzionali con i relativi algoritmi di inferenza e alla dimostrazione di correttezza di programmi funzionali, tramite l'insegnamento del linguaggio di programmazione Haskell.
I 3 CFU facoltativi trattano argomenti avanzati, illustrando radici teoriche, efficacia e potenzialità del paradigma funzionale per la sintesi di software affidabile e ad alte prestazioni, anche in presenza di side-effect o altri aspetti interessanti della computazione, con possibili estensioni a prove formali di correttezza attraverso strumenti (semi-)automatici. CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Riguardo ai 6 CFU di base, la conoscenza è relativa alle principali tecniche di programmazione funzionale, anche in ambiti multi-paradigma. La capacità di comprensione permetterà di modellare algoritmi basati sui tipici modelli di programmazione funzionale, e di manipolare strutture dati basate su liste.
Riguardo ai 3 CFU facoltativi, la conoscenza è relativa all'uso di strumenti formali e radici teoriche per sfruttare adeguatamente efficacia e potenzialità del paradigma funzionale per la sintesi di software affidabile e ad alte prestazioni. La capacità di comprensione si realizzerà nel saper strutturare software funzionale, per applicare efficacemente i metodi di cui sopra.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Si realizza, soddisfacendo simultaneamente due vincoli: (1) programmando in accordo col paradigma funzionale; (2) organizzando la programmazione coerentemente con le radici formali del paradigma funzionale, anche in presenza di side-effect e richiesta di alte prestazioni.
AUTONOMIA DI GIUDIZIO. Si realizza come conseguenza di conoscenza, capacità di comprensione e applicazione di metodi e concetti specifici del paradigma di programmazione funzionale e delle sue radici teoriche.
ABILITÀ COMUNICATIVE. Si realizza innalzando l'abilità media di descrivere algoritmi e loro proprietà in modo formale, innanzitutto in forma scritta e, conseguentemente, in forma orale.
CAPACITÀ DI APPRENDIMENTO. La capacità di apprendimento migliora, come conseguenza del cambio di mentalità necessario per progettare algoritmi in accordo col paradigma funzionale; la maggiore flessibilità come conseguenza del cambio di mentalità si traduce in maggiore autonomia di apprendimento e di autovalutazione, aspetti necessari ad intraprendere, eventualmente, studi successivi.
Programma
Nel seguente elenco di argomenti non viene fatta distinzione tra argomenti svolti in aula ed argomenti svolti in laboratorio, perché strettamente connessi.
Relativamente ai 6 CFU di base, sono previsti i seguenti temi:
Breve storia dei linguaggi di programmazione, con particolare riferimento a quelli funzionali.
Calcolo come riscrittura: le basi dell'esecuzione dei programmi funzionali.
Espressioni e loro tipi. Tipi di base.
Progettazione di programmi funzionali. Tecniche di ricorsione.
Liste e funzioni del prim'ordine su liste.
Cenni a dimostrazioni induttive di correttezza di programmi funzionali.
L'idea di astrazione funzionale. Funzioni di ordine superiore e pattern di trasformazione.
Alberi e tipi algebrici generali.
Introduzione alla programmazione funzionale in Java.
Relativamente ai 3 CFU facoltativi su argomenti avanzati, è previsto un approfondimento del concetto "Monade" nell'ambito sia della Teoria delle Categorie, che della interpretazione operazionale, anche in ambito di calcolo ad alte prestazioni.
Modalità d'esame
Una prima parte d'esame è comune ai 6 CFU di base e ai 3 CFU facoltativi. È strutturata come segue:
prova pratica con esercizi di programmazione da svolgere al calcolatore;
prova scritta con esercizi sugli argomenti di teoria dell'insegnamento;
eventuale prova orale: discussione su quanto svolto nelle due prove menzionate, risposte a domande su argomenti trattati durante l'insegnamento.
La parte d'esame per i 3 CFU facoltativi ha struttura analoga alla precedente, ma su argomenti relativi al programma didattico sviluppato.
I voti sono espressi in 30-esimi sia per i 6 CFU di base, sia per i 3 CFU facoltativi. Il voto finale per chi sosterrà l'esame corrispondente a 6+3 CFU sarà la media pesata tra il voto relativo alla parte d'esame per i 6 CFU di base (peso 2/3) e quello relativo alla parte d'esame per i 3 CFU facoltativi (peso 1/3).
Testi di riferimento
Relativamente ai 6 CFU di base, può essere utile la consultazione di:
Graham Hutton, Programming in Haskell, Second edition, Cambridge University Press, 2016.
Richard Bird, Thinking Functionally with Haskell, Cambridge University Press, 2014.
Relativamente ai 3 CFU facoltativi su argomenti avanzati, può essere interessante sfogliare:
Bartosz Milewski, Category Theory for Programmers on-line
Monads for Functional Programming -- Introduzione didattica al concetto di monade nell'ambito della programmazione (on-line)
All About Monads -- Analisi dello strumento "monadi" nell'ambito del linguaggio di programmazione Haskell (on-line)
A Tutorial on Parallel and Concurrent Programming in Haskell, Simon Peyton Jones and Satnam Singh (on-line)
Parallel and Concurrent Programming in Haskell, Simon Marlow (on-line)
Codice insegnamento P311386753
Linguaggi E Formali E Traduttori3° anno · 6 CFU · INF/01 · 0 file
L'insegnamento ha l'obiettivo di fornire le nozioni fondamentali relative alla specifica di linguaggi formali e alla traduzione di programmi. Sebbene il corso presenti queste nozioni nel contesto specifico della…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento ha l'obiettivo di fornire le nozioni fondamentali relative alla specifica di linguaggi formali e alla traduzione di programmi. Sebbene il corso presenti queste nozioni nel contesto specifico della progettazione e realizzazione di compilatori, i concetti, i formalismi, le metodologie e le tecniche presentate trovano applicazione in un'ampia gamma di contesti in cui si richiede la specifica, la comprensione e la traduzione di informazioni strutturate. La parte teorica dell'insegnamento è affiancata da attività pratiche mirate a illustrare l'applicazione concreta delle suddette tecniche allo sviluppo di programmi per l'analisi di dati strutturati e di altri programmi. La padronanza dei concetti e degli strumenti riguardanti linguaggi formali e traduttori rientra fra gli Obiettivi formativi dell'area informatica di base del CdS in Informatica (L31). Comprensione e acquisizione della terminologia tecnica del settore. Conoscenza delle metodologie fondamentali per la descrizione della sintassi di linguaggi formali (ad esempio i linguaggi di programmazione) e di alcune tecniche di analisi sintattica e traduzione; capacità di utilizzare tali conoscenze per lo sviluppo di sistemi software. Conoscenza e padronanza degli strumenti di base per la progettazione di traduttori.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione di conoscenze teoriche e applicative relative a linguaggi formali e traduttori.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Acquisizione dell’abilità di applicare conoscenza teorica di linguaggi formali e traduttori alla soluzione di problemi pratici relativi alla traduzione di programmi.
AUTONOMIA DI GIUDIZIO. Acquisizione delle capacità per la valutazione delle correttezza della progettazione di traduttori per linguaggi di programmazione e per valutare l’efficacia della loro implementazione e funzionamento.
ABILITÀ COMUNICATIVE. Acquisizione della capacità di utilizzare framework precise per ragionare di linguaggi formali (automi, grammatiche) e traduttori (definizioni dirette dalla sintassi, schemi di traduzione).
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità di imparare e autovalutarsi, sia rispetto a problemi teorici sia rispetto a problemi pratici, in un modo autonomo.
Programma
Ripasso dei concetti di base dei linguaggi regolari (automi a stati finiti, espressioni regolari, proprietà dei linguaggi regolari)
Grammatiche libere
Automi a pila
Proprietà dei linguaggi liberi
Analisi sintattica top-down
Traduzione diretta dalla sintassi
Generazione di codice intermedio
Modalità d'esame
L'esame dell'insegnamento consiste di due prove obbligatorie.
Prova scritta composta di domande di natura teorica ed esercizi su tutto il programma del corso.
Prova di laboratorio, consistente nella presentazione e discussione di del progetto, che riguarda lo sviluppo e l'implementazione di un traduttore per un semplice linguaggio di programmazione.
Gli esiti di entrambe le suddette prove sono espressi in trentesimi. Per superare le prove, è necessario ottenere un voto di almeno 18 su 30 in entrambe. Per sostenere la prova di laboratorio è necessario prima aver superato la prova scritta. Il voto complessivo per l'insegnamento è ottenuto facendo una media pesata tra il voto della prova scritta e il voto della prova di laboratorio, dove il peso della prova scritta è il doppio di quello della prova di laboratorio. A richiesta, e comunque per ottenere la lode, è possibile sostenere una prova orale integrativa. Le prove devono essere superate nella stessa sessione d'esame.
Testi di riferimento
Libro Titolo: Automi, Linguaggi e Calcolabilità Anno pubblicazione: 2018 Editore: Pearson Autore: J. E. Hopcroft, R. Motwani, J. D. Ullman Note testo: Le due edizioni precedenti sono ugualmente valide. Obbligatorio: Libro Titolo: Compilatori: Principi, tecniche e strumenti Anno pubblicazione: 2019 Editore: Pearson Autore: A. V. Aho, M. S. Lam, R. Sethi, J. D. Ullman Note testo: Le edizioni precedenti sono ugualmente valide. Obbligatorio:
Codice insegnamento INF0344
Linguaggi E Paradigmi Di Programmazione3° anno · 6 CFU · INFO-01/A · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento INF0349
Logica Per L'Informatica3° anno · 6 CFU · INF/01 · 0 file
L’insegnamento è tra quelli a scelta libera. In linea con gli Obiettivi formativi specifici del CdS in Informatica (L31), l'insegnamento fornisce strumenti formali adatti a descrivere senza ambiguità concetti e proprietà…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento è tra quelli a scelta libera. In linea con gli Obiettivi formativi specifici del CdS in Informatica (L31), l'insegnamento fornisce strumenti formali adatti a descrivere senza ambiguità concetti e proprietà necessari negli ambiti in cui opera un informatico: quello informale, tipico di contesti in cui si interagisce con persone in fase progettuale, e quello più rigido e formale, tipico del contesto implementativo, operando su sistemi informatizzati. CONOSCENZA E CAPACITÀ DI COMPRENSIONE. La conoscenza è relativa a: (A) principali modelli per il calcolo proposizionale (classico, intuizionsta, à la Kripke, ...); (B) algoritmi di soddisfacibilità e strumenti che li implementano; (C) sistemi deduttivi, relative proprietà e strumenti che implementano sistemi deduttivi. La capacità di comprensione riguarderà: (A) lettura, interpretazione e sintesi di formule di calcoli proposizionalo, in accordo con i vari modelli proposti; (B) motivi per cui dimostrazioni di proprietà di algoritmi di soddisfacibilità e sistemi deduttivi sono rilevanti e perché esse valgono.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Si realizzano, sapendo costruire manualmente, o in maniera semi-automatica, tramite gli strumenti opportuni, dimostrazioni o esercizi specfici di formalizzazione, usando algoritmi di soddisfacibilità e sistemi deduttivi in accordo con semantiche note.
AUTONOMIA DI GIUDIZIO. Si esercita maturando conoscenza, capacità di comprensione e applicazione di algoritmi di soddisfacibilità o sistemi deduttivi, semantiche e proprietà associate, col fine di modellare requisiti relativi al funzionamento di sistemi informatizati.
ABILITÀ COMUNICATIVE. Si realizzano, innalzando l'abilità media nel descrivere proprietà di sistemi informatizzati, o algoritmi, tramite formule logiche, algoritmi o sistemi deduttivi associati.
CAPACITÀ DI APPRENDIMENTO. Si realizza e migliora come conseguenza della sollecitazione mentale che deriva dal dover descrivere proprietà di sistemi informatizzati, o algoritmi, tramite formule logiche, algoritmi di soddisfacibilità e sistemi deduttivi associati, in accordo con la semantica intesa.
Programma
Allineamento su concetti base: sintassi e semantica di Calcolo Proposizionale Classico.
Parte I
Calcolo Proposizionale Classico e Procedure di Decisione: introduzione agli algoritmi come DPLL (Davis-Putnam-Logemann-Loveland) e CDCL (Conflict-Driven Clause Learning); pratica con applicazioni reali tramite SAT solver (ad esempio, MiniSAT);
Calcolo Proposizionale Classico e Teoria (Strutturale) della Dimostrazione: studio di sistemi come il sistema di sequenti LK; dimostrazione delle principali proprietà (come correttezza e completezza) e pratica con strumenti come Rocq (ex Coq)/LEAN.
Parte II
Dai Proof Assistant al Calcolo Proposizionale Intuizionista: approfondimento della teoria strutturale della dimostrazione, con focus su sistemi come Gentzen-style LJ, integrati con semantica costruttiva; principali proprietà;
Corrispondenza Curry-Howard: esplorazione dell'equivalenza fra tipi e prove nell'ambito della logica intuizionista.
Parte III
Dal Calcolo Proposizionale Classico alle Logiche Modali:
Sistemi deduttivi principali come il sistema di sequenti K (o S4) per calcoli proposizionali modali;
Introduzione alla semantica di Kripke per interpretare le logiche modali.
Modalità d'esame
Esame scritto in presenza. I compiti saranno costituiti da domande relative ai contenuti del programma didattico: (i) teoremi e parti di dimostrazioni; (ii) definizioni di algoritmi, loro simulazione e proprietà; (iii) esercizi relativi ai concetti chiave sviluppati.
Testi di riferimento
Altre possibili risorse bibliografiche
M. Ben-Ari. Mathematical Logic for Computer Science. 3rd. Springer London, 2012 (e-book disponibile su https://unito.on.worldcat.org/discovery)
R. Bornat. Proof and Disproof in Formal Logic: An Introduction for Programmers. Oxford: Oxford University Press, 2005 (cartaceo disponibile su https://unito.on.worldcat.org/discovery)
J. P. Bowen, Z. Liu e Z. Zhang, cur. Engineering Trustworthy Software Systems. Springer, 2019. SETSS (International school 2018: Chongqing, China) (e-book disponibile su https://unito.on.worldcat.org/discovery)
R. Fagin, J. Y. Halpern, Y. Moses e M. Y. Vardi. Reasoning About Knowledge. Cambridge, MA: The MIT Press, 2003 (cartaceo disponibile su https://unito.on.worldcat.org/discovery)
J.-Y. Girard. Proofs and Types. Trad. da P. Taylor e Y. Lafont. Cambridge University Press, 1989 (pdf disponibile a https://www.paultaylor.eu/stable/prot.pdf)
A. Indrzejczak. Sequents and Trees: An Introduction to the Theory and Applications of Propositional Sequent Calculi. Studies in Universal Logic. Birkhäuser, 2021. (e-book disponibile su https://unito.on.worldcat.org/discovery)
S. Negri e J. von Plato. Structural Proof Theory. Appendix by Aarne Ranta. Cambridge: Cambridge University Press, 2001 (e-book disponibile su https://unito.on.worldcat.org/discovery)
A.Wasilewska. Logics for Computer Science: Classical and Non-Classical. Berlin, Heidelberg: Springer, 2018 (disponibile su https://www3.cs.stonybrook.edu/~cse541/sbook.pdf)
L'insegnamento si propone di offrire agli studenti le conoscenze di base relative all'analisi ed alla verifica formale di proprietà dei programmi. Gli obiettivi dell'insegnamento dei metodi formali fanno parte degli…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento si propone di offrire agli studenti le conoscenze di base relative all'analisi ed alla verifica formale di proprietà dei programmi. Gli obiettivi dell'insegnamento dei metodi formali fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare sono tra quelli relativi all'area di approfondimento dell'informatica. A questo scopo vengono introdotte le basi teoriche della modellazione e dell'analisi statica del comportamento dei programmi. Quindi sarà trattato un semplice linguaggio imperativo, di cui verranno esposti la semantica operazionale e quella logica, basata sulla logica di Hoare. Infine si utilizzeranno alcuni tools per la sperimentazione pratica delle metodologie trattate. CONOSCENZA E CAPACITÀ DI COMPRENSIONE Acquisizione della conoscenza di alcune tecniche per la verifica formale della correttezza funzionale di programmi basate sulla logica e sulla specifica mediante "contratti".
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE Acquisizione della capacità di costruire dimostrazioni formali di correttezza dei programmi mediante l'uso di un tool, ed in particolare di proof-assistant.
AUTONOMIA DI GIUDIZIO Acquisizione di consapevole autonomia di giudizio con riferimento alla valutazione alla necessità di sviluppare il codice dei programmi in modo ben strutturato e di documentarlo in modo formalmente preciso per facilitarne la verifica ed assicurarne l'affidabilità.
ABILITÀ COMUNICATIVE Acquisizione di competenze e strumenti per la comunicazione nella forma scritta e orale per documentare la correttezza ed affidabilità dei programmi o al contrario per evidenziarne i punti deboli.
CAPACITÀ DI APPRENDIMENTO Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
Programma
Metodi formali
Automi e program graphs
Comandi con guardie
Verifica di programmi
Analisi statica
Language based security
Model checking
Fondamenti di linguaggi di programmazione procedurali
Semantica operazionale big-step e small-step
Sistemi di tipo per IMP
Tipi per la sicurezza
Logica di Hoare
Verification conditions
Verifica funzionale di programmi imperativi ed object-oriented
Specifica con asserzioni
Loop ed invarianti
Tipi di dato induttivi
Tipi di dato astratto e moduli
Specifica e verifica di oggetti e classi
Modalità d'esame
L'esame consiste in un colloquio orale in cui, oltre agli argomenti della teoria indicati nel programma, verranno discusse le consegne effettuate attraverso la piattaforma Moodle in itinere o, per i non frequentanti, almeno una settimana prima dell'appello.
Testi di riferimento
Il testo di Neielson & Nielson copre solo la prima parte del programma; per la seconda e la terza si utilizzaranno rispettivamente:
Il testo di Nielson & Nielson e quello di Leino sono disponibili in biblioteca; quello di Nipkow e Klein si può ottenere liberamente in formato pdf dal sito suindicato.
Codice insegnamento P606833424
Metodi Formali Dell'Informatica - Parte A3° anno · 6 CFU · INFO-01/A · 0 file
Questo insegnamento concorre agli obiettivi formativi dell'ambito matematico del Corso di Laurea Magistrale in Informatica. Il corso ha lo scopo di studiare metodologie e tecniche per la soluzione numerica affidabile…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento concorre agli obiettivi formativi dell'ambito matematico del Corso di Laurea Magistrale in Informatica. Il corso ha lo scopo di studiare metodologie e tecniche per la soluzione numerica affidabile ed efficiente di problemi e per l'interpretazione consapevole dei risultati. Particolare attenzione viene dedicata all'analisi degli errori e agli aspetti computazionali. Il corso è completato dall'attività di laboratorio, in cui viene utilizzato il software scientifico MATLAB, per la soluzione di problemi numerici in un ambiente di calcolo scientifico. Conoscenza e capacità di comprensione:
conoscenza dei metodi numerici di base nell'ambito dell'algebra lineare, della soluzione di equazioni non lineari, dell'approssimazione di funzioni, dell'integrazione;
capacità di comprendere le problematiche inerenti la risoluzione di un problema matematico con un calcolatore che utilizza un'aritmetica finita.
Capacità di applicare conoscenza e comprensione:
capacità di progettare e valutare algoritmi numerici e capacità di analizzare criticamente i risultati, con particolare riguardo alla valutazione degli errori.
Autonomia di giudizio:
saper scegliere in maniera autonoma e con senso critico il metodo numerico più adatto per la risoluzione di uno specifico problema matematico, mettendo a confronto velocità di convergenza di differenti metodi, stabilità dei relativi algoritmi, costo computazionale.
Abilità comunicative:
capacità di comunicare efficacemente, utilizzando correttamente il linguaggio scientifico, in forma scritta e orale, i problemi numerici e i relativi metodi di risoluzione appresi, sapendo argomentare circa le problematiche ad essi connesse;
capacità di confrontare vari metodi numerici adatti alla risoluzione di un particolare problema matematico e motivare la scelta del metodo utilizzato.
Capacità di apprendimento:
capacità di utilizzare anche in autonomia i testi consigliati e il materiale messo a disposizione sulla pagina moodle del corso per esercitazioni, approfondimenti e confronti
capacità di apprendere i contenuti del corso, anche mettendoli in relazione con quelli di altri insegnamenti del corso di studi.
Programma
Nozioni introduttive. Rappresentazione dei numeri e sistemi numerici. Aritmetica in virgola mobile, errori di rappresentazione e loro propagazione. Condizionamento di un problema. Stabilità e convergenza di algoritmi numerici.
Algebra lineare numerica. Richiami di algebra lineare, norme vettoriali e matriciali, numero di condizionamento di una matrice. Metodo di Gauss, fattorizzazione di una matrice (LU, Cholesky, QR). Metodi iterativi per sistemi lineari (Jacobi, Gauss-Seidel). Autovalori e autovettori: teoremi di localizzione, metodo delle potenze e delle potenze inverse. Cenni al metodo QR.
Interpolazione e approssimazione. Interpolazione polinomiale. Formule di Lagrange e Newton. Errore di interpolazione, nodi di Chebyshev, convergenza. Sistemi sovradeterminati e approssimazione nel senso dei minimi quadrati (discreti). Regressione lineare e polinomiale.
Integrazione numerica. Formule di quadratura di tipo interpolatorio a nodi equidistanti (trapezi, Cavalieri-Simpson, punto medio) e ottimali (gaussiane). Formule di quadratura composte.
Equazioni non lineari. Metodi di bisezione, di punto fisso, di Newton e principali varianti.
LABORATORIO Analisi di algoritmi numerici e soluzione numerica di problemi con l'uso del software scientifico MATLAB.
Modalità d'esame
L'esame consiste in una prova scritta con domande relative a teoria, laboratorio Matlab ed esercizi, che si intenderà superata con un punteggio >=18/30. La prova scritta potrà essere integrata da una prova orale opzionale.
Testi di riferimento
D. Bini, M. Capovani, O. Menchi: Metodi Numerici per l'algebra lineare, Zanichelli, 1988
G. Monegato: Fondamenti di Calcolo Numerico, CLUT (Torino), 1998
G. Monegato: Metodi e algoritmi per il calcolo numerico, CLUT (Torino), 2008
A. Quarteroni, F. Saleri, P. Gervasio: Calcolo Scientifico: esercizi e problemi risolti con MatLab e Octave, Springer, 2017
Codice insegnamento MFN0962
Metodologie E Tecnologie Didattiche Per L'Informatica (Prefit)3° anno · 6 CFU · INF/01 · 0 file
Il corso mira a: Fornire la conoscenza di alcuni aspetti dell’Informatica come disciplina scientifica e delle motivazioni alla base della necessità del suo insegnamento; -Favorire comprensione di aspetti pedagogici e…
Scheda dell'insegnamento
Obiettivi formativi
Il corso mira a:
Fornire la conoscenza di alcuni aspetti dell’Informatica come disciplina scientifica e delle motivazioni alla base della necessità del suo insegnamento; -Favorire comprensione di aspetti pedagogici e teorie dell'apprendimento nel contesto dell’insegnamento dell’Informatica;
Sviluppare capacità riflessive sulla disciplina, facendo emergere per confrontare le idee pregresse degli studenti sugli argomenti trattati.
Introdurre delle principali metodologie per la costruzione di un curriculum di Informatica coerente con gli obiettivi fissati dalle indicazioni nazionali e dalle linee guida.
Sperimentare attività laboratoriali per lo sviluppo e la valutazione di competenze e riconoscimento della loro importanza
Acquisire pratiche didattiche e di processi di insegnamento e apprendimento dell’Informatica
Riconoscere la relazione esistente tra l’Informatica e temi rilevanti per la società.
Gli obiettivi dell'insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L18):
1. Fornire un bagaglio di esperienze interdisciplinari attraverso le quali acquisire capacità di comunicazione
2. Fornire un'ampia base culturale e competenze trasversali CONOSCENZA E CAPACITÀ DI COMPRENSIONE
conoscere dei documenti di indicazioni sui curriculum di Informatica delle scuole nazionali e internazionali.
comprendere un testo relativo alla didattica della informatica, sia di carattere istituzionale, sia di ricerca.
relazionare in merito a problematiche della didattica e progettare attività didattiche
conoscere e comprendere le principali teorie sull'insegnamento e l'apprendimento della informatica
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
risolvere attività per gli studenti a livello di scuola secondaria di secondo grado evidenziandone nodi concettuali, obiettivi, prerequisiti, metodologie
affrontare problematiche di didattica dell'informatica come la progettazione di percorsi didattici innovativi
utilizzare le metodologie per la didattica della informatica per potenziare l'insegnamento e l'apprendimento della disciplina
progettare attività e percorsi di informatica per la scuola.
AUTONOMIA DI GIUDIZIO
saper valutare l'adeguatezza di curriculum e attivita' didattiche (anche rispetto a un determinato contesto di classe e a un insieme di prerequisiti didattici)
analizzare processi di studenti durante attività
redigere report di attività didattiche utilizzando materiali in italiano e in inglese
produrre attivita’ didattiche e di verifica
ABILITÀ COMUNICATIVE
comunicare per scritto o orale materiali e attività didattiche per classi di scuole del primo e secondo ciclo
CAPACITÀ DI APPRENDIMENTO
adattare le conoscenze di base di didattica della informatica a diversi contesti e situazioni istituzionali o di ricerca.
Programma
L'informatica nella societa' e nella scuola.
Analisi delle principali metodologie per l’insegnamento dell’informatica presenti in letteratura.
Problem solving: dalla formulazione del problema alla progettazione della soluzione
Processi di insegnamento e apprendimento dell’Informatica.
Didattica della programmazione.
Modalità d'esame
La verifica finale si svolgerà come segue:
1) circa una settimana prima dell'inizio delle discussioni orali si dovrà consegnare (sulla pagina moodle del corso) una relazione che descriva la progettazione di un'attività didattica
2) la discussione orale si svolgerà in 2 parti:
revisione della relazione
discussione sui temi affrontati nel corso
Il voto finale è determinato dalla valutazione del materiale consegnato e dal giudizio sulla discussione orale in questa proporzione:
qualita' della relazione sull'attivita' didattica e dell'andamento della discussione su di essa (peso 50% circa)
risposte alle domande sul programma (peso 50% circa)
Ai seguenti link trovate le rubriche valutative relative alla relazione sull'attivita' didattica e alla discussione orale.
Testi di riferimento
Il materiale didattico sara' disponibile nella pagina moodle del corso
I testi base consigliati per il corso sono dispense e appunti forniti dal docente.
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di approfondimento (area Informatica caratterizzante) del Corso di Laurea in Informatica (L31) ed è mirato a fornire solide…
Scheda dell'insegnamento
Obiettivi formativi
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di approfondimento (area Informatica caratterizzante) del Corso di Laurea in Informatica (L31) ed è mirato a fornire solide conoscenze di base sulla progettazione e lo sviluppo di sistemi software Object Oriented concorrenti e distribuiti, anche con interfaccia utente grafica. Nello specifico, l'insegnamento ha l’obiettivo di fornire la conoscenza di base necessaria per la programmazione di tale tipo di applicazione usando un linguaggio ad alto livello (Java), attraverso: (i) lo scambio di dati in rete, e (ii) la programmazione di thread paralleli, cioè di processi “leggeri” che possano operare su uno o più processori all’interno della stessa applicazione principale. Altro obiettivo fondamentale dell'insegnamento è la tecnica di programmazione ad eventi per la realizzazione di interfacce grafiche, che stanno alla base di tutte le applicazioni desktop basate su finestre. Conoscenza e capacità di comprensione
Acquisizione di conoscenze teoriche e applicative relative ai concetti alla base della programmazione di interfacce utente grafiche e di applicazioni distribuite e concorrenti Object Oriented.
Capacità di applicare conoscenza e comprensione
Acquisizione della capacità di applicare le conoscenze teoriche relative alle tematiche di cui sopra. Le/gli studenti dovranno essere in grado di sviluppare sistemi software in ambiente Java, utilizzando i Socket Java per la realizzazione di applicazioni distribuite, la programmazione a thread per la gestione del parallelismo e della concorrenza, e JavaFX per la realizzazione delle interfacce utente grafiche.
Autonomia di giudizio
Acquisizione di consapevole autonomia di giudizio con riferimento alla progettazione e realizzazione di applicazioni Object Oriented distribuite e concorrenti con interfaccia utente grafica.
Abilità comunicative
Acquisizione di competenze e strumenti per la comunicazione nella forma scritta e orale, in lingua italiana, unitamente all'utilizzo di linguaggi formali.
Capacità di apprendimento
Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
Programma
Programmazione ad eventi in Java: programmare interfacce grafiche (JavaFX/FXML, SWING)
Sorgenti di eventi, gestori di eventi, event-driven programming
Organizzazione e uso delle interfacce grafiche di Java
L'architettura Model-View-Controller (MVC)
Programmazione Multithread:
Esecuzione concorrente di istruzioni
I Thread in Java: ciclo di vita dei Thread
Creazione e sincronizzazione di Thread
Estensione del modello della memoria in presenza di Thread
Problemi di sincronizzazione e loro risoluzione mediante il linguaggio Java
Programmazione in rete:
L'architettura client-server
Java socket
Polimorfismo e trasferimento di oggetti mediante Java
Il modello di esecuzione distribuita di oggetti
Modalità d'esame
L'esame è composto da una prova teorica e dalla discussione del progetto SW. Le due prove possono essere sostenute in qualsiasi ordine durante le sessioni d'esame dell'Anno Accademico.
Prova teorica: esame scritto che include esercizi e domande teoriche sul programma dell'insegnamento. Viene valutata da un minimo di 0 ad un massimo di 30; si considerano sufficienti i voti ≥ 18. Il voto ottenuto durante la prova teorica decade se si partecipa ad un'altra prova teorica. Questa prova è volta a verificare l’acquisizione della conoscenza fornita dall'insegnamento in termini di sapere (knowledge and understanding), nonché le abilità comunicative (communication skills) e l'autonomia di giudizio (making judgements).
Discussione del progetto SW: questa prova è volta a verificare le competenze acquisite (applying knowledge and understanding), nonché le abilità comunicative, l'autonomia di giudizio e la capacità di apprendimento (learning skills). La discussione deve essere effettuata preferibilmente in unica soluzione, con tutti i membri del gruppo presenti. I gruppi di laboratorio devono includere al massimo 3 persone. NB: non si richiede di consegnare i progetti di laboratorio prima dell'esame. Il voto è un numero intero compreso tra 0 e 30; si considerano sufficienti i voti ≥18.
Il voto finale dell’esame viene determinato come media aritmetica semplice del voto della prova di teoria e del voto della discussione del progetto SW:
voto finale = (voto teoria + voto progetto SW)/2. Si ottiene la lode se il voto dello scritto e quello dell'orale sono entrambi pari a 30.
NB: i voti acquisiti in ciascuna delle prove restano validi fino al termine della sessione d’esame precedente all'inizio del nuovo insegnamento.
Testi di riferimento
Libro Titolo: Programmare in Java 11/Ed. - MyLab Anno pubblicazione: 2020 Editore: Pearson Autore: Paul J. Deitel - Harvey M. Deitel ISBN 9788891916211 Note testo: Libro di testo. Obbligatorio: Libro Titolo: Oggetti, concorrenza, distribuzione Anno pubblicazione: 2014 Editore: Società editrice Esculapio Autore: Silvia Crafa ISBN 8874888031 Note testo: Per consultazione. Anche in formato Kindle. Obbligatorio:
Codice insegnamento P433682653
Problem Solving Avanzato3° anno · 3 CFU · INFO-01/A · 0 file
Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare in riferimento all'area dell'informatica di base. Nel dettaglio, gli obiettivi sono:…
Scheda dell'insegnamento
Obiettivi formativi
Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare in riferimento all'area dell'informatica di base. Nel dettaglio, gli obiettivi sono:
Acquisire la padronanza di linguaggi di programmazione e pattern di coding adatti al rapido sviluppo di algoritmi efficienti, nonché nella capacità di selezionare velocemente l’algoritmo giusto per una data situazione.
Introdurre tecniche algoritmiche avanzate.
Sviluppare la capacità di lavorare in squadra per risolvere problemi algoritmici, e a comunicare in modo efficace. Il corso segue un format tipicamente utilizzato in gare di programmazione o durante le fasi di recruiting in aziende ICT di alto profilo. CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Conoscere algoritmi e strutture dati utili per la programmazione ad alte performance. Saper comprendere e interpretare un problema algoritmico per avviare una rapida progettazione e realizzazione della soluzione.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Capacità di utilizzare in maniera adeguata gli algoritmi e le strutture dati necessarie per risolvere problemi di programmazione non banali e con alte performance. Saper applicare tecniche avanzate di programmazione per ridurre la complessità in tempo e memoria, e realizzare soluzioni efficienti.
AUTONOMIA DI GIUDIZIO
Capacità di autovalutazione e stima della complessità algoritmica di una soluzione, sfruttando anche il supporto di strumenti come piattaforme online di valutazione su use-case difficili e/o su grandi moli di dati.
ABILITÀ COMUNICATIVE
Capacità di comunicare idee e soluzioni per problemi algoritmici, applicate in particolare al lavoro di squadra, utilizzando un linguaggio scientifico adeguato ed efficace.
CAPACITÀ DI APPRENDIMENTO
Acquisizione di capacità autonome di apprendimento, tramite identificazione di risorse e materiali rilevanti, incluse piattaforme di valutazione del codice, e definizione di obiettivi chiari nella progettazione e analisi di algoritmi avanzati.
Programma
Introduzione alla programmazione ad alte performance e competitiva: come affrontare problemi algoritmici con limiti di tempo e di memoria.
Problemi che si possono risolvere tramite libreria standard di C++.
Problemi con soluzione greedy, ottimizzazione e finestre scorrevoli. Capire quando una soluzione greedy è sufficiente per risolvere il problema.
Ricorsione esaustiva, backtracking e strategie per ridurre lo spazio da esplorare.
Catalogo di strategie risolutive e programmazione dinamica.
Algoritmi base su grafi, visite e cammini.
Alberi minimi ricoprenti e struttura dati Union-Find.
Ordinamento topologico e algoritmi su DAG.
Strutture dati per operazioni su intervalli: somme prefisse, range tree.
Modalità d'esame
L’esame si terrà sotto forma di prova di programmazione al computer. La prova prevederà la risoluzione di 4 problemi algoritmici in un tempo massimo di 4 ore. Ogni problema prevede un punteggio parziale a seconda della complessità della soluzione prodotta. I problemi saranno proposti in lingua inglese, come nelle competizioni internazionali esistenti.
Nei mesi da settembre a marzo saranno proposti 5 appelli di esame o esonero, basati su una selezione di problemi delle competizioni nazionali delle olimpiadi di informatica individuali e a squadre. Uno specifico appello (in generale il primo nel mese di Settembre) sarà anche valevole come selezione della squadra che rappresenterà l’Università di Torino alla competizione internazionale SWERC dell’International Collegiate Programming Contest.
A metà del corso verrà inoltre proposta una prova intermedia di esonero, sostitutiva della prima metà della prova di esame.
Testi di riferimento
Tutto il materiale di studio necessario verrà caricato nella pagina moodle del corso durante le lezioni, con riferimenti anche ad alcune attività accessibili online. Tutto il materiale sarà fornito in digitale e sarà possibile consultarlo online e, se si desidera, scaricarlo e stamparlo. I testi di riferimento sono suggerimenti di supporto, non strettamente necessari per seguire il corso.
Codice insegnamento INF0401
Prolungamento Stage3° anno · 6 CFU · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento INF0072
Prova Finale3° anno · 3 CFU · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento INF0074
Reti E Sicurezza Delle Reti3° anno · 9 CFU · INF/01 · 0 file
L'insegnamento fornisce agli studenti le nozioni di base sulle reti di calcolatori e una comprensione approfondita della suite di protocolli TCP/IP. Inoltre, fornisce la conoscenza dei fondamentali aspetti della…
Scheda dell'insegnamento
Obiettivi formativi
L'insegnamento fornisce agli studenti le nozioni di base sulle reti di calcolatori e una comprensione approfondita della suite di protocolli TCP/IP. Inoltre, fornisce la conoscenza dei fondamentali aspetti della sicurezza delle reti informatiche. Attraverso l'uso di software ed esempi pratici, il corso garantisce agli studenti una comprensione concreta dei meccanismi di comunicazione tra dispositivi di rete e calcolatori, nonché delle tecniche e metodologie per proteggere l'integrità, la confidenzialità e la disponibilità dei dati e delle comunicazioni.
Gli obiettivi dell'insegnamento fanno parte degli Obiettivi Formativi specifici del CdS in Informatica (L31) nell'area Informatica caratterizzante, con particolare riferimento alle competenze di progettazione, implementazione e gestione sicura delle infrastrutture di rete. L'insegnamento ha l'obiettivo di preparare le studentesse e gli studenti allo sviluppo di progetti che coinvolgono tecnologie di rete relative alla famiglia di protocolli TCP/IP e alla sicurezza delle reti informatiche. Le studentesse e gli studenti che superano l'esame con successo saranno in grado di integrarsi in gruppi di lavoro tecnici per affrontare le problematiche di progettazione, implementazione e/o adeguamento di applicazioni distribuite e protocolli di rete, garantendo al contempo i necessari requisiti di sicurezza.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione di metodologie di strutturazione delle reti di calcolatori e comprensione dei principi fondamentali della sicurezza informatica.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Applicazione dei concetti introdotti durante l'insegnamento a casi concreti, anche attraverso esempi ed esercizi. Capacità di identificare vulnerabilità nelle reti e implementare soluzioni per proteggere l'integrità, la confidenzialità e la disponibilità dei dati e delle comunicazioni.
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per una corretta progettazione e una solida implementazione delle reti di calcolatori. Sviluppo di capacità critica nella valutazione dell'efficacia delle misure di sicurezza adottate.
ABILITÀ COMUNICATIVE. Acquisizione e sviluppo di elementi del lessico informatico finalizzati al lavoro di progettazione e implementazione delle reti di calcolatori. Capacità di comunicare efficacemente problematiche di sicurezza e relative soluzioni in contesti tecnici.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento sulle reti e sulla loro sicurezza, nonché di autovalutazione della propria preparazione teorica e pratica.
Programma
Prima parte: Reti di calcolatori
Fondamenti di reti di calcolatori
Introduzione alle reti (livello fisico, livello di collegamento, reti wireless e mobilità)
Livello di rete: reti IP e instradamento
Livello di trasporto: UDP e TCP, controllo di congestione e flusso end-to-end
Livello applicativo: Web, Posta, DNS, trasferimento di file e sistemi P2P
Seconda parte: Sicurezza informatica
Autenticazione degli utenti
Controllo degli accessi
Sicurezza del software, dei sistemi operativi e delle infrastrutture
Software malevolo: virus, worm, bot, keylogger ecc.
Sicurezza delle reti: chiavi crittografiche, 802.11, TLS, HTTPS e SSH
Modalità d'esame
L'esame consiste in una prova scritta e, facoltativamente, una prova orale. Il voto finale è espresso in trentesimi e con possibilità di lode.
L'esame scritto si svolge in presenza su computer nei laboratori didattici dell'Università e prevede sia domande a risposta multipla (con correzione automatica) che domande a risposta aperta.
A seguito della correzione degli scritti, l'esame può avere un seguito in forma orale (facoltativo) per una ulteriore discussione dei contenuti del corso. Il voto dell'esame orale sostituisce quello ottenuto nella prova scritta.
Testi di riferimento
Libro Titolo: Reti di calcolatori e internet. Un approccio top-down Anno pubblicazione: 2022 Editore: Pearson Autore: James Kurose, Keith Ross ISBN 9788891916006 Obbligatorio: Libro Titolo: Sicurezza dei computer e delle reti. Anno pubblicazione: 2022 Editore: Pearson Autore: William Stallings ISBN 9788891915290 Obbligatorio:
SISTEMI INTELLIGENTI3° anno · 9 CFU · INF/01 · 0 file
Il corso si propone di fornire una introduzione generale alle problematiche nel settore dell'Intelligenza Artificiale, con particolare attenzione a come sia possibile costruire un sistema dotato di capacità autonome di…
Scheda dell'insegnamento
Obiettivi formativi
Il corso si propone di fornire una introduzione generale alle problematiche nel settore dell'Intelligenza Artificiale, con particolare attenzione a come sia possibile costruire un sistema dotato di capacità autonome di risoluzione di problemi, di ragionamento e di apprendimento quando abbia a disposizione una rappresentazione simbolica del mondo. Il corso si articola in quattro parti principali:
Risoluzione automatica di problemi
Rappresentazione della conoscenza e ragionamento nel caso deterministico e non deterministico
Nozione di agente intelligente che agisce, ragiona ed apprende
Apprendimento automatico e sue aplicazioni innovative
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di approfondimento del Corso di Laurea in Informatica (L31) e fa parte dell’area Informatica caratterizzante. Data la natura introduttiva dell’insegnamento e la sua durata, molte problematiche avanzate di Intelligenza Artificiale trovano collocazione negli insegnamenti offerti per la Laurea magistrale in intelligenza artificiale “Pietro Torasso". CONOSCENZA E CAPACITÀ DI COMPRENSIONE: Dal punto di vista della acquisizione di contenuti metodologici, gli studenti conosceranno le principali strategie di ricerca per la risoluzione automatica di problemi, i fondamenti della rappresentazione della conoscenza mediante formalismi logici e approcci strutturati (ontologie) e relativi meccanismi inferenziali. Avranno inoltre acquisito le nozioni di base su architettura di un agente intelligente e su apprendimento automatico di conoscenza a partire da esempi. Spazio sarà dato anche alla comprensione delle differenze fra intelligenza naturale e intelligenza artificiale.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE: l'esposizione dei contenuti del corso utilizza numerosi esempi sia di problemi artificiali, finalizzati a evidenziare determinate complessità,sia di contesti reali. In entrambi i casi i partecipanti sono incoraggiati a ragionare sulla possibilità e sulle conseguenze dell'applicazione di algoritmi e approcci. Per alcune tematiche vengono proposte attività che coinvolgono l'intera aula.
AUTONOMIA DI GIUDIZIO: acquisizione di una prima forma di consapevolezza sulla necessità di fare dei trade-off (in termini di qualità della soluzione e costo computazionale) tra strategie e metodologie alternative che risolvono la stessa classe di problemi. Consapevolezza delle differenze fra intelligenza naturale e artificiale, finalizzata all'identificazione autonoma di potenzialità e limiti degli strumenti di intelligenza artificiale generativa.
ABILITÀ COMUNICATIVE: L’esame orale richiede inoltre l'acquisizione di una buona capacità espositiva unita all’uso corretto della terminologia del settore (e più in generale dell’informatica).
CAPACITÀ DI APPRENDIMENTO: acquisizione di capacità autonome di apprendimento e di autovalutazione.
Programma
Come già detto l'insegnamemnto è una introduzione ai concetti basilari di Intelligenza artificiale e si articola in tre parti strettamente connesse.
Parte 1) RISOLUZIONE AUTOMATICA DI PROBLEMI In questa parte si affronta la problematica di come definire il concetto di problema e di soluzione, di distinguere tra soluzione e soluzione ottima. Sono studiati tre approcci alla risoluzione di problemi: ricerca nello spazio degli stati, ricerca in spazi con avversario (giochi ad informazione completa), risoluzione di problemi mediante soddisfacimento di vincoli. Per ciascun approccio si discutono le principali strategie di ricerca: ampiezza, profondità, iterative deepening (per le ricerche cieche nello spazio degli stati), A* e Recursive Best First Strategy (per le ricerche euristiche), Minimax e Alfa-beta (per i giochi con avversario), backtracking, forward propagation e arc consistency per meccanismi basati su soddisfacimento di vincoli. Particolare attenzione viene data alla garanzie offerte dalle diverse strategie in termini di qualità della soluzione e di complessità computazionale. Estensione ai giochi probabilistici.
Parte 2) RAPPRESENTAZIONE DELLA CONOSCENZA E RAGIONAMENTO Il problema della rappresentazione della conoscenza e dei relativi meccanismi inferenziali viene affrontato studiando due principali famiglie di approcci alla rappresentazione della conoscenza: formalismi logici e rappresentazioni strutturate. Per quanto riguarda i formalismi logici si vede come sia il calcolo proposizionale che il calcolo dei predicati del primo ordine possano essere utilizzati per rappresentare conoscenza sul mondo e si vede come i meccanismi inferenziali (modus ponens, resolution, etc.) possano essere adoperati per fornire servizi utili (es. risposta a domande, verifica consistenza, ecc.). Si analizza anche come una rappresentazione a regole permetta meccanismi di ragionamento più efficienti (forward e backward chaining). Attenzione viene data alla rappresentazione della conoscenza strutturata introducendo tassonomie, classi, individui, ereditarietà singola e multipla, inferenze specializzate nonché le modalità di rappresentazione delle azioni. Vengono introdotti elementi di rappresentazione e ragionamento su conoscenza incerta (Bayes, cenno a reti bayesiane).
Parte 3 ) AGENTI E APPRENDIMENTO AUTOMATICO In questa parte conclusiva si introduce la nozione di agente intelligente che opera in un ambiente e si spiega come l’agente possa avere sia comportamenti reattivi che deliberativi a seconda del compito assegnato. Si illustra come agente debba avere capacità di risoluzione automatica di problemi e di ragionamento sullo stato del mondo e sul suo stato. Vengono introdotti elementi di base dell’apprendimento automatico in relazione ai problemi di classificazione e di clustering. Vengono illustrati i concetti al cuore dell'apprendimento da esempi (in particolare apprendimento di alberi di decisione e di sistemi di regole). Vengono introdotte le reti neurali e i loro più recenti sviluppi ed ambiti applicativi, come l'IA generativa. Ampio spazio è riservato all'introduzione degli LLM. Vengono infine introdotti elementi di apprendimento per rinforzo.
Modalità d'esame
L'esame consiste in una interrogazione individuale sugli argomenti trattati nel corso. Tipicamente una delle domande richiede la capacità di applicare una metodologia/strategia per risolvere un semplice problema simile a quelli illustrati a lezione. Pertanto nell’esame orale, oltre a verificare la conoscenza dei concetti e delle metodologie, si intende verificare la capacità di applicazione dei concetti e metodologie a problemi specifici. Sarà inoltre verificata la chiarezza di esposizione e l’uso corretto della terminologia. Un contributo alla valutazione finale è dato dalla partecipazione facoltativa ad una eventuale attività di grounding delle tematiche del corso nella realtà che ci circonda. Negli anni passati si è trattato della segnalazione di notizie/eventi/altro in un apposito forum. Tale genere di attività permette di acquisire un punto (ovvero il voto è 1 per chi partecipa indipendentemente dal numero di post, 0 altrimenti) che viene sommato al voto dell'esame, se sufficiente. Data la natura facoltativa dell'attività, non partecipare non compromette la possibilità di acquisire il punteggio massimo di 30 e lode.
Testi di riferimento
Libro Titolo: Artificial Intelligence: a modern approach Anno pubblicazione: 2010 Editore: Pearson Autore: S. J. Russell e P. Norvig Capitoli: i capitoli sono indicati nella pagina moodle del corso Note testo: Utilizzeremo prevalentemente il volume 1 Obbligatorio:
Codice insegnamento P468255356
SVILUPPO DELLE APPLICAZIONI SOFTWARE3° anno · 9 CFU · INF/01 · 0 file
L’insegnamento contribuisce al raggiungimento degli obiettivi formativi del Corso di Laurea in Informatica (L-31) ed è parte dell’area caratterizzante di Informatica, che include la progettazione di applicazioni…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento contribuisce al raggiungimento degli obiettivi formativi del Corso di Laurea in Informatica (L-31) ed è parte dell’area caratterizzante di Informatica, che include la progettazione di applicazioni software.
Il corso introduce i concetti di base dell’ingegneria del software e dello sviluppo di applicazioni, utilizzando la metodologia Agile Unified Process (UP), che si avvale del linguaggio di modellazione UML.
L’obiettivo è fornire le competenze teoriche e pratiche necessarie per sviluppare un’applicazione di media complessità, definendo in modo chiaro:
la logica applicativa,
l’interazione con le basi di dati,
le interfacce richieste dai requisiti.
È inoltre richiesto di acquisire capacità di pianificazione e gestione del progetto, considerando il lavoro di gruppo, la definizione degli obiettivi e le diverse fasi di sviluppo. Conoscenza e capacità di comprensione. Al termine dell'insegnamento è previsto che si conoscano:
i concetti di base dell’ingegneria del software;
la metodologia UP e le modalità di utilizzo del linguaggio UML in tale ambito;
i design pattern di progettazione e architetturali.
Capacità di applicare conoscenza e comprensione. Al termine dell'insegnamento è previsto che si sia in grado di:
applicare UP alla progettazione di un applicativo;
individuare l'utilità e l'applicabilità dei design pattern al progetto di un software.
Autonomia di giudizio. L'insegnamento permette di sviluppare le seguenti competenze:
affrontare lo sviluppo di un'applicazione sapendo scegliere come e quando applicare opportunamente le tecniche apprese;
pianificare il lavoro secondo i canoni dello sviluppo dei progetti: lavoro di gruppo, definizione degli obiettivi e delle fasi di sviluppo.
Abilità comunicative. L'insegnamento prevede che si impari a:
utilizzare i diagrammi e i documenti presentati per comunicare decisioni e scelte progettuali con il proprio team di lavoro;
esporre, in forma scritta e orale, una relazione tecnica che spieghi e motivi le scelte progettuali nel caso di studio proposto.
Capacità di apprendimento. Chi supera con profitto l'insegnamento dovrà dimostrare di essere in grado di:
relazionarsi con un dominio di business apprendendone processi e concetti significativi;
di tenere in dovuto conto la realtà di business osservata nella propria progettazione;
di realizzare il proprio progetto nel rispetto delle necessità dei futuri utenti dell'applicativo.
Programma
Elementi di ingegneria del software: modelli Waterfall, Spirale, V-Model, Component-Based Development, metodologie Agile.
Introduzione a UML: diagrammi dei casi d’uso, delle classi, degli oggetti, di sequenza, di comunicazione, degli stati (statechart), delle attività.
Una metodologia Agile: Unified Process (UP)
Fasi di sviluppo: ideazione (inception), elaborazione (elaboration), costruzione (construction)
Casi d’uso, modello di dominio
Diagrammi di sequenza di sistema (SSD)
Contratti delle operazioni
Architettura logica e organizzazione a livelli (layer)
Progettazione (diagrammi di sequenza di dettaglio e diagrammi delle classi di progetto)
Principi GRASP e pattern GoF
Cenni al testing
Modalità d'esame
L’esame di Sviluppo Applicazioni Software prevede:
una prova scritta;
un progetto, da presentare e discutere oralmente.
Per poter presentare e discutere il progetto è obbligatorio aver superato la prova scritta (voto ≥ 18).
Prova scritta
La prova scritta verte sulla teoria del corso ed è composta da:
domande aperte;
domande chiuse (es. a risposta multipla).
Il voto è un numero E compreso tra 0 e 31.
Sono consentiti al massimo 3 tentativi valutati per anno accademico (i ritiri non sono conteggiati).
L’esito dello scritto ha validità fino alla sessione di febbraio dell’anno accademico successivo (ultimo appello utile).
Progetto e discussione orale
Il progetto viene sviluppato:
in parte durante le attività di laboratorio;
in parte autonomamente.
Può essere svolto:
in coppia (opzione consigliata);
individualmente.
Il progetto deve essere consegnato tramite apposito link su Moodle, indicativamente una settimana prima dell’inizio delle discussioni orali.
In caso di lavoro in coppia, entrambi i componenti devono discutere insieme (e aver superato lo scritto). Deroghe sono possibili solo in caso di necessità legate a scadenze amministrative o alla validità dello scritto.
Le discussioni orali si svolgono su più giorni a partire dalla data ufficiale dell’appello; è possibile scegliere giorno e fascia oraria tra quelli disponibili.
Il voto della discussione del progetto è un numero P compreso tra 0 e 31.
Voto finale
Il voto finale è calcolato come:
ceil(( E⋅4+P⋅5) / 9)
dove:
E = voto dello scritto
P = voto della discussione del progetto
ceil = arrotondamento all’intero superiore (31 → 30 e lode)
Nota
Le iscrizioni alla prova scritta e alla discussione orale sono separate sul portale di Ateneo. È obbligatorio iscriversi alla parte d’esame che si intende sostenere.
Testi di riferimento
Libro Titolo: Applicare UML e i Pattern. Analisi e progettazione orientata agli oggetti. Quinta edizione. Anno pubblicazione: 2020 Editore: Pearson Autore: Craig Larman Obbligatorio: Libro Titolo: UML Distilled – Guida rapida al linguaggio di modellazione standard. Quarta edizione. Anno pubblicazione: 2018 Editore: Pearson Autore: Martin Fowler Obbligatorio:
Codice insegnamento P313729335
Sistemi Informativi3° anno · 6 CFU · INFO-01/A · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento INF0351
Sistemi Intelligenti3° anno · 6 CFU · INF/01 · 0 file
Il corso si propone di fornire una introduzione generale alle problematiche nel settore dell'Intelligenza Artificiale, con particolare attenzione a come sia possibile costruire un sistema dotato di capacità autonome di…
Scheda dell'insegnamento
Obiettivi formativi
Il corso si propone di fornire una introduzione generale alle problematiche nel settore dell'Intelligenza Artificiale, con particolare attenzione a come sia possibile costruire un sistema dotato di capacità autonome di risoluzione di problemi, di ragionamento e di apprendimento quando abbia a disposizione una rappresentazione simbolica del mondo. Il corso si articola in quattro parti principali:
Risoluzione automatica di problemi
Rappresentazione della conoscenza e ragionamento
Nozione di agente intelligente che agisce, ragiona ed apprende
Apprendimento automatico e sue applicazioni più recenti
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di approfondimento del Corso di Laurea in Informatica (L31) e fa parte dell’area Informatica caratterizzante. Data la natura introduttiva dell’insegnamento e la sua durata, molte problematiche avanzate di Intelligenza Artificiale trovano collocazione negli insegnamenti offerti per la Laurea magistrale in intelligenza artificiale “Pietro Torasso". CONOSCENZA E CAPACITÀ DI COMPRENSIONE: Dal punto di vista della acquisizione di contenuti metodologici, gli studenti conosceranno le principali strategie di ricerca per la risoluzione automatica di problemi, i fondamenti della rappresentazione della conoscenza mediante formalismi logici e relativi meccanismi inferenziali. Avranno inoltre acquisito le nozioni di base su architettura di un agente intelligente e su apprendimento automatico di conoscenza a partire da esempi con un'introduzione agli LLM.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE: l'esposizione dei contenuti del corso utilizza numerosi esempi sia di problemi artificiali, finalizzati a evidenziare determinate complessità,sia di contesti reali. In entrambi i casi i partecipanti sono incoraggiati a ragionare sulla possibilità e sulle conseguenze dell'applicazione di algoritmi e approcci.
AUTONOMIA DI GIUDIZIO: acquisizione di una prima forma di consapevolezza sulla necessità di fare dei trade-off (in termini di qualità della soluzione e costo computazionale) tra strategie e metodologie alternative che risolvono la stessa classe di problemi. Acquisire consapevolezza della differenza fra intelligenza naturale e artificiale.
ABILITÀ COMUNICATIVE: L’esame orale richiede inoltre l'acquisizione di una buona capacità espositiva unita all’uso corretto della terminologia del settore (e più in generale dell’informatica).
CAPACITÀ DI APPRENDIMENTO: acquisizione di capacità autonome di apprendimento e di autovalutazione.
Programma
Come già detto l'insegnamemnto è una introduzione ai concetti basilari di Intelligenza articiaicile e si articola in tre parti strettamente connesse.
Parte 1) RISOLUZIONE AUTOMATICA DI PROBLEMI In questa parte si affronta la problematica di come definire il concetto di problema e di soluzione, di distinguere tra soluzione e soluzione ottima. Sono studiati tre approcci alla risoluzione di problemi: ricerca nello spazio degli stati, ricerca in spazi con avversario (giochi ad informazione completa), risoluzione di problemi mediante soddisfacimento di vincoli. Per ciascun approccio si discutono le principali strategie di ricerca: ampiezza, profondità, iterative deepening (per le ricerche cieche nello spazio degli stati), A* e Recursive Best First Strategy (per le ricerche euristiche), Min-Max e Alfa-beta (per i giochi con avversario), backtracking, forward propagation e arc consistency per meccanismi basati su soddisfacimento di vincoli. Particolare attenzione viene data alla garanzie offerte dalle diverse strategie in termini di qualità della soluzione e di complessità computazionale.
Parte 2) RAPPRESENTAZIONE DELLA CONOSCENZA E RAGIONAMENTO Il problema della rappresentazione della conoscenza e dei relativi meccanismi inferenziali viene affrontato studiando due principali famiglie di approcci alla rappresentazione della conoscenza: formalismi logici e rappresentazioni strutturate. Per quanto riguarda i formalismi logici si vede come sia il calcolo proposizionale che il calcolo dei predicati del primo ordine possano essere utilizzati per rappresentare conoscenza sul mondo e si vede come i meccanismi inferenziali (modus ponens, resolution, etc.) possano essere adoperati per fornire servizi utili (es. risposta a domande, verifica consistenza, ecc.). Si analizza anche come una rappresentazione a regole permetta meccanismi di ragionamento più efficienti (forward e backward chaining).
Parte 3 ) AGENTI E APPRENDIMENTO AUTOMATICO In questa parte conclusiva si introduce la nozione di agente intelligente che opera in un ambiente e si fa vedere come l’agente possa avere sia comportamenti reattivi che deliberativi a seconda del compito assegnato. Si illustra come agente debba avere capacità di risoluzione automatica di problemi e di ragionamento sullo stato del mondo e sul suo stato. Si descrive brevemente come l’apprendimento automatico sia una delle caratteristiche essenziali per ottenere un agente intelligente. Vengono introdotte solo nozioni elementari con particolare riguardo all'apprendimento da esempi (in particolare apprendimento di alberi di decisione). Viene infine fatta una introduzione alle reti neurali come e in particolare perceptron e multi-layer perceptron e viene svolta un'introduzione a tecnologie attuali, quali gli LLM.
Modalità d'esame
L'esame consiste in una interrogazione individuale sugli argomenti trattati nel corso. Tipicamente una delle domande richiede la capacità di applicare una metodologia/strategia per risolvere un semplice problema simile a quelli illustrati a lezione. Pertanto nell’esame orale, oltre a verificare la conoscenza dei concetti e delle metodologie, si intende verificare la capacità di applicazione dei concetti e metodologie a problemi specifici. Sarà inoltre verificata la chiarezza di esposizione e l’uso corretto della terminologia. Un contributo alla valutazione finale è dato dalla partecipazione facoltativa ad una eventuale attività di grounding delle tematiche del corso nella realtà che ci circonda. Negli anni passati si è trattato della segnalazione di notizie/eventi/altro in un apposito forum. Tale genere di attività permette di acquisire un punto (il voto è 1 per chi partecipa indipendentemente dal numero di post, 0 altrimenti) che viene sommato al voto dell'esame, se sufficiente. Data la natura facoltativa dell'attività, non partecipare non compromette la possibilità di acquisire il punteggio massimo di 30 e lode.
Testi di riferimento
Libro Titolo: Artificial Intelligence: a modern approach Anno pubblicazione: 2010 Editore: Pearson Autore: S. J. Russell e P. Norvig Capitoli: i capitoli sono indicati nella pagina moodle del corso Note testo: Utilizzeremo prevalentemente il volume 1 Obbligatorio:
Codice insegnamento MFN0607
Stage3° anno · 9 CFU · 0 file
Scheda dell'insegnamento
Modalità d'esame
Tipo di esame: Orale. Valutazione: Voto Finale.
Codice insegnamento INF0073
Storia Dell'Informatica3° anno · 6 CFU · INFO-01/A · 0 file
Obiettivo dell'insegnamento è quello di approfondire in una prospettiva storica l'idea del computer come medium, e di raggiungere una comprensione critica delle motivazioni che hanno portato alla forma attuale di…
Scheda dell'insegnamento
Obiettivi formativi
Obiettivo dell'insegnamento è quello di approfondire in una prospettiva storica l'idea del computer come medium, e di raggiungere una comprensione critica delle motivazioni che hanno portato alla forma attuale di questo strumento. a) Conoscenza e comprensione. Conoscenza delle idee, delle concezioni e delle invenzioni principali nella storia del computer come medium e comprensione della relativa terminologia tecnica.
b) Capacità di applicare conoscenza e comprensione. Capacità di stabilire collegamenti tra le idee ed i lavori dei vari autori studiati, di tracciarne le influenze reciproche e di seguire l'evoluzione delle idee fondamentali in modo critico, anche in relazione alle applicazioni attuali dell'informatica alla comunicazione e alle arti.
c) Autonomia di giudizio. Capacità di interpretare fonti e artefatti a supporto di una riflessione critica autonoma.
d) Abilità comunicative. Esporre sinteticamente i contenuti fondamentali delle proposte dei singoli autori e le loro connessioni.
e) Capacità di apprendimento. Capacità di lettura autonoma di fonti primarie e secondarie relative al computer come medium, schematizzandone i punti principali.
Programma
L'insegnamento verte sui protagonisti dello sviluppo dell'idea di computer come medium e sulla loro visione. Le principali tappe comprendono la discussione dei seguenti argomenti, con un commento dei passi essenziali dei testi originali e di filmati d'epoca:
Vannevar Bush e il Memex.
Douglas Engelbart: collaborare on-line.
J.C.R. Licklider e la simbiosi uomo-macchina.
La nascita di Internet.
Ted Nelson e l'ipertesto.
Alan Kay e il personal computer.
Cibernetica e sistemi.
Personal computing, hippies ed avanguardie artistiche.
L'attenzione sarà concentrata sulle idee piuttosto che sulle tecnologie, e sulla portata di queste idee in altri ambiti, specialmente quello umanistico.
Modalità d'esame
Prova scritta in presenza della durata di 40 minuti, con
tre domande chiuse e
una domanda aperta sotto forma di componimento della lunghezza di 10-15 righe
ciascuna delle quali vale al massimo 8 punti, che permetteranno di verificare
la conoscenza delle idee fondamentali alla base della concezione del computer come medium, della loro evoluzione e delle loro varie manifestazioni,
la capacità di sintetizzare e confrontare queste informazioni in una prospettiva unitaria.
Il voto finale sarà la somma dei punti riportati nelle domande (30L per punteggi superiori a 30, sufficienza da 18 punti).
La formulazione delle domande ed il formato del compito sono intesi a rendere il testo accessibile a studentesse e studenti con DSA.
Testi di riferimento
Le fonti primarie su cui si basa l'insegnamento sono facilmente accessibili in versione elettronica sul web: i link saranno messi a disposizione dal docente attraverso la pagina Moodle dell'insegnamento. Sulla stessa pagina verranno rese disponibili le traduzioni italiane dei testi obbligatori:
Bush, As we may think,
Licklider, Man-computer symbiosis,
Engelbart & English, A research center for augmenting human intellect.
Codice insegnamento INF0004
TECNOLOGIE WEB3° anno · 6 CFU · INF/01 · 0 file
L’insegnamento Tecnologie Web è collocato nell’area tematica di approfondimento “Reti e sistemi informatici”. Esso è mirato a fornire solide conoscenze e competenze relative a metodologie e strumenti per la progettazione…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento Tecnologie Web è collocato nell’area tematica di approfondimento “Reti e sistemi informatici”. Esso è mirato a fornire solide conoscenze e competenze relative a metodologie e strumenti per la progettazione e lo sviluppo di applicazioni web.
L’insegnamento fornisce competenze teoriche e pratiche sull’architettura a strati di un’applicazione web (front-end, back-end, persistenza) e approfondisce, per ciascun elemento di tale architettura, strumenti e linguaggi necessari a sviluppare una single-page application.
L’apprendimento della programmazione web fa parte obiettivi formativi specifici del CdS in Informatica (L31); in particolare è fra gli obiettivi relativi all'area approfondimento.
In particolare, le/i partecipanti apprenderanno per il frontend l’uso di HTML, CSS, Javascript (standard o TypeScript), di un ambiente di sviluppo come Bootstap con tem[plate engines coem Handlebars or EJS oppure si un ambiente di sciluppo come React. Per il backend si affronteranno Express e Java Springboot.
I fondamenti di interazione tra backend e frontend saranno descritti. CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Conoscenze di progettazione di frontend e backend e loro interrelazione
Conoscenza dell' http protocol
Conoscenza del linguaggi Javascript e del loro uso per asynchronous programming
Conoscenza e comprensione dei principali linguaggi e frameworks per frontend (HTML, CSS, Bootstrap, Handlebars e/o React)
Conoscenza e comprensione di Express e Java Springboot
Conoscenza e uso di NoSQL database per uso Web
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Capacità di creare siti web
Capacità di gestire il progetto di un’applicazione Web inclusiva di frontend e backend.
apacità di realizzare un back-end server-side utilizzando Express e Springboot.
Capacità di realizzare un front-end client-side utilizzando il framework React (o Bootstrap/Handlebars), HTML e CSS.
AUTONOMIA DI GIUDIZIO
Capacità di valutare scelte progettuali e architetturali di alto livello sulla suddivisione fra client-side e server-side.
Capacità di valutare l’opportuna architettura a componenti per la costruzione di un front-end basato su pattern MVC.
Capacità di valutare la struttura del back-end affinché sia adeguata a sostenere l’utilizzo inteso dell’applicazione progettata.
Capacità di valutare l’uso di modelli, librerie, framework per la realizzazione di un’applicazione web.
Capacità di valutare le opportune strutture dati nei linguaggi di riferimento volte a realizzare le funzionalità stabilite tramite l’analisi architetturale e progettuale.
ABILITÀ COMUNICATIVE
Capacità di comunicare, in forma scritta e orale e in lingua italiana
le conoscenze acquisite
le caratteristiche tecniche, progettuali e architetturali di un’applicazione web
le scelte e le valutazioni effettuate nella progettazione e implementazione di un’applicazione web
CAPACITÀ DI APPRENDIMENTO
Capacità di apprendere attraverso la pratica l’utilizzo degli strumenti introdotti a lezione ai fini dello sviluppo di applicazioni web.
Capacità di inquadrare strumenti non precedentemente conosciuti per valutarne l’efficacia nell’ambito della progettazione di un’applicazione web.
Capacità di autovalutare il livello di competenza raggiunto con ciascuno degli strumenti proposti.
Programma
PROGRAMMAZIONE ORIENTATA AL WEB
L’architettura di un’applicazione web
I linguaggi e i framework del web: panoramica
HTML e CSS
Frontend frameworks (Boostrap withHandlebars or React)
Javascript (in forma Emascript o Typescript)
Express per implementazione di servers
Client server communication usando Ajax based methods (Axios, fetch, etc.)
NoSQL databases per Web programming
Java Springboot per implementazione di servers
Modalità d'esame
La valutazione dell’apprendimento avviene tramite i seguenti strumenti:
Progetto: il progetto consiste realizzazione di una applicazione web, completa di front-end e backend (quest'ultimo utilizzando microservizi implemntati sia in Express che JavaSperingBoot e che usano web databases per persistere l'informazione). Il ruolo di questa parte `di dimostrare la capacità di applicare le conoscenze acquisite e di effettuare scelte progettuali in autonomia. Il progetto può essere realizzato da soli o in team di massimo 3 persone, e viene discusso oralmente.
Orale: La discussione consiste in una presentazione da parte degli autori o autrici del progetto, seguita da domande del/la docente sia sul progetto che sul materiale del corso. La discussione verrà effettuata in gruppo.
Codice insegnamento P122417295
Tecnologie Web3° anno · 6 CFU · INF/01 · 0 file
L’insegnamento Tecnologie Web è collocato nell’area tematica di approfondimento “Reti e sistemi informatici”. Esso è mirato a fornire solide conoscenze e competenze relative a metodologie e strumenti per la progettazione…
Scheda dell'insegnamento
Obiettivi formativi
L’insegnamento Tecnologie Web è collocato nell’area tematica di approfondimento “Reti e sistemi informatici”. Esso è mirato a fornire solide conoscenze e competenze relative a metodologie e strumenti per la progettazione e lo sviluppo di applicazioni web.
L’insegnamento fornisce competenze teoriche e pratiche sull’architettura a strati di un’applicazione web (front-end, back-end, persistenza) e approfondisce, per ciascun elemento di tale architettura, strumenti e linguaggi necessari a sviluppare una single-page application.
L’apprendimento della programmazione web fa parte obiettivi formativi specifici del CdS in Informatica (L31); in particolare è fra gli obiettivi relativi all'area approfondimento.
In particolare, le/i partecipanti apprenderanno l’uso del linguaggio TypeScript/JavaScript e dell’ambiente Node/npm per la gestione di progetti basati su tali linguaggi. Verrà altresì approfondito l’uso di HTML, CSS e del framework React per la progettazione di front-end a componenti basati sul pattern MVVM.
Verranno introdotti i fondamenti di progettazione di un'applicazione server-side basata su protocollo HTTP e verrà poi approfondito l'uso del framework Spring, basato su Java, per la realizzazione del back-end di una single page application. CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Conoscenza dell’architettura di base di un’applicazione Web e comprensione di come essa viene composta tramite il protocollo HTTP.
Conoscenza dei linguaggi Javascript, EcmaScript e Typescript e comprensione delle relazioni fra di essi.
Conoscenza e comprensione del runtime di Javascript/Typescript (asynchronous single-threaded event-driven loop).
Conoscenza e comprensione dei meccanismi di gestione progetto e di package management.
Comprensione dei concetti di base dei framework front-end (pattern MVVM, architettura a componenti, concetto di stato di un componente, property-binding, event-binding).
Conoscenza e comprensione del funzionamento di base di un Server HTTP nei suoi aspetti statici e dinamici.
Conoscenza e comprensione del framework Spring e dell'uso del linguaggio Java all'interno di esso.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Capacità di scrivere, compilare ed eseguire programmi in Typescript.
Capacità di gestire il progetto di un’applicazione Web con appositi strumenti di package management (npm).
Capacità di progettare back-end e front-end di un’applicazione Web.
Capacità di realizzare un back-end server-side utilizzando Spring e il linguaggio Java.
Capacità di realizzare un front-end client-side utilizzando il framework React, JSX, HTML e CSS.
AUTONOMIA DI GIUDIZIO
Capacità di valutare scelte progettuali e architetturali di alto livello sulla suddivisione fra client-side e server-side.
Capacità di valutare l’opportuna architettura a componenti per la costruzione di un front-end basato su pattern MVVM.
Capacità di valutare la struttura del back-end affinché sia adeguata a sostenere l’utilizzo inteso dell’applicazione progettata.
Capacità di valutare l’uso di modelli, librerie, framework per la realizzazione di un’applicazione web.
Capacità di valutare le opportune strutture dati nei linguaggi di riferimento volte a realizzare le funzionalità stabilite tramite l’analisi architetturale e progettuale.
ABILITÀ COMUNICATIVE
Capacità di comunicare, in forma scritta e orale e in lingua italiana
le conoscenze acquisite
le caratteristiche tecniche, progettuali e architetturali di un’applicazione web
le scelte e le valutazioni effettuate nella progettazione e implementazione di un’applicazione web
CAPACITÀ DI APPRENDIMENTO
Capacità di apprendere attraverso la pratica l’utilizzo degli strumenti introdotti a lezione ai fini dello sviluppo di applicazioni web.
Capacità di inquadrare strumenti non precedentemente conosciuti per valutarne l’efficacia nell’ambito della progettazione di un’applicazione web.
Capacità di autovalutare il livello di competenza raggiunto con ciascuno degli strumenti proposti.
Programma
PROGRAMMAZIONE ORIENTATA AL WEB
L’architettura di un’applicazione web
I linguaggi e i framework del web: panoramica
Javascript & Typescript
PROGETTAZIONE E SVILUPPO FRONT-END / CLIENT-SIDE
HTML e CSS
Typescript/Javascript nel browser: la DOM API
la fetch API e la Promise API
Il pattern MVVM, le UI a componenti e le Single Page Application
Il framework React
PROGETTAZIONE E SVILUPPO BACK-END / SERVER-SIDE
Anatomia di base di un HTTP server
Programmazione server-side con Java e Spring
Java Persistence API
Il concetto di Sessione e la gestione delle credenziali
Costruire l'applicazione completa
Modalità d'esame
La valutazione dell’apprendimento avviene tramite i seguenti strumenti:
parte di teoria / prova scritta: la prova scritta si compone di domande a risposta chiusa e domande a risposta aperta. Viene valutata in 30esimi.
laboratorio / progetto e discussione: il progetto consiste realizzazione di una single page web application, completa di front-end realizzato con Typescript+React e back-end realizzato con Java+Spring, che dimostri la capacità di applicare le conoscenze acquisite e di effettuare scelte progettuali in autonomia. Il progetto può essere realizzato da soli o in team di 2 persone, e viene discusso oralmente. La discussione consiste in una presentazione da parte degli autori o autrici del progetto, seguita da domande del/la docente volte a valutare l'effettiva comprensione degli strumenti e delle soluzioni attuate, nonché la capacità di mettere in relazione quanto fatto con i concetti appresi nel corso. Anche in questo caso la valutazione è in 30esimi.
Il risultato finale dell'esame sarà dato dalla media fra i due punteggi.
Testi di riferimento
Altro Titolo: Documentazione e tutorial React (in inglese) Descrizione: La documentazione ufficiale di React (manuale, tutorial, reference guide). Note testo: Attenzione: l'ultima versione differisce significativamente dalle precedenti pubblicate su reactjs.org. considerate ora obsolete. URL: https://react.dev/learn Obbligatorio: Altro Titolo: Manuale di Typescript (in inglese) Descrizione: Manuale completo di Typescript. Contiene anche informazioni su come usare Typescript con React. URL: https://www.typescriptlang.org/docs/handbook/intro.html Obbligatorio: Altro Titolo: Guida di riferimento per HTML, CSS e il DOM (in inglese) Descrizione: La guida ufficiale della Mozilla Developer Network, con documentazione e guida di riferimento. Note testo: Oltre agli argomenti citati nel titolo, contiene molte altre informazioni potenzialmente utili per il web developer. Alcune parti sono disponibili anche in italiano. URL: https://developer.mozilla.org/en-US/ Obbligatorio: Altro Titolo: Spring Boot Tutorial (in inglese) Descrizione: Un tutorial molto completo sul framework Spring URL: https://www.geeksforgeeks.org/spring-boot/ Obbligatorio:
Codice insegnamento MFN0634
Recensioni del corso
Studi qui? Accedi per lasciare la tua recensione e aiutare altri studenti a scegliere.
★
Nessuna recensione per ora — e la prima è la più preziosa. Condividi la tua esperienza e orienta le future matricole.
Loading...
0 studenti online×
Preferenze cookie
NecessariSempre attivi
Sessione, login, sicurezza e memorizzazione di questa scelta. Senza
questi il sito non funziona, quindi non richiedono consenso.
StatisticheSempre attive
Google Analytics 4: pagine viste e percorsi di navigazione, per capire
cosa cercano gli studenti. Dati raccolti in forma aggregata.
Meta Pixel: misura le campagne su Facebook e Instagram. Se sei loggato
trasmette anche il tuo identificativo UniDocs a Meta.
Solo per te: ti prepariamo il riassunto e le domande per ripassare. Il primo file è gratis e l'originale resta tuo.
Oppure condividili con la community e guadagna crediti.
Accidenti, ancora non abbiamo il tuo corso di laurea!
Se ti va puoi inserirlo tu in pochi click — anche solo il corso di laurea, oppure completo di tutti i corsi!
Aggiungilo subito
e faremo del nostro meglio per popolarlo di materiale interessante.
Nel frattempo inizia a guadagnare crediti invitando i tuoi amici, così appena saremo attivi potrai subito accedere al materiale disponibile.
Bastano 3 amici verificati per attivare l'abbonamento…
Consiglia ai tuoi amici
Scrivi ai tuoi vecchi amici o ai tuoi nuovi colleghi di studio. Ogni email che inserisci rappresenta un mattone importante per la community.
Per ogni amico che porti otterrai nuovi crediti!