Corso di laurea

Informatica e Tecnologie dell'Informazione - Taranto

Università degli studi di Bari · 40 materie · 0 file condivisi

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.

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!

Materie del corso

Architettura degli Elaboratori 1° anno · 1° semestre · 9 CFU · INFO-01/A · 0 file

Il corso ha l’obiettivo di far conoscere l’organizzazione e i principi di funzionamento degli elaboratori. Gli obiettivi formativi del corso sono: Far comprendere la struttura e i principi di funzionamento degli elementi…

Scheda dell'insegnamento

Obiettivi formativi

Il corso ha l’obiettivo di far conoscere l’organizzazione e i principi di funzionamento degli elaboratori.
Gli obiettivi formativi del corso sono:

  • Far comprendere la struttura e i principi di funzionamento degli elementi fondamentali, sia hardware che software, di un sistema di elaborazione
  • Far comprendere come la progettazione di tali elementi possa influire sulle prestazioni di un sistema di elaborazione
  • Far comprendere i principi fondamentali dell’aritmetica dell’elaboratore e le principali tecniche di rappresentazione dell’informazione adottate in un elaboratore.
  • Far comprendere la strutturazione per livelli di un elaboratore mediante la realizzazione (in forma simulata) di un sistema di elaborazione completo e funzionante.
  • Acquisizione dei fondamenti della disciplina informatica relativamente all’architettura degli elaboratori e ai sistemi operativi, fissando in particolare gli aspetti essenziali dell’elaborazione automatica dell’informazione che rimangono inalterati a fronte del cambiamento tecnologico
  • Conoscenza delle componenti di un elaboratore sia dal punto di vista funzionale che dal punto di vista strutturale e tecnologico
  • Conoscenza dell’hardware dell’elaboratore anche da una prospettiva software, considerando l’uso dei componenti principali dell’elaboratore da parte delle applicazioni software.
  • Consapevolezza delle potenzialità e dei limiti delle moderne architetture degli elaboratori.
  • Comprensione del concetto fondamentale di processo inteso nell’accezione di sequenza di eventi generate dall’esecuzione di un programma

Analisi più approfondita della disciplina mediante applicazioni e attività di laboratorio che fanno riferimento, in particolare, alla realizzazione (simulata) di un sistema di elaborazione completo e funzionante, al fine di assimilare e mettere in pratica le competenze teoriche acquisite.

Autonomia di giudizio
Lo studente dovrà dimostrare di aver acquisito autonomia di giudizio riguardo le potenzialità e le problematiche relative ai moderni sistemi di elaborazione. L'autonomia di giudizio viene acquista attraverso lo studio e l’interpretazione critica dei testi. Il raggiungimento dell’adeguata autonomia è verificato attraverso le esercitazioni svolte durante il corso, nonché mediante l’esame finale di profitto.
Abilità comunicative
Lo studente sarà in grado di illustrare in modo appropriato i principi e le tecniche di base utilizzate nei sistemi di elaborazione e le modalità di esecuzione dei programmi, utilizzando il lessico tecnico, specifico della disciplina.
Capacità di apprendere in modo autonomo
Capacità di apprendere i concetti attraverso una integrazione del materiale fornito dal docente con i contenuti del testo di riferimento.

Programma

TEORIA (56 ore in totale)
1. Fondamenti
1.1 Visione ad alto livello della struttura di un elaboratore
Elaborazione automatica dell’informazione. Rappresentazione digitale. Le strutture di informazione. Struttura a livelli di un sistema di elaborazione. Livelli di macchine e linguaggi. Modello della macchina di Von Neumann. Evoluzione degli elaboratori.
1.2 Componenti di un elaboratore
Il processore. Gerarchia di memorie. I Registri. La Memoria centrale. La Memoria cache. Le memorie ROM. Le memorie di massa: dischi magnetici e dischi ottici. Componenti per il trasferimento di informazioni: bus e dispositivi di I/O. Temporizzazione e arbitraggio del bus.
2. Architettura dell’elaboratore
2.1 Livello logico digitale
Operatori logici di base. Porte logiche di base. Funzioni logiche e forma canonica disgiuntiva. Circuiti logici di tipo combinatorio. Circuiti logici di tipo sequenziale.
2.2 Livello di microarchitettura
Struttura del processore. Unità di calcolo. Unità di controllo e Ciclo di Istruzione. Unità di controllo cablata e unità di controllo microprogrammata. Gestione delle interruzioni. Gestione dei dispositivi di I/O: indirizzamento dei dispositivi di I/O, I/O programmato, I/O guidato da interrupt, DMA.
2.3 Livello ISA (Instruction Set Architecture)
Caratteristiche delle istruzioni in linguaggio macchina. Tipi di istruzioni. Formato delle istruzioni. Modalità di indirizzamento. Il livello ISA della famiglia INTEL 80x.
2.4 Livello di linguaggio Assembly
Processo di assemblaggio. Processo di linking e loading.
2.5 Architetture avanzate
Architetture RISC e CISC. Classificazione di Flynn. Sistemi a singolo processore. Parallelismo a livello di istruzione: il pipelining. Architetture superscalari. Parallelismo a livello di processore: sistemi a multiprocessori, sistemi a multielaboratori. Architetture multi-core.
3. Livello del Sistema Operativo
Struttura e funzioni di un sistema operativo. Gestione dei processi. Algoritmi di schedulazione. Gestione della memoria.
ESERCITAZIONI E LABORATORIO (30 ore in totale)
Aritmetica dell’elaboratore
Sistemi di numerazione posizionali: sistema di numerazione binario, ottale e esadecimale. Rappresentazione binaria dei numeri naturali. Rappresentazione binaria dei numeri relativi. Operazioni in binario con numeri naturali e numeri relativi. Rappresentazione binaria dei numeri reali: la rappresentazione a virgola mobile. Codici binari: codici di caratteri; codici a rilevazione di errore; codici a correzione di errore. Esempi ed esercizi.
Introduzione alla programmazione di basso livello e simulazione di un sistema di elaborazione. Realizzazione del computer Hack (dalla porta logica Nand al livello del linguaggio Assembly):
00-Introduzione al linguaggio HDL
01-Implementazione delle porte logiche elementari
02-Implementazione dell’ALU
03-Implementazione dei dispositivi di memoria (registri, RAM, ROM)
04-Esempi di programmazione in linguaggio macchina Hack
05-Implementazione del computer Hack
06-Implementazione dell’Assembler

Modalità d'esame

Relativamente alla parte del programma di Laboratorio, gli studenti dovranno realizzare (in forma simulata) un sistema di elaborazione completo e funzionante mediante l’ausilio del software presentato a lezione e messo a disposizione dal docente.
Il completamento delle attività di laboratorio è propedeutico alla partecipazione all’esame di profitto vero e proprio. La prova d’esame tipicamente consiste in una prova scritta che include domande a risposta multipla riguardanti tutto il programma del corso (inclusi gli argomenti di laboratorio).
Nell’ambito di questo insegnamento i docenti sono soliti organizzare prove in itinere. Questo tipo di prove, con valore esonerante ai fini dell’esame, si strutturano tipicamente nell’arco di due momenti di verifica. Una prima prova in itinere si tiene all’incirca a metà del completamento del corso (orientativamente, durante la settimana di interruzione delle lezioni). La verifica consiste in una prova scritta che include domande a risposta multipla relative agli argomenti del corso trattati sino a quel momento. Una seconda prova in itinere si tiene al termine del corso e può essere sostenuta solo in caso di superamento della prova precedente. Anche la seconda verifica consiste in una prova scritta che include domande a risposta multipla, relative in questo caso agli argomenti trattati nella seconda parte del corso. Il punteggio risultante dalla media dei voti ottenuti nelle due prove in itinere può essere verbalizzato nell’arco della prima sessione di esami (gennaio/febbraio), previa attestazione di conclusione con esito positivo delle attività di laboratorio. Alternativamente, lo studente può decidere di rinunciare al voto ottenuto al termine delle prove in itinere e partecipare all'esame (in tal caso, vale la propedeuticità del completamento delle attività di laboratorio).
Il voto finale conseguito (in trentesimi) viene pubblicato esclusivamente sulla piattaforma Esse3.

Testi di riferimento

Testo di riferimento:
-W. Stallings, Architettura e organizzazione dei calcolatori. Progetto e prestazioni, 8^edizione. Pearson, 2010
-Noam Nisan, Shimon Schocken, "The Elements of Computing Systems", I Edizione (o successive), The MIT Press, 2008, ISBN: 9780262640688
Gli studenti che lo desiderano possono ottenere i testi in prestito dalla Biblioteca. Può convenire verificarne la disponibilità mediante il Sistema Bibliotecario di Ateneo https://opac.uniba.it/easyweb/w8018/index.php? e contattare la biblioteca per concordare il prestito.

Codice insegnamento UC450431

Fondamenti di Matematica 1° anno · 1° semestre · 9 CFU · MATH-02/A · 0 file

L'insegnamento ha lo scopo di consolidare, sistematizzare e portare ad un livello post secondario le conoscenze di base di matematica: aritmetica, logica, algebra, analisi, probabilità, statistica. Lo studio di queste…

Scheda dell'insegnamento

Obiettivi formativi

L'insegnamento ha lo scopo di consolidare, sistematizzare e portare ad un livello post secondario le conoscenze di base di matematica: aritmetica, logica, algebra, analisi, probabilità, statistica.
Lo studio di queste nozioni, indispensabili in ambito tecnico-scientifico, rafforza l'attitudine al ragionamento formalizzato e all'astrazione.

Consolidamento e sistematizzazione delle conoscenze di base (previste, talvolta, già al livello di istruzione secondaria):
Numeri reali: proprietà algebriche e d’ordine; funzioni reali di variabile reale; funzioni elementari;
Algebra: polinomi, equazioni, disequazioni, sistemi lineari;
Derivata e retta tangente. Derivate delle funzioni elementari e regole di derivazione.
Acquisizione di conoscenze qualificanti, specifiche del livello post secondario:
Logica dei predicati.
Algebra: matrici e spazi vettoriali, il campo binario;
Sviluppo in serie di Taylor;
Probabilità discreta, informazione ed entropia;
Tecniche di base dell’analisi statistica.

Capacità di risolvere esercizi con l’utilizzo di conoscenze di base:
equazioni e disequazioni che coinvolgono le funzioni elementari e i polinomi;
limiti semplici (forme determinate, funzioni razionali/irrazionali);
determinazione di monotonia e convessità tramite le derivate.
Capacità di risolvere problemi che coinvolgono conoscenze o tecniche di
livello qualificante (post secondario):
esecuzione dimostrazioni formali nell’ambito della logica proposizionale e dei predicati;
risoluzione di sistemi di equazioni lineari multivariate sia sul campo reale che su campi finiti;
sviluppo in serie di Taylor.

Autonomia di giudizio:
capacità di sviluppare, a partire dalle nozioni matematiche, il pensiero critico come approccio ai vari problemi;
capacità di individuare gli strumenti e le procedure più appropriate per la risoluzione di specifici problemi.
Abilità comunicative:
capacità di esporre con proprietà di linguaggio, sostenendo o confutando tesi con esempi e controesempi;
capacità di riportare in maniera chiara i risultati degli esercizi proposti sotto forma di problema.
Capacità di apprendere in modo autonomo:
capacità di consultare con profitto libri di testo e dispense messe a disposizione dal docente;
capacità di vagliare altre fonti di informazione.

Programma

Logica
Proposizioni, connettivi logici (not, or, and, if-then, if-and-only-if, nor, nand, xor), tavole di verità. I principi e le leggi della logica (principio di non contraddizione, principio della doppia negazione, principio del terzo escluso, leggi distributive, di assorbimento, di De Morgan). L’equivalenza semantica. La logica dei predicati e i quantificatori. Il principio di induzione.
Insiemistica
Insiemi e elementi, sottoinsiemi, insieme universo. Le operazioni insiemistiche e la loro relazione con la logica. Le proprietà distributive e le leggi di De Morgan. Il principio di inclusione-esclusione. L’insieme delle parti. Partizioni di un insieme. Il prodotto cartesiano di insiemi
Aritmetica
Numeri naturali, interi, razionali, reali, complessi. Operazioni aritmetiche: somma, sottrazione, moltiplicazione, divisione, potenze, esponenziazione, logaritmo. Algoritmo di Euclide per il Massimo Comun Divisore. I numeri primi. Sistemi di numerazione: sistema decimale, binario, esadecimale. Conversione tra sistemi di numerazione. Operazioni in base 2.
Introduzione all’algebra e al calcolo combinatorio
I polinomi e le equazioni polinomiali. Risoluzione di equazioni lineari e di equazioni quadratiche. Gli zeri di un polinomio e la divisione polinomiale. Sequenze e serie. Permutazioni e combinazioni. Il coefficiente binomiale.
Aritmetica modulare
Introduzione a gruppi ed anelli finiti. L’anello degli interi modulo n, la somma, il prodotto, l’esponenziazione, il logaritmo discreto.
Probabilità
Eventi, indipendenza, probabilità classica, probabilità a posteriori, spazi di probabilità discreti, Bernoulli e Binomiali. Variabili aleatorie. Distribuzioni di probabilità, probabilità condizionata, catene di Markov. Introduzione alla teoria dell’informazione (contenuto di informazione, entropia, randomicità).
Statistica
Media, mediana, varianza, deviazione standard. La distribuzione normale, il teorema del limite centrale. Test statistico, ipotesi nulla, intervallo di confidenza.
Trigonometria
Angoli e misurazioni, il cerchio unitario, gradi sessagesimali, radianti. Funzioni goniometriche (seno, coseno, tangente) e valori notevoli.
Algebra
Il piano cartesiano, i sistemi di coordinate, i vettori 2-dimensionali. Spazi cartesiani e vettori. Campi finiti e spazi vettoriali su campi finiti. Equazioni lineari, sistemi lineari multivariati. Sistemi risolubili, determinati, impossibili. Risoluzione di sistemi lineari tramite matrici e determinanti. Equazioni polinomiali: equazioni quadratiche e cubiche. Equazioni e sistemi di equazioni lineari sul campo binario. Matrici. Operazioni tra matrici. Matrici invertibili, calcolo dell’inversa. Rango e determinante. Moltiplicazione matrice-vettore e mappe lineari tra spazi finiti. Autovettori ed autovalori.
Analisi
Funzioni, dominio, immagine. Limiti e asintoti. Funzioni elementari (funzioni polinomiali, l’esponenziale, il logaritmo, le funzioni goniometriche). La derivata. Lo sviluppo in serie di Taylor.
Codici e crittografia
Introduzione al problema della decodifica delle informazioni. I codici lineari e la capacità correttiva. Codifica e decodifica con le sindromi. Introduzione alla crittografia. Il cifrario di Cesare. Cifratura simmetrica e asimmetrica. RSA.

Modalità d'esame

Durante le lezioni verranno discussi, in modo partecipato, diversi quesiti ed esercizi simili per tipologia a quelli comunemente somministrati durante gli esami. La finalità è duplice: monitorare in tempo reale lo stato di preparazione degli studenti frequentanti, perfezionandone la preparazione in vista dell'esame; agevolare lo studio in itinere degli aspetti pratici della disciplina, motivando concretamente i corsisti a sostenere l'esame in tempi brevi, sfruttando possibilmente la modalità degli esoneri.
Sono previste due prove parziali scritte per facilitare la preparazione all’esame.
Lo studente che non ha sostenuto le prove parziali sosterrà l’esame scritto completo.
Conoscenza e capacità di comprensione:
assenza di gravi lacune nelle conoscenze di base;
raggiungimento di almeno qualche risultato di apprendimento qualificante;
precisione e la chiarezza nell’esposizione degli enunciati (definizioni e teoremi);
uso degli esempi a commento degli enunciati stessi;
capacità di svolgimento di dimostrazioni e la correttezza delle stesse.
Conoscenza e capacità di comprensione applicate:
assenza di gravi lacune nell’applicazione delle conoscenze di base;
raggiungimento di almeno qualche risultato di apprendimento di livello qualificante nelle conoscenze applicate;
capacità di riportare in maniera chiara i risultati degli esercizi.
Autonomia di giudizio:
applicazione di risultati a problemi di base proposti durante il corso mediante argomenti coerenti e non fallaci;
capacità di svolgimento di dimostrazioni secondo rigorosi ragionamenti di tipo logico-deduttivo.
Abilità comunicative:
conoscenza della corretta terminologia matematica;
capacità di esposizione con proprietà di linguaggio.
Apprendimento autonomo:
capacità di saper applicare i risultati teorici nei vari problemi che gli vengono presentati.
Gli studenti sono valutati sulla correttezza e la comprensione degli argomenti presentati a lezione.
Il voto finale è attribuito in trentesimi. L’esame si intende superato quando il voto finale è maggiore o uguale a 18. Nella valutazione della prova orale e nell’attribuzione del voto finale varrà la seguente scala di valutazione dell’apprendimento:
Voto insufficiente (<18): Conoscenze frammentarie e superficiali dei contenuti, errori nell’applicare i concetti, esposizione carente
Voto 18-20: Conoscenze dei contenuti sufficienti ma generali, esposizione semplice, incertezze nell’applicazione di concetti teorici
Voto 21-23: Conoscenze dei contenuti appropriate ma non approfondite, capacità di applicare i concetti teorici, capacità di presentare i contenuti in modo semplice.
Voto 24-25: Conoscenze dei contenuti appropriate e ampie, discreta capacità di applicazione delle conoscenze, capacità di presentare i contenuti in modo articolato.
Voto 26-27: Conoscenze dei contenuti precise e complete, buona capacità di applicare le conoscenze, capacità di analisi, esposizione chiara e corretta
Voto 28-29: Conoscenze dei contenuti ampie, complete ed approfondite, buona applicazione dei contenuti, buona capacità di analisi e di sintesi, esposizione sicura e corretto
Voto 30 e 30 e lode: Conoscenze dei contenuti molto ampie, complete ed approfondite, capacità ben consolidata di applicare i contenuti, ottima capacità di analisi, di sintesi e di collegamenti interdisciplinari, padronanza di esposizione

Testi di riferimento

Foundation Mathematics for Computer Science - A Visual Approach, 4th edition / John Vince. - Springer, c2024
Concrete mathematics : a foundation for computer science / Ronald L. Graham, Donald E. Knuth, Oren Patashnik. - Reading, Mass : Addison-Wesley, c1989
Il testo 1 è il testo principale di riferimento, ed è disponibile come risorsa elettronica al portale di ateneo SIBA, tramite il servizio Ebook Central di Proquest (previa autenticazione con credenziali di ateneo, in prestito elettronico, massimo tre prestiti in contemporanea).
Gli studenti che lo desiderano possono ottenere il testo 2 in forma cartacea. in prestito dalla Biblioteca. Può convenire verificarne la disponibilità mediante il Sistema Bibliotecario di Ateneo https://opac.uniba.it/easyweb/w8018/index.php? e contattare la biblioteca per concordare il prestito.

Codice insegnamento UC450433

Laboratorio di Informatica 1° anno · 2° semestre · 6 CFU · IINF-05/A · 0 file

L’insegnamento di Laboratorio di Informatica ha l’obiettivo di fornire agli studenti le competenze fondamentali per la progettazione, lo sviluppo e la documentazione di soluzioni algoritmiche a problemi reali. Il corso…

Scheda dell'insegnamento

Obiettivi formativi

L’insegnamento di Laboratorio di Informatica ha l’obiettivo di fornire agli studenti le competenze fondamentali per la progettazione, lo sviluppo e la documentazione di soluzioni algoritmiche a problemi reali. Il corso pone particolare attenzione agli aspetti pragmatici della programmazione, con enfasi sulla progettazione modulare, sullo stile di codifica, sulla scelta accurata della nomenclatura, sul testing e sul debugging. Attraverso lo sviluppo guidato di un caso di studio su un problema reale, gli studenti imparano a realizzare soluzioni corrette, leggibili, ben progettate e documentate, consolidando al tempo stesso le proprie capacità di problem solving e di comunicazione tecnica.

Al termine dell’insegnamento, i discenti conosceranno alcuni dei principali aspetti pragmatici della programmazione, quali la programmazione difensiva, un corretto stile di scrittura, l’uso appropriato della nomenclatura, testing e debugging, progettazione modulare, ecc.

Al termine dell’insegnamento, posti di fronte a un problema reale, i discenti saranno in grado di implementare una soluzione non solo corretta, ma anche chiara, ben progettata e ben documentata. Inoltre, avranno ampliato le proprie capacità di problem solving.

Al termine dell’insegnamento, i discenti avranno sviluppato la capacità di condurre un caso di studio reale dall’analisi dei requisiti, all’implementazione di una soluzione algoritmica e al suo testing e debugging. I discenti apprenderanno inoltre a redigere una documentazione di progetto e a comunicarla con efficacia a interlocutori specialisti e non, enfatizzandone i punti chiave.

Programma

Il linguaggio C
Funzioni, array e stringhe
Puntatori e gestione dinamica della memoria
Struct e strutture dati dinamiche
File
Progettazione modulare
Stile di programmazione
Complessità computazionale (cenni)
Documentazione del codice
Testing
Debugging

Modalità d'esame

L’esame prevede un caso di studio—pensato per essere svolto in coppia—su un problema reale complesso scelto da un insieme di possibili tracce. Il caso di studio, discusso in sede di orale, e corredato da una documentazione di progetto e dal codice e i dati a esso associati, dovrà dimostrare la capacità di produrre codice corretto, leggibile, ben documentato, e correttamente progettato e strutturato. Poiché l’insegnamento è di natura fortemente pratica, non prevede esoneri; tuttavia, i casi di studio potranno iniziare a essere svolti già a metà del programma per consentire agli studenti di sostenere l’esame già al primo appello. Il caso di studio svolto viene mantenuto per tutto l’anno accademico.

Testi di riferimento

Il corso non adotta un testo di riferimento; tuttavia, i contenuti didattici possono essere integrati dal seguente testo suggerito:
P. Deitel, H. Deitel, C How to Program, Pearson.

Codice insegnamento UC450437

Lingua Inglese* 1° anno · 2° semestre · 6 CFU · ANGL-01/C · 0 file
Linguaggi di Programmazione 1° anno · 2° semestre · 9 CFU · INFO-01/A · 0 file

L’insegnamento si propone di introdurre: ● i fondamenti teorici dei linguaggi di programmazione; ● le tecniche sottostanti la progettazione dei linguaggi di programmazione. Lo studente acquisirà la conoscenza della…

Scheda dell'insegnamento

Obiettivi formativi

L’insegnamento si propone di introdurre:
● i fondamenti teorici dei linguaggi di programmazione;
● le tecniche sottostanti la progettazione dei linguaggi di programmazione.
Lo studente acquisirà la conoscenza della teoria dei linguaggi formali, sarà in grado di comprendere i meccanismi secondo i quali si implementa un linguaggio di programmazione e saprà associare le operazioni svolte dal compilatore ai fondamenti teorici dei linguaggi formali.

o Capacità di enunciare con rigore definizioni e teoremi della teoria dei linguaggi formali;
o Capacità di descrivere con precisione e chiarezza le tecniche ed i fondamenti teorici alla base dei meccanismi di analisi e traduzione dei linguaggi di programmazione.

o Capacità di applicare i teoremi della teoria dei linguaggi formali alla soluzione di problemi;
o Capacità di classificare un linguaggio formale nella gerarchia di Chomsky, mediante la costruzione di una dimostrazione formale;
o Capacità di generare, descrivere e riconoscere un linguaggio formale, mediante la costruzione di grammatiche, la definizione di espressioni regolari e la progettazione di opportune macchine.

Autonomia di giudizio:
o Modalità adottate per la verifica delle soluzioni proposte (ad esempio, verifica di correttezza di una grammatica).
Abilità comunicative:
o Chiarezza nella descrizione delle soluzioni proposte ai quesiti.
Capacità di apprendere:
o Capacità di astrazione, di ragionamento per analogia e dimostrazione di creatività nella risoluzione dei quesiti.

Programma

La numerazione degli argomenti ne indica l’ordine di presentazione e di studio. Inoltre, l’indice di ogni argomento è utile per ritrovare i relativi contenuti nei testi di riferimento.
1. Introduzione ai linguaggi di programmazione ed ai linguaggi formali Problemi, Macchine di Turing, cenni a calcolabilità e linguaggi di programmazione. Interpretazione e compilazione. Gerarchia di linguaggi di programmazione e di macchine astratte. Aree di ricerca dell'informatica teorica, panoramica su e relazioni tra sintassi e semantica, alberi di derivazione. Regole di produzione, esempi di linguaggi formali.
Ore lezione frontale: 9
Ore esercitazione in aula: 1
2. Grammatiche generative
Linguaggi formali e monoidi liberi generati da un insieme. Generazione e riconoscimento di linguaggi formali. Grammatiche generative. Esempi di grammatiche generative. Derivazioni. Correttezza di una grammatica.
Ore lezione frontale: 9
Ore esercitazione in aula: 1
3. Linguaggi liberi da contesto e linguaggi dipendenti da contesto
Definizioni ed esempi di linguaggi liberi da contesto. Definizioni ed esempi di linguaggi dipendenti da contesto. Grammatiche e linguaggi monotoni.
Ore lezione frontale: 3
Ore esercitazione in aula: 1
4. Linguaggi liberi da contesto
Alberi di derivazione. Principio di sostituzione di sottoalberi. Pumping lemma per i linguaggi liberi da contesto.
Ore lezione frontale: 9
Ore esercitazione in aula: 9
5. Grammatiche e macchine
Classificazione delle grammatiche secondo Chomsky. Teorema della Gerarchia di Chomsky. Lemma della stringa vuota. Operazioni sui linguaggi e proprietà di chiusura delle classi di linguaggi rispetto alle operazioni.
Ore lezione frontale: 14
Ore esercitazione in aula: 6
6. Automi
Automi a stati finiti deterministici e non deterministici. Linguaggi a stati finiti.
Ore lezione frontale: 3
Ore esercitazione in aula: 2
7. Linguaggi regolari ed espressioni regolari
Definizioni e proprietà delle espressioni regolari. Teorema di Kleene. Pumping Lemma per i linguaggi regolari.
Ore lezione frontale: 7
Ore esercitazione in aula: 10
8. Modello del compilatore
Analizzatore lessicale, analizzatore sintattico, analizzatore semantico, generazione e ottimizzazione del codice. Tabella dei simboli.
Ore lezione frontale: 2

Modalità d'esame

Prova d’esame
L’esame consiste in una prova scritta, nella quale si richiede di rispondere alle seguenti tipologie di quesiti:
● svolgimento di esercizi sulla teoria dei linguaggi formali;
● enunciazione di definizioni sulla teoria dei linguaggi formali;
● dimostrazione di teoremi della teoria dei linguaggi formali;
● quesiti aperti sul modello di compilatore.
Regolamentazione della prova d’esame:
● durata della prova: 90 minuti;
● la valutazione è espressa in trentesimi;
● comunicazione dei risultati: piattaforma Esse3.
Simulazione prova d’esame
Al termine delle lezioni si terrà una simulazione della prova d’esame, che consisterà nell’esecuzione di esercizi tratti da prove d’esame precedenti. Gli esercizi saranno svolti in autonomia dagli studenti nel tempo solitamente concesso in sede d’esame in modo da avere un riscontro della propria preparazione prima dell’esame. Al termine della prova il docente mostrerà le relative soluzioni.

Testi di riferimento

1. [Semeraro] G. Semeraro. Elementi di teoria dei linguaggi formali, ilmiolibro.it (2017),
http://ilmiolibro.kataweb.it/libro/informatica-e-internet/317883/elementi-di- teoria-dei-linguaggi-formali
2. [Gabrielli] M. Gabbrielli, S. Martini. Linguaggi di Programmazione, Principi e paradigmi. 2/ed., McGraw-Hill (2011).
3. [Hopcroft] J. E. Hopcroft, R. Motwani, J. D. Ullman. Automi, Linguaggi e calcolabilità. Pearson (2018).
Gli studenti che lo desiderano possono ottenere i testi in prestito dalla Biblioteca. Può convenire verificarne la disponibilità mediante il Sistema Bibliotecario di Ateneo https://opac.uniba.it/easyweb/w8018/index.php? e contattare la biblioteca per concordare il prestito.

Codice insegnamento UC450441

Programmazione 1° anno · 1° semestre · 12 CFU · INFO-01/A · 0 file

Il corso si propone di introdurre gli elementi base della programmazione imperativa strutturata per formulare soluzioni algoritmiche a problemi di complessità limitata. In particolare lo studente acquisirà la capacità di…

Scheda dell'insegnamento

Obiettivi formativi

Il corso si propone di introdurre gli elementi base della programmazione imperativa strutturata per formulare soluzioni algoritmiche a problemi di complessità limitata. In particolare lo studente acquisirà la capacità di usare il linguaggio di programmazione C come strumento per modellare problemi e formalizzarne le soluzioni.

  • Acquisire conoscenze che consentano allo studente di comprendere come si può indicare a un elaboratore elettronico (macchina automatica di impiego universale, hardware) la soluzione di un problema o di una classe di problemi, che l'elaboratore può risolvere, con un metodo e un linguaggio appropriati, creando un apposito programma (software) eseguibile dall'elaboratore.
  • Acquisire la capacità di ragionare ed individuare una soluzione ad un problema (algoritmo) secondo il paradigma della programmazione imperativa strutturata;
  • Comprendere l'uso di un linguaggio di progettazione non convenzionale (es. pseudocodice) e l'uso di una rappresentazione grafica (es. flow chart) per descrivere con un formalismo semplice un algoritmo;
  • Comprendere il lessico, la sintassi e la semantica del linguaggio di programmazione C;
  • Acquisire la capacità di scrivere un programma strutturato in linguaggio C;
  • Acquisire la capacità di individuare casi di test per il dominio cui fa riferimento il programma creato;
  • Acquisire la capacità di utilizzare un ambiente di sviluppo (es. Xcode, Visual Studio) per trasformare il programma sorgente (in C) in un programma eseguibile ed eseguirlo.

Autonomia di giudizio

  • Acquisire la capacità di verificare che l'algoritmo individuato risponda alle specifiche di un problema;
  • Acquisire la capacità di verificare che i risultati ottenuti dopo l'esecuzione del programma siano quelli attesi.
    Abilità comunicative
  • Imparare a commentare il codice prodotto al fine di renderlo comprensibile e agevolmente modificabile da altri professionisti, con l'obiettivo di sviluppare in team.
    Capacità di apprendere in modo autonomo
  • Capacità di approfondire concetti attraverso lo studio autonomo di materiale video prodotto e proposto dal docente;
  • Capacità di completare autonomamente il percorso formativo previsto dal testo di riferimento, oltre i contenuti previsti dal programma dell'insegnamento.

Programma

Presentazione del corso, contenuti, modalità d'esame, esoneri, frequenza alle lezioni, orari, modalità di esercitazione in aula, ecc.
Introduzione alla programmazione
Un semplice programma in C: visualizzare una riga di testo.
Un altro semplice programma C: sommare due interi.
Uso del compilatore
ambiente di sviluppo Xcode
cenni al debugging
Esercitazioni e approfondimenti degli argomenti: un semplice programma C: visualizzare una riga di testo.
Nozioni sulla memoria
L'aritmetica del C
Prendere delle decisioni: gli operatori di uguaglianza e relazionali.
Gli algoritmi
Lo pseudocodice.
Le strutture di controllo
Il comando di selezione if
Il comando di selezione if else.
Il comando di iterazione while.
Formulazione degli algoritmi: studio di un caso: l'iterazione controllata da un contatore.
Formulazione degli algoritmi con processo top-down per raffinamenti successivi: studio di un caso: iterazione controllata da un valore sentinella.
Conversione di tipo, precisione.
Strutture di controllo nidificate
esercitazione con uso di pseudocodice
Formulazione degli algoritmi con processo top down per raffinamenti successivi: studio di un caso: strutture di controllo nidificate
Gli operatori di incremento e di decremento
Gli elementi dell’iterazione
Iterazione controllata da un contatore
Il comando di iterazione FOR
esempi di utilizzo del comando FOR
Il comando di selezione multipla switch
Introduzione al comando break, studio di un caso.
Il comando di iterazione do...while
Le istruzioni break e continue
Gli operatori logici
Operatori di uguaglianza (= =) e di assegnamento (=);
Riassunto della programmazione strutturata.
I moduli di programma in C
Le funzioni della libreria matematica
Le funzioni
Le definizioni di funzione
I prototipi di funzione
Lo stack delle chiamate di funzione e i record di attivazione
I file di intestazione
Invocare le funzioni: chiamata per valore e per riferimento
Generazione di numeri casuali
Esercitazione/autovalutazione: sviluppo flowchart, attività svolta con assistenza del docente
Esempio: un gioco d'azzardo
Le classi di memoria
Le regole di visibilità
La ricorsione
I vettori
La dichiarazione dei vettori
Esempi sui vettori
Esercitazione e studio individuale di materiale video prodotto dal docente, a supporto delle lezioni teoriche. Il video descrive lo sviluppo di un flowchart prendendo spunto dall'esercizio 'Crescita della popolazione mondiale' del testo di riferimento. Il metodo di progettazione rispetta i principi della programmazione strutturata e utilizza strutture di controllo di base del linguaggio di programmazione C - discussione con il docente.
Ulteriori esempi sui vettori
Vettori statici ed automatici
Passare i vettori alle funzioni, passaggio per riferimento (indirizzo) e per valore, qualificatore 'const'
Algoritmi di ordinamento: bubble sort
Studio di un caso: calcolare la media, mediana e la moda usando i vettori
La ricerca nei vettori (lineare), algoritmo e programma per la ricerca lineare in un vettore
La ricerca nei vettori (binaria)
Vettori multidimensionali.
Manipolazione delle matrici
esercitazione sulle matrici bidimensionali (fig.6.22 del testo 4^ed)
Esercitazione e studio individuale di materiale video prodotto dal docente, a supporto delle lezioni teoriche. Il video descrive lo sviluppo di un flowchart dell'esercizio 'dado a 20 facce'. Il metodo di progettazione rispetta i principi della programmazione strutturata - discussione con il docente.
Esercitazione: Individuazione dei numeri primi. Crivello di Eratostene.
Esercitazione e studio individuale di materiale video prodotto dal docente, a supporto delle lezioni teoriche. Il video descrive il passaggio da un algoritmo descritto con flowchart al codice in linguaggio C, prendendo spunto dall'esercizio 'dado a 20 facce'. Il metodo di progettazione rispetta i principi della programmazione strutturata e utilizza strutture di controllo di base del linguaggio di programmazione C - discussione con il docente.
Esercitazione e studio individuale di materiale video prodotto dal docente, a supporto delle lezioni teoriche. Il video descrive lo sviluppo di un flowchart prendendo spunto dall'esercizio 'Craps - un gioco d'azzardo'; del testo di riferimento. Il metodo di progettazione rispetta i principi della programmazione strutturata - discussione con il docente.
Preparazione all'esonero.
simulazione autonoma in preparazione del 1^ esonero, assistita dal docente
Autocorrezione esonero assistita dal docente
La gerarchia dei dati
I file e gli stream
Creare un file ad accesso sequenziale
Leggere i dati da un file ad accesso sequenziale
Leggere i dati da un file ad accesso sequenziale (approfondimenti)
Programma per l'interrogazione del credito.
I file ad accesso casuale
Creare un file ad accesso casuale
Scrivere i dati in modo casuale in un file ad accesso casuale
Leggere i dati in modo casuale da un file ad accesso casuale
Studio di un caso: un programma per l'elaborazione delle transazioni
Approfondimenti sulla ricorsione ed esercizi: fattoriale ricorsivo, Fibonacci, ricerca binaria ricorsiva e Torre di Hanoi.
Puntatori: introduzione
dichiarazione e inizializzazione
operatore di indirizzo (&) e operatore di dereferenziazione (*)
passaggio per valore e per riferimento
puntatori come parametri di funzioni
Esercizi: dichiarazione e stampa dei valori contenuti in variabili e puntatori, elevare al cubo una variabile (chiamata per valore e chiamata per riferimento), trovare il massimo e il minimo di un vettore usando il passaggio per riferimento.
Puntatori:
puntatori const,
operatori sui puntatori,
esercizio bubble sort con puntatori,
esercizio bubble sort in ordine crescente e decrescente usando puntatori a funzione,
Array multidimensionali ed esercizio mescola carte
esercitazione autonoma, assistita dal docente; correzione collettiva dell'esercitazione svolta. Preparazione al 2^ esonero.
Esercitazione e Simulazione 2^ esonero

Modalità d'esame

Una prima prova di valutazione intermedia, con valore esonerante, si tiene in prossimità della settimana di interruzione delle lezioni, normalmente collocata intorno alla metà di novembre. La prova consiste nella soluzione di un problema, individuando l'algoritmo e sviluppando il relativo programma in C, analogamente a quanto spiegato nel corso delle lezioni. Il voto sarà espresso in trentesimi.
Una seconda prova di valutazione intermedia, con valore esonerante, si tiene immediatamente prima o dopo le vacanze natalizie, in base all'andamento del corso. La seconda prova consiste in un test a risposta multipla chiusa, in particolare saranno somministrate circa 50 domande e il tempo previsto è di norma 30 minuti. Ogni risposta errata verrà penalizzata con 0,25/50esimi di punto. Il risultato ottenuto viene normalizzato a 30.
Il voto risultante dalla media dei voti ottenuti nelle due prove di esonero viene proposto dal docente per essere verbalizzato. I voti dell'esonero possono essere utilizzati esclusivamente nella prima sessione di esami (gennaio/febbraio).
Lo studente può, se preferisce, integrare l'esame con una prova orale.
La votazione è in trentesimi.
Gli studenti che scelgono di non partecipare alle prove di valutazione intermedie, ovvero non le superano, sostengono l'esame a partire da gennaio. La prova di teoria, se sostenuta e superata nella valutazione intermedia, può essere utilizzata dallo studente come prova di teoria dell'esame regolare.
La modalità della prova d'esame regolare è analoga a quella descritta sopra per le due prove intermedie (prova scritta e test).
Materiali permessi per sostenere la prima prova di valutazione intermedia e la prova scritta d'esame: testo di riferimento in formato esclusivamente cartaceo.
I risultati di tutte le prove vengono comunicati in lista pubblica per email o sul gruppo del corso. Il voto finale conseguito viene proposto esclusivamente sulla piattaforma Esse3.
Incentivi alla frequenza: l'eventuale lode viene più frequentemente attribuita agli studenti che per la stragrande maggioranza delle lezioni hanno frequentato, interagito nel corso della lezione, proposto soluzioni e risolto i casi proposti dal docente a lezione.
Voto - descrittori:
< 18 insufficiente: Conoscenze frammentarie e superficiali dei contenuti, errori nell’applicare i concetti, descrizione carente.
18 - 20: Conoscenze dei contenuti sufficienti ma generali, descrizione semplice, incertezze nell’applicazione di concetti teorici.
21 - 23: Conoscenze dei contenuti appropriate ma non approfondite, capacità di applicare i concetti teorici, capacità di presentare i contenuti in modo semplice.
24 - 25 Conoscenze dei contenuti appropriate ed ampie, discreta capacità di applicazione delle conoscenze, capacità di presentare i contenuti in modo articolato.
26 - 27: Conoscenze dei contenuti precise e complete, buona capacità di applicare le conoscenze, capacità di analisi, descrizione chiara e corretta.
28 - 29: Conoscenze dei contenuti ampie, complete ed approfondite, buona applicazione dei contenuti, buona capacità di analisi e di sintesi, descrizione sicura e corretta.
30 - 30 e lode: Conoscenze dei contenuti molto ampie, complete ed approfondite, capacità ben consolidata di applicare i contenuti, ottima capacità di analisi, di sintesi e di collegamenti interdisciplinari, padronanza della descrizione.

Testi di riferimento

P. Deitel e H. Deitel
Il linguaggio C – Fondamenti e tecniche di programmazione
8^edizione
Pearson 2016
ISBN: 9788891901651
(vanno bene anche le edizioni successive e precedenti dalla 4^ in poi)
Gli studenti che lo desiderano possono ottenere i testi in prestito dalla Biblioteca. Può convenire verificarne la disponibilità mediante il Sistema Bibliotecario di Ateneo https://opac.uniba.it/easyweb/w8018/index.php? e contattare la biblioteca per concordare il prestito.

Codice insegnamento UC450435

Sistemi Operativi 1° anno · 2° semestre · 9 CFU · IINF-05/A · 0 file

L'insegnamento ha l'obiettivo di fornire agli studenti una conoscenza sistematica dei principi, delle architetture e dei principali meccanismi di funzionamento dei moderni sistemi operativi. Il corso approfondisce il…

Scheda dell'insegnamento

Obiettivi formativi

L'insegnamento ha l'obiettivo di fornire agli studenti una conoscenza sistematica dei principi, delle architetture e dei principali meccanismi di funzionamento dei moderni sistemi operativi. Il corso approfondisce il ruolo del sistema operativo come intermediario tra hardware, applicazioni e utenti, nonché come gestore delle risorse di elaborazione.
Al termine del corso, lo studente dovrà comprendere i principali modelli architetturali dei sistemi operativi, i meccanismi di gestione di processi e thread, le politiche e gli algoritmi di scheduling, le problematiche di concorrenza e sincronizzazione, la gestione degli stalli, le tecniche di gestione della memoria centrale e virtuale, nonché l'organizzazione, l'implementazione, l'affidabilità, le prestazioni e la protezione dei file system.
Lo studente dovrà inoltre essere in grado di analizzare e confrontare differenti politiche e algoritmi di gestione delle risorse, comprenderne vantaggi, limitazioni e compromessi progettuali e applicare i concetti acquisiti alla risoluzione di problemi relativi al funzionamento dei sistemi operativi.

Al termine dell'insegnamento, lo studente avrà acquisito conoscenza e capacità di comprensione dei principi fondamentali di funzionamento e progettazione dei sistemi operativi. In particolare, comprenderà le funzioni del kernel e dei servizi di sistema, i modelli di processo e thread, gli stati dei processi e il context switching, i diversi livelli e algoritmi di scheduling, i meccanismi di concorrenza e sincronizzazione, le problematiche di deadlock, i principali schemi di gestione della memoria e della memoria virtuale e i principi di organizzazione, implementazione, affidabilità, prestazioni e protezione dei file system.
Lo studente sarà inoltre in grado di comprendere i principali compromessi tra efficienza, equità, overhead, protezione, affidabilità e semplicità progettuale che caratterizzano le diverse soluzioni adottate nei sistemi operativi.

Lo studente sarà in grado di applicare le conoscenze acquisite per analizzare il comportamento di processi e thread e le relative transizioni di stato; valutare e confrontare algoritmi di scheduling mediante opportuni indicatori di prestazione; riconoscere situazioni di concorrenza, race condition, starvation e deadlock; analizzare grafi di allocazione delle risorse e stati sicuri; utilizzare concettualmente semafori e monitor per risolvere problemi di sincronizzazione.
Sarà inoltre in grado di analizzare schemi di allocazione della memoria, segmentazione, paginazione e memoria virtuale; valutare il comportamento degli algoritmi di sostituzione delle pagine; e confrontare differenti tecniche di organizzazione, allocazione, gestione e protezione dei file system.
Lo studente sarà quindi in grado di selezionare e motivare una soluzione algoritmica o architetturale appropriata rispetto alle caratteristiche di uno specifico problema di gestione delle risorse.

Autonomia di giudizio: lo studente sarà in grado di confrontare criticamente differenti architetture, algoritmi e politiche di gestione delle risorse, valutandone vantaggi, limitazioni e compromessi in termini di prestazioni, equità, overhead, affidabilità, protezione e complessità.
Abilità comunicative: lo studente sarà in grado di descrivere con terminologia tecnica appropriata il funzionamento dei principali componenti di un sistema operativo, motivare le proprie scelte progettuali e rappresentare problemi e soluzioni mediante diagrammi degli stati, grafi di allocazione delle risorse, schemi di memoria e pseudocodice.
Capacità di apprendimento: lo studente svilupperà la capacità di approfondire autonomamente nuove architetture, meccanismi e algoritmi di sistema operativo, interpretando documentazione tecnica e mettendo in relazione nuove soluzioni con i principi fondamentali acquisiti durante il corso.

Programma

Il corso tratta i principi fondamentali e i principali meccanismi dei sistemi operativi moderni.
Introduzione e architettura dei sistemi operativi: ruolo e funzioni del sistema operativo; hardware, programmi applicativi e programmi di sistema; kernel; interfacce utente; shell e GUI; chiamate di sistema e API; servizi di sistema; obiettivi di progettazione; meccanismi e politiche; strutture monolitiche, a livelli, microkernel, modulari e ibride.
Processi e scheduling: multiprogrammazione; concetto di processo; Process Control Block (PCB); creazione e terminazione dei processi; stati e transizioni dei processi; code di scheduling; context switch; modalità utente e kernel; scheduler di lungo, medio e breve termine; processi CPU-bound e I/O-bound; scheduling preemptive e non-preemptive; tempo di attesa e tempo di ricircolo; algoritmi FCFS, Event Driven, Round Robin, HRRN, SPN/SRTF, code multiple e code multiple con feedback.
Thread e multiprocessori: thread e multithreading; differenze tra processi e thread; Thread Control Block; vantaggi e problematiche del multithreading; User-Level Thread, Kernel-Level Thread e modelli misti; Symmetric Multiprocessing (SMP); problematiche di scheduling, sincronizzazione e memoria condivisa nei sistemi multiprocessore; caratteristiche e funzioni dei microkernel.
Gestione delle risorse, concorrenza e sincronizzazione: grafi di allocazione delle risorse; deadlock e relative condizioni; rilevazione, eliminazione, prevenzione ed avoidance del deadlock; stati sicuri e insicuri; algoritmo del banchiere; sezioni critiche, mutua esclusione, race condition, livelock e starvation; algoritmo di Dekker; supporti hardware alla sincronizzazione; test-and-set e swap; semafori binari e contatori; problema produttore-consumatore; monitor.
Gestione della memoria: allocazione contigua e non contigua; monoallocazione; partizionamento statico e dinamico; swapping; frammentazione e compattazione; meccanismi di protezione e condivisione; segmentazione; paginazione; traduzione degli indirizzi e cache di traduzione; memoria virtuale; page fault; località dei programmi; strategie di allocazione e sostituzione; algoritmi FIFO, LRU, Belady e NRU; working set.
File system e protezione: file, denominazione, struttura, tipi, formati, attributi e modalità di accesso; operazioni sui file e file mappati in memoria; directory e pathname; implementazione del file system; allocazione contigua, concatenata, indicizzata e mediante i-node; implementazione delle directory; gestione dello spazio libero su disco; affidabilità, blocchi danneggiati, backup e consistenza; caching e prestazioni; scheduling del disco mediante FCFS, SSF e algoritmo dell'ascensore; domini di protezione, diritti di accesso, Access Control List, capability list e meccanismi di protezione nei sistemi UNIX.

Modalità d'esame

La verifica dell'apprendimento è finalizzata ad accertare la conoscenza e la comprensione dei principi fondamentali dei sistemi operativi e la capacità dello studente di applicarli all'analisi e alla risoluzione di problemi.
La verifica comprende quesiti sugli aspetti teorici del corso e problemi di carattere applicativo relativi, tra gli altri, alla gestione e agli stati dei processi, agli algoritmi di scheduling, alla sincronizzazione e alla gestione della concorrenza, ai deadlock, alla gestione della memoria e della memoria virtuale e all'organizzazione dei file system.
La valutazione tiene conto della correttezza delle conoscenze acquisite, della capacità di utilizzare appropriatamente la terminologia tecnica, della capacità di motivare le soluzioni adottate e di confrontare criticamente differenti algoritmi e strategie di gestione delle risorse.

Testi di riferimento

Materiale didattico e slide delle lezioni forniti dal docente. Ulteriore materiale di approfondimento potrà essere indicato durante lo svolgimento del corso.

Codice insegnamento UC450439

Basi di Dati 2° anno · 1° semestre · 9 CFU · IINF-05/A · 0 file

L’insegnamento si propone di fornire agli studenti le conoscenze teoriche e pratiche fondamentali relative ai sistemi di basi di dati e ai sistemi per la loro gestione (DBMS). In particolare, il corso mira a fornire le…

Scheda dell'insegnamento

Obiettivi formativi

L’insegnamento si propone di fornire agli studenti le conoscenze teoriche e pratiche fondamentali relative ai sistemi di basi di dati e ai sistemi per la loro gestione (DBMS).
In particolare, il corso mira a fornire le competenze necessarie per progettare, realizzare e interrogare basi di dati, con particolare riferimento al modello relazionale.
Gli studenti acquisiranno conoscenze relative ai modelli e ai linguaggi per basi di dati, alle metodologie di progettazione concettuale e logica e all’utilizzo del linguaggio SQL per la definizione, la manipolazione e l’interrogazione dei dati.
L’insegnamento mira inoltre a sviluppare la capacità di affrontare in modo metodologico le diverse fasi della progettazione di una base di dati, a partire dall’analisi dei requisiti fino alla sua implementazione in un DBMS.

Al termine dell’insegnamento, lo studente avrà acquisito conoscenze e capacità di comprensione relative ai principi fondamentali dei sistemi di basi di dati e dei sistemi di gestione di basi di dati (DBMS), con particolare riferimento al modello relazionale.
Lo studente conoscerà i principi e le metodologie della progettazione concettuale e logica delle basi di dati, il modello Entità-Relazione, l’algebra e il calcolo relazionale, i principi della normalizzazione e il linguaggio SQL per la definizione, la manipolazione e l’interrogazione dei dati.

Al termine dell’insegnamento, lo studente sarà in grado di applicare le conoscenze acquisite alla progettazione e all’interrogazione di basi di dati relazionali.
In particolare, sarà in grado di analizzare i requisiti di un problema, progettare uno schema concettuale mediante il modello Entità-Relazione, ristrutturarlo e tradurlo nel modello relazionale. Sarà inoltre in grado di applicare i principi della normalizzazione, formulare interrogazioni mediante l’algebra relazionale e utilizzare il linguaggio SQL per la definizione, la manipolazione e l’interrogazione dei dati.

Autonomia di giudizio
Lo studente sarà in grado di analizzare un problema di progettazione di basi di dati e di valutare autonomamente le scelte più appropriate per la sua modellazione e implementazione, confrontando possibili soluzioni alternative.
Abilità comunicative
Lo studente sarà in grado di descrivere con chiarezza e utilizzando una terminologia appropriata le scelte effettuate nella progettazione di una base di dati e di rappresentare correttamente gli schemi concettuali e logici prodotti.
Capacità di apprendimento
Lo studente svilupperà la capacità di affrontare autonomamente problemi di progettazione e interrogazione di basi di dati, applicando le conoscenze e le metodologie acquisite durante il corso anche a problemi e contesti differenti.

Programma

1. Introduzione ai sistemi di basi di dati

  • Introduzione alle basi di dati e ai sistemi informativi.
  • Basi di dati e sistemi di gestione di basi di dati (DBMS).
  • Modelli dei dati.
  • Livelli di astrazione nei DBMS.
    2. Basi di dati relazionali
  • Il modello relazionale: relazioni, attributi, tuple e domini.
  • Vincoli di integrità, chiavi e integrità referenziale.
  • Informazione incompleta e valori nulli.
  • Algebra relazionale: operatori fondamentali e derivati.
  • Calcolo relazionale.
  • Viste.
  • Linguaggio SQL: definizione, interrogazione e manipolazione dei dati.
  • Interrogazioni semplici e complesse, operatori insiemistici, join, raggruppamenti e funzioni aggregate.
  • Vincoli di integrità e viste in SQL.
    3. Progettazione di basi di dati
  • Ciclo di vita e metodologie di progettazione delle basi di dati.
  • Analisi e raccolta dei requisiti.
  • Progettazione concettuale e modello Entità-Relazione (E-R).
  • Strategie e criteri di progettazione concettuale.
  • Progettazione logica.
  • Ristrutturazione degli schemi E-R.
  • Traduzione dal modello E-R al modello relazionale.
  • Ridondanze, anomalie e dipendenze funzionali.
  • Normalizzazione e forme normali.
    Esercitazioni e laboratorio
  • Esercitazioni di algebra relazionale.
  • Esercitazioni di progettazione concettuale e logica.
  • Esercitazioni sulla normalizzazione.
  • Esercitazioni su interrogazione di basi di dati mediante SQL.

Modalità d'esame

La verifica dell’apprendimento può avvenire attraverso due prove scritte in itinere, svolte durante il periodo di erogazione dell’insegnamento. Il superamento di entrambe le prove consente di conseguire la valutazione finale senza sostenere la prova d’esame al termine del corso. Ciascuna prova è valutata in trentesimi e il voto finale è determinato dalla media delle valutazioni conseguite nelle due prove.
Gli studenti che non sostengono o non superano entrambe le prove in itinere devono sostenere una prova scritta a carattere pratico, valutata in trentesimi, volta a verificare la capacità di applicare le conoscenze e le metodologie acquisite durante il corso.
La prova comprende esercizi relativi alla modellazione concettuale mediante il modello Entità-Relazione (E-R), alla ristrutturazione degli schemi E-R e alla loro traduzione nel modello relazionale, all’algebra relazionale, alla normalizzazione e alla formulazione di interrogazioni in linguaggio SQL.
La valutazione tiene conto della correttezza delle soluzioni proposte, della padronanza dei concetti e delle metodologie del corso e della capacità di applicarli correttamente alla progettazione e all’interrogazione di basi di dati.
Il voto finale è espresso in trentesimi.

Testi di riferimento

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone, Basi di dati, 6ª edizione, McGraw-Hill.

Codice insegnamento UC450445

Calcolo Numerico 2° anno · 2° semestre · 6 CFU · MATH-05/A · 0 file

Il corso si propone come raccordo costruttivo fra la matematica e l'informatica, fornendo allo studente gli strumenti specifici di base per risolvere i problemi matematici usando il calcolatore mettendo in evidenza i…

Scheda dell'insegnamento

Obiettivi formativi

Il corso si propone come raccordo costruttivo fra la matematica e l'informatica, fornendo allo studente gli strumenti specifici di base per risolvere i problemi matematici usando il calcolatore mettendo in evidenza i rischi che si corrono con un uso ingenuo delle risorse di calcolo. Il corso presenta i metodi fondamentali per risolvere numericamente problemi matematici, mettendo in evidenza gli aspetti computazionali. Il programma comprende i metodi iterativi per equazioni non lineari, i metodi diretti per sistemi lineari, interpolazione, approssimazione, integrazione e calcolo di autovalori

  • Conoscere le tecniche e i metodi per la programmazione numerica finalizzati alla risoluzione di problemi nell'ambito delle discipline matematiche ed affini, con particolare enfasi ai problemi fondamentali nell'ambito dell'algebra lineare.
    -Comprendere e saper illustrare le problematiche relative dell’uso del calcolatore per la risoluzione di problemi matematici
  • Capacità di risolvere problemi matematici mediante algoritmi ottimizzati dal punto di vista del costo computazionale e della stabilità.
  • Sviluppo delle capacità di programmare, documentare e testare algoritmi numerici, interpretandone correttamente i risultati.
  • Sviluppo delle capacità di risolvere problemi matematici usando problem solving enviroments.
  • Autonomia di giudizio: Saper individuare il metodo numerico più idoneo per risolvere numericamente un problema matematico tra quelli trattati nel corso.
  • Abilità comunicative: Saper definire in modo rigoroso i problemi matematici trattati nel corso e saper esporre i relativi metodi numerici, delineandone le proprietà fondamentali.
  • Capacità di apprendere in modo autonomo: Capacità di studiare e risolvere problemi numerici simili ma non necessariamente uguali a quelli affrontati durante le lezioni.

Programma

1.Introduzione al Calcolo Scientifico
Modelli matematici e metodi numerici, sorgenti di errori, il processo di risoluzione numerica, efficienza, testing, errori computazionali, ambienti computazionali, linguaggi per il calcolo scientifico, problem solving enviroments: MATLAB, PYTHON.
2. Analisi dell'errore.
Rappresentazione dei numeri. IEEE singola e doppia precisione. Troncamento e Arrotondamento. Precisione di macchina. Errore assoluto e relativo. Operazioni con i numeri di macchina. Cancellazione di cifre significative. Condizionamento di un problema. Stabilità degli algoritmi. Propagazione degli errori. Introduzione a Python, il linguaggio, file di tipo script e function. Funzioni predefinite in NumPy. Introduzione alla grafica. Esempi Python sugli errori di arrotondamento.
3. Elementi di algebra lineare
Matrici e vettori. Operazioni con matrici. Inversa di una matrice. Sistemi lineari. Prodotto esterno fra vettori. Dipendenza lineare di vettori. Autovalori e autovettori. Norme di vettori e matrici. Spazi vettoriali lineari. Base di uno spazio vettoriale. Trasformazioni lineari e matrici. Sottospazi vettoriali. Spazio vettoriale generato da un insieme di vettori. Nucleo e immagine di una trasformazione lineare. Sottospazio ortogonale.
4. Algoritmi per la soluzione di sistemi lineari
Il Python per l'algebra lineare, Memorizzazioni di vettori e matrici, operazioni sulle matrici. Sistemi triangolari inferiori e superiori. Matrici di permutazione e proprietà. Algoritmo di eliminazione di Gauss. Problematiche di stabilità. Teorema di esistenza della fattorizzazione LU con pivot. Studio del condizionamento di un sistema lineare. Studio del residuo. Metodo dei minimi quadrati. Pseudoinversa. Esempi di codici Python, documentazione e testing, confronti con il software esistente.
5. Interpolazione e approssimazione
Base delle potenze. Interpolazione di Lagrange. Interpolazione di Newton. Differenze divise. Interpolazione con nodi coincidenti. Interpolazione di Hermite. Errore nell'interpolazione polinomiale. Scelta dei nodi per l'interpolazione. Studio del condizionamento. Interpolazione lineare a tratti. Spline lineare. Approssimazione ai minimi quadrati nel discreto. Fitting di dati: polinomio di migliore approssimazione nel senso dei minimi quadrati. Retta di regressione lineare. Esempi di codici Python, documentazione e testing, confronti con il software esistente.
6. Calcolo degli zeri di funzione
Metodo delle bisezioni. Convergenza. Criteri di arresto e stime dell'errore. Ordine di convergenza. Iterazione funzionale. Teorema di contrazione. Ordine di convergenza. Il metodo di Newton. Criteri di stop. Metodi quasi newtoniani. Metodo della direzione costante. Metodo della falsa posizione. Il metodo delle secanti. Metodo di Brent. Errore accuratezza e numero di condizione. Esempi di codici Matlab, documentazione e testing, confronti con il software esistente.
7. Calcolo degli autovalori.
Metodo delle potenze. Applicazione Sistemi di Raccomandazione e Clustering spettrale. Esempi di codici Matlab.

Modalità d'esame

L'esame consiste in una prova scritta che verterà su tutti gli argomenti svolti a lezione, inclusi le parti teoriche (definizioni, teoremi e dimostrazioni) e gli esercizi ad esse relative. La prova scritta così strutturata consente di raggiungere un punteggio massimo di 26/30. A tale prova scritta, lo studente può aggiungere la parte orale che è opzionale. Nella parte orale si prevede la discussione di codici di calcolo scientifico, assegnati una settimana prima della data dell’appello. Durante il ciclo di lezioni, sono previsti due esoneri. Il voto massimo per entrambi gli esoneri è 26/30. Gli studenti che hanno superato entrambi gli esoneri con una votazione superiore a 18, ottengono come voto finale la media dei voti dei due esoneri. L’eventuale parte orale (opzionale) riguarda la discussione di codici assegnati una settimana prima della data dell’appello. Gli studenti che hanno superato, o sostenuto, un solo esonero possono recuperare la parte mancante in una qualunque data predisposta per gli appelli estivi. L’esonero sostenuto verrà conservato per tutta la durata della sessione estiva: giugno-settembre.

Testi di riferimento

Uri M. Ascher, Chen Greif, A First Course in Numerical Methods, SIAM, 2011 (testo di riferimento)
Joakim Sundnes, Introduction to Scientific Programming with Python, SIMULA, Springer Open
Annamaria Mazzia, Laboratorio di Calcolo Numerico, Applicazioni con MATLAB e Octave, Pearson Education Inc, 2014

Codice insegnamento UC450459

Ingegneria del Software 2° anno · 2° semestre · 9 CFU · INFO-01/A · 0 file
Interazione Persona-Macchina* 2° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file

L’insegnamento di Interazione Persona-Macchina affronta la progettazione di sistemi software interattivi che uniscano solidità funzionale, sicurezza, efficienza e un’elevata qualità dell’esperienza d’uso.…

Scheda dell'insegnamento

Obiettivi formativi

L’insegnamento di Interazione Persona-Macchina affronta la progettazione di sistemi software interattivi che uniscano solidità funzionale, sicurezza, efficienza e un’elevata qualità dell’esperienza d’uso. L’insegnamento adotta un approccio sistemico e centrato sull’utente: oltre allo sviluppo di interfacce efficaci, pone forte enfasi sull’analisi preliminare dei bisogni, dei processi cognitivi e dei contesti operativi in cui le persone interagiscono con la tecnologia.
Al termine del corso, lə studentə avrà acquisito i principi, i paradigmi e le tecnologie fondamentali per:

  • Analizzare il contesto d’uso e la natura dei task richiesti dagli utenti.
  • Progettare interfacce utente (User Interfaces, o UI), User eXperience (UX) e flussi di interazione intuitivi, accattivanti e accessibili.
  • Valutare rigorosamente l’usabilità dei sistemi interattivi attraverso tecniche qualitative e quantitative.

Il principale risultato di apprendimento atteso consiste nell’acquisizione di conoscenze approfondite relative a:

  • Fondamenti dell’interazione: principi, paradigmi, metodologie, tecniche e tecnologie essenziali per la progettazione di sistemi centrati sulla persona.
  • Qualità percepita: caratteristiche del software che risultano determinanti dal punto di vista dell’utente finale, con particolare enfasi sull’usabilità e sulla User eXperience (UX).
    Lə studentə matura tali competenze attraverso la frequenza delle lezioni frontali e la potenziale partecipazione a seminari tematici. Lo svolgimento di esercitazioni pratiche, sia individuali che in laboratorio, permette inoltre di applicare concretamente le nozioni teoriche. Questo approccio favorisce l’autovalutazione, consentendo allə studentə di verificare in tempo reale i propri progressi e di individuare le strategie più efficaci per consolidare la propria capacità di comprensione.

Per consentire allə studentə di applicare la conoscenza acquisita, essə svolge:

  • esercitazioni individuali e in laboratorio.
  • un caso di studio, nel quale deve applicare alcune delle tecniche presentate a lezione, selezionando quelle più adeguate allo specifico caso.
    La valutazione delle esercitazioni svolte in aula e del caso di studio contribuisce alla valutazione finale dellə studentə e quindi al voto conseguito all’esame di profitto.

Autonomia di giudizio
Obiettivo importante del corso è che lə studentə raggiunga una significativa autonomia di giudizio per quanto riguarda:
1) le scelte di compromesso relativamente alle qualità del software da enfatizzare nel prodotto da sviluppare;
2) ulteriori scelte da operare durante la progettazione e lo sviluppo dei moduli di un sistema software relativi all’interazione con le persone;
3) la gestione delle problematiche relative all’uso di tecniche di progettazione e valutazione di usabilità e UX durante il processo di sviluppo del software.
Abilità comunicative
Lə studentə è stimolato a lavorare in gruppo ed è spesso invitatə a illustrare il risultato di esercizi svolti autonomamente o in gruppo, proprio con l’obiettivo di sviluppare le sue abilità comunicative. A questo scopo, allə studentə è anche richiesto di sviluppare casi di studio in gruppo, in cui applicare alcune delle tecniche che ha appreso, eventualmente selezionando quelle che ritiene più appropriate (in base alla sua autonomia di giudizio). Per lə studentə che frequenta la presentazione di casi di studio può avvenire durante il semestre; per lə studentə che non frequenta è parte della prova orale d’esame e consente allə studentə di mostrare le proprie abilità comunicative, visto che deve illustrare il lavoro svolto, eventualmente utilizzando delle slide che ha predisposto, secondo le indicazioni della docente.
Capacità di apprendere in modo autonomo
Per stimolare la capacità di apprendere in modo autonomo, allə studentə è consigliato, oltre al libro di testo principale, altri testi in cui approfondire alcuni specifici argomenti, alcuni non trattati in dettaglio dalla docente, sui quali lə studentə può poi discutere a lezione e riferire anche durante l’esame. Lə studentə può essere invitatə a partecipare a eventi o seminari tenuti da altrə docentə, interni o in visita al dipartimento, e nelle lezioni successive è richiesto allə studentə di discutere il contenuto di tali seminari.

Programma

Modulo 1. Sistemi interattivi e interfacce d’uso (4 ore)

  • Le dimensioni della complessità
  • La diversità degli utenti
  • La velocità del cambiamento
  • Il ruolo dell’interfaccia utente
  • La Human Computer Interaction
    Modulo 2. Usabilità (10 ore)
  • Un modello dell’interazione
  • Affordance e feedback
  • Usabilità
  • User Experience (UX)
  • Standard ISO per l’usabilità, per la User Experience e per la qualità dei sistemi interattivi
  • Obiettivi di usabilità e UX
  • Usabilità universale
  • Accessibilità
    Modulo 3. L’ingegneria dell’usabilità (6 ore)
  • Le diverse ingegnerie
  • Il modello “a cascata”
  • Il ciclo compito-artefatto
  • Modelli iterativi
  • Progettazione human-centred
  • Il modello ISO 9241-210
  • UCD Sprint
  • Design thinking
  • Il ruolo dell’utente nel processo di progettazione
  • Costi e benefici
    Modulo 4. Raccolta dei dati (6 ore)
  • Che cosa sono i requisiti di prodotto
  • Il processo di definizione dei requisiti
  • Osservazioni sul campo
  • Interviste
  • Questionari
  • Focus group
  • Suggerimenti spontanei degli utenti
  • Analisi della concorrenza
  • Scenari d’uso
  • I casi d’uso
    Modulo 5. I prototipi (4 ore)
  • Che cos’è un prototipo
  • Tipi di prototipi
    Modulo 6. Principi e linee guida (5 ore)
  • Principi, linee guida, regole di progetto, standard
  • Gli standard della human-system interaction
  • I principi del dialogo secondo la ISO 9241-110
    Modulo 7. Progettare per l’errore (3 ore)
  • L’errore umano
  • Prevenzione
  • Diagnosi
  • Correzione
    Modulo 8. Interaction design (12 ore)
  • Design dell’interazione e comunicazione visiva
  • Le leggi della Gestalt
  • I manuali di stile
  • Design pattern
    Modulo 9. Valutare l’usabilità (12 ore)
  • Verifiche e convalide
  • Valutazioni euristiche
  • Test di usabilità
  • Test formativi e test sommativi
  • Test di compito e test di scenario
  • Misure
  • Come condurre un test di usabilità
  • Il rapporto di valutazione
  • Test di usabilità: costi e benefici
  • Altre tecniche di valutazione
    Esercitazioni: Applicazione dei metodi presentati durante le lezioni.
    Caso di studio: Progettazione human-centered di un prototipo di un sistema in un dominio a scelta dellə studentə (con particolare attenzione all’analisi dei requisiti utente, alla generazione di prototipi con Figma e alle valutazioni di usabilità con studi con utenti ed ispezioni).

Modalità d'esame

La verifica dei risultati formativi si articola in due prove principali:

  • Presentazione del caso di studio (Prova orale e di gruppo): un colloquio in cui l’intero gruppo illustra il progetto realizzato.
  • Prova scritta: un test che comprende domande a risposta chiusa e aperta sul programma di insegnamento.
    Propedeuticità e scadenze
  • Priorità: La presentazione del caso di studio è propedeutica e indispensabile per poter sostenere la successiva prova scritta.
  • Consegna: Il materiale relativo al caso di studio deve essere inviato tramite la piattaforma di e-learning 7 giorni prima della data fissata per la presentazione.
  • Validità: Il voto acquisito con il caso di studio rimane valido per tutti gli appelli dell’anno accademico 2026-2027.
  • Prenotazione: Lə studentə deve sempre prenotarsi agli appelli tramite il portale ESSE3 entro la scadenza prevista (usualmente 4 giorni prima della prova). Su ESSE3 l’esame è diviso in due voci distinte, che possono svolgersi in giorni diversi: “Presentazione caso di studio” (sezione Prove parziali) e “Prova scritta” (sezione Appelli).
    Svolgimento e Valutazione della Prova Scritta
    La prova si svolge presso le aule del Dipartimento di Informatica in un arco temporale massimo di 180 minuti. All’inizio della sessione, la docente richiama le modalità d’esame e illustra il testo della prova. Dal momento in cui viene dato il via allo svolgimento, lə studentə ha a disposizione 150 minuti effettivi.
    NOTA 1 (sulla valutazione della prova scritta):
    La prova scritta comprende domande a risposta aperta e chiusa. Per ogni domanda aperta è indicato il punteggio corrispondente. Le domande chiuse sono così valutate: risposta corretta vale 0,5p, la risposta sbagliata -0,25p, risposta non data 0p.
    Esclusivamente per i primi 3 appelli dei mesi di gennaio e febbraio, la prova scritta sarà valutata in trentesimi (su base 30). Per tutti i restanti appelli dell’anno accademico 2026-2027, la prova scritta sarà valutata in ventisettesimi (su base 27).
    NOTA 2 (sulla valutazione del caso di studio):
    Il caso di studio da svolgere è descritto sulla piattaforma relativa al corso. Al caso di studio viene attribuito un punteggio da 1 a 5. Tale punteggio si somma al voto della prova scritta solo quando la prova scritta individuale raggiunge o supera la sufficienza, determinando così il voto finale. Le domande della prova scritta hanno un punteggio totale di 27. Se il voto finale raggiunge o supera 32, viene attribuita la lode.
    Il punteggio del caso di studio viene conservato per tutti gli appelli dell’a.a. 2026-2027 in cui il caso di studio è presentato, così lə studentə può scegliere qualunque di tali appelli per svolgere il proprio esame.

Testi di riferimento

Libro 1. R. Polillo, Facile da usare – Una moderna introduzione all’ingegneria dell’usabilità, Edizioni Apogeo, giugno 2010.

  • Capitolo 1. Sistemi interattivi e interfacce d’uso
  • Capitolo 3. Usabilità
  • Capitolo 6. L’ingegneria dell’usabilità
  • Capitolo 7. I requisiti
  • Capitolo 9. I prototipi
  • Capitolo 10. Principi e linee guida
  • Capitolo 11. Progettare per l’errore
  • Capitolo 12. Progettare per la grafica
  • Capitolo 14. Valutare l’usabilità
    Libro 2. Sharp, H., Rogers, Y.; Preece, J. (2021). Interaction design. Oltre l’interazione uomo-macchina.
  • Capitolo 1. Interaction Design
  • Capitolo 7. Interfacce
  • Capitolo 12. Design, prototipazione e costruzione
    Lə studentə che lo desidera può ottenere i testi in prestito dalla Biblioteca. Può convenire verificarne la disponibilità mediante il Sistema Bibliotecario di Ateneo https://opac.uniba.it/easyweb/w8018/index.php e contattare la biblioteca per concordare il prestito.
    Nota ai testi di riferimento: Sulla piattaforma elearning la docente mette a disposizione dellə studentə le slide utilizzate in aula ed eventuale altro materiale didattico a supporto delle lezioni.
    Testo consigliato per approfondire specifici argomenti:
  • Caffettiera del masochista. Il design degli oggetti quotidiani, Donald Norman, Giunti Editori

Codice insegnamento UC450451

Programmazione II 2° anno · 1° semestre · 9 CFU · INFO-01/A · 0 file

1. Conoscenza di una metodologia di progetto formale basata sulla astrazione dei dati. 2. Capacità di rappresentare in modo formale diversi tipi di problemi. 3. Rudimenti della programmazione orientata agli oggetti…

Scheda dell'insegnamento

Obiettivi formativi

1. Conoscenza di una metodologia di progetto formale basata sulla astrazione dei dati.
2. Capacità di rappresentare in modo formale diversi tipi di problemi.
3. Rudimenti della programmazione orientata agli oggetti attraverso l’uso di dati astratti.
4. Principi dell’algoritmica, in funzione del modo di utilizzo dello spazio di ricerca: le caratteristiche dei paradigmi selettivo e generativo e selezione di algoritmi fondamentali.

  • Categorizzazione dei problemi mediante spazio di ricerca. Conoscenza dei paradigmi algoritmici selettivo e generativo, delle relative tecniche solutive e dei problemi più noti. Consapevolezza delle possibilità e dei limiti delle metodologie informatiche basate sulla programmazione orientata ad oggetti, indipendentemente dallo specifico ambiente di programmazione.
  • Aspetti essenziali della disciplina che rimangono inalterati a fronte del cambiamento tecnologico, in modo da avere un sistema di riferimento culturale che trascende il tempo e le circostanze.
  • Progettazione efficace di algoritmi mediante la metodologia dei dati astratti. Capacità di progettare e valutare implementazioni alternative in base all'efficienza computazionale. Concetti di base della teoria della complessità e capacità di applicarli in semplici algoritmi di base.
  • Capacità di comprendere i limiti della programmazione imperativa e di cogliere le opportunità offerte dalla programmazione orientata ad oggetti.

Autonomia di giudizio

  • Capacità di valutare la qualità di una soluzione algoritmica in termini di efficienza e possibilità di riutilizzo. Capacità di valutare criticamente quanto appreso, formulando un proprio punto di vista ed essendo in grado di sostenerlo.
    Abilità comunicative
  • Adeguata appropriatezza espressiva e capacità di comunicazione di problematiche inerenti gli studi algoritmici anche ad interlocutori non esperti.
    Capacità di apprendere in modo autonomo
  • Capacita di adattare le conoscenze acquisite anche a nuovi contesti, nonché di aggiornarsi attraverso la consultazione delle fonti specialistiche del settore algoritmico. Capacità di reperire e consultare materiale bibliografico, di sintetizzarne i contenuti, anche in inglese, e di utilizzarlo in fase preparazione dell’esame.

Programma

Introduzione e Nozioni di base
· L’astrazione in programmazione e nel ciclo di vita del software
· Astrarre le strutture di dati: le Algebre di dati
· Classificazioni e caratteristiche delle strutture di dati
· Strutture Dati Astratte notevoli
· Liste
· Pile e Code
· Insiemi e Dizionari
· Alberi binari
· Code con priorità
· Alberi binari ed n-ari
· Grafi
Algoritmica
· Cenni sulla analisi della complessità computazionale
· Le tecniche algoritmiche
· Tecniche selettive: enumerativa e backtracking
· Tecniche generative: greedy e divide-et-impera
Esercitazioni guidate e laboratorio (30 ore)

  • Programmazione ad oggetti (linguaggio Java)

Modalità d'esame

  • tipo di valutazione utilizzata: voto in trentesimi
  • modalità di comunicazione dei risultati delle prove: comunicazione diretta in caso di non approvazione del caso di studio
    L’esame si articola in due prove:
  • prova di pratica (idoneità con giudizio indicativo)
  • prova orale (voto in trentesimi)
    Per accedere alla prova orale è necessario aver svolto con valutazione positiva la prova pratica.
    La prova pratica può essere svolta sul computer portatile personale dello studente e consiste nello sviluppo di un programma funzionante che risolva un problema dato facendo uso delle strutture dati astratte e delle tecniche algoritmiche studiate nel corso.
    La prova di laboratorio può essere sostituita, su richiesta dello studente, da un caso di studio. La traccia del caso di studio sarà assegnata dal docente e, salvo diversi accordi, riguarderà la modifica o l’aggiunta di funzionalità in un gioco d’avventura fornito dal docente, facendo uso delle strutture dati astratte e delle tecniche algoritmiche studiate nel corso.
    Il caso di studio si intende rivolto a singoli studenti. Gli studenti interessati devono fare richiesta della traccia un mese circa prima della data d’esame scelta, e consegnare tutto l’elaborato entro l’ottavo giorno precedente la data dell’appello sotto forma di link per scaricare un file ZIP contenente tutto il materiale di progetto (progetto CodeBLOCKS compilabile ed eseguibile, realizzazioni intercambiabili delle strutture dati, documentazione in formato ODT e PDF).
    La prova orale finale è costituita, di norma, da tre domande che possono riguardare sia argomenti di natura teorica che soluzioni di problemi analoghi a quelli trattati durante il corso.
    I progetti sono validi per l’appello per cui sono stati chiesti.
    -
    Criteri di valutazione
    Conoscenza e capacità di comprensione:
  • Chiarezza e completezza delle risposte alle interrogazioni orali
  • Correttezza e perspicacia delle risposte alle domande orali
    Conoscenza e capacità di comprensione applicate:
  • Prova di laboratorio o Caso di studio
  • Chiarezza e completezza della documentazione della prova pratica
    Autonomia di giudizio:
  • Decisioni di progetto prese nella prova pratica
  • Risoluzione di problemi durante la prova orale
    Abilità comunicative:
  • Chiarezza e completezza delle risposte alle domande orali
  • Chiarezza e completezza della documentazione del caso di studio
    Capacità di apprendere:
  • Capacità di identificare le nozioni di base rilevanti per affrontare un nuovo argomento
  • Capacità di eseguire una corretta ricerca delle fonti
    -
    Criteri di misurazione
    dell'apprendimento e di attribuzione del voto finale
    Saranno valutati i risultati di apprendimento previsti in base a:
  • Qualità, completezza ed ampiezza della prova pratica (compresa la documentazione).
  • Chiarezza, correttezza e completezza delle risposte alle domande orali.
  • Capacità di discernimento e di fornire consigli su questioni specifiche sulla base della conoscenza acquisita.
    La prova pratica è valutata in termini di idoneità a sostenere la prova orale, con un giudizio per fasce (insufficiente, sufficiente, buono, ottimo).
    La prova orale è valutata in trentesimi.

Testi di riferimento

Adottati:

  • S. Ferilli “Strutture Dati Astratte ed Algoritmica – con applicazioni ai Giochi d’Avventura”. Boopen, 2025
  • W. Savitch, D. Micucci "Programmazione di base e avanzata con Java", terza edizione, Pearson, ISBN: 9788891916020
    Il testo di Ferilli è adottato integralmente e contiene tutte e sole le nozioni sviluppate all’interno del programma e richieste in sede d’esame.
    Il testo di Savitch et al. è adottato per le parti di laboratorio.

Codice insegnamento UC450448

Reti di Calcolatori* 2° anno · 2° semestre · 9 CFU · INFO-01/A · 0 file

Lo studente apprenderà i concetti fondamentali delle reti di calcolatori e dei servizi e protocolli delle applicazioni di rete, con particolare riferimento alla pila di protocolli TPC/IP. Lo studente inoltre acquisirà la…

Scheda dell'insegnamento

Obiettivi formativi

Lo studente apprenderà i concetti fondamentali delle reti di calcolatori e dei servizi e protocolli delle applicazioni di rete, con particolare riferimento alla pila di protocolli TPC/IP. Lo studente inoltre acquisirà la capacità di effettuare scelte implementative relativamente allo sviluppo di applicazioni client-server che utilizzino le socket per la comunicazione in rete. Infine, lo studente acquisirà i fondamenti della sicurezza in rete.

Conoscenza e capacità di comprensione
Conoscere i concetti fondamentali delle reti di calcolatori.
Conoscere i principali servizi e protocolli per applicazioni di rete. Comprendere i meccanismi di indirizzamento, instradamento e trasporto in Internet
Conoscere i concetti fondamentali della sicurezza di rete.

Conoscenza e capacità di comprensione applicate
Acquisire familiarità con la programmazione in rete basata su interfaccia socket.

Autonomia di giudizio
Mostrare di aver acquisito autonomia di giudizio sulle scelte relative al funzionamento delle reti di calcolatori e dei protocolli di Internet.
Abilità comunicative
Mostrare di essere in grado di comunicare in modo appropriato le caratteristiche tecniche delle reti di calcolatori e dei protocolli di Internet
Capacità di apprendere in modo autonomo
Mostrare di aver sviluppato capacità di intraprendere in autonomia ulteriori approfondimenti su argomenti attinenti le reti di calcolatori e Internet.

Programma

Fondamenti di reti di calcolatori (15 h lezione + 6 h laboratorio)

  • Introduzione alle reti di calcolatori: Definizioni base. Collegamenti diretti e indiretti. Strategie di multiplazione. Commutazione di circuito e di pacchetto. Caratterizzazione delle reti in base alla dimensione. Interconnessione di reti. Misure di prestazione.
  • Architetture a livelli: Stratificazione. Protocolli di rete. Messaggi in una pila di protocolli. Modello di riferimento ISO/OSI. Architettura di Internet.
    Servizi e protocolli per applicazioni di rete (15 h lezione + 9 h laboratorio)
  • Introduzione alle applicazioni di rete: Definizioni base. Modelli client-server e peer-to-peer. Socket API. Scelta del tipo di servizio. Indirizzamento dei processi. Identificazione di un servizio. Concorrenza nei server. Interazione client/server orientata alla connessione e senza connessione. Collaudo di applicazioni di rete
  • Web: Introduzione. Caratteristiche fondamentali. Identificatori di risorsa: URI, URN e URL. Architettura di un browser. Architettura di un server. HTTP: formato di una richiesta e di una risposta, metodi. MIME. Trasmissione di un form. Informazioni di stato: cookies.
  • DNS: Nomi simbolici. Gerarchia dei nomi. Gerarchia dei server DNS. Risoluzione dei nomi. Caching e abbreviazioni. Descrittori di risorsa.
  • Programmazione delle socket
    Programmazione delle socket in C: interazione TCP client-server con le socket; costruire messaggi; funzioni DNS; usare Socket UDP.
    Interconnessione delle reti (16 lezione + 12 h laboratorio)
  • Trasporto in Internet: Il servizio di trasporto in Internet. UDP. Numeri di porta. TCP. Meccanismo di ritrasmissione. Controllo del flusso. Apertura e chiusura di una connessione. Controllo di congestione.
  • Instradamento in Internet: Obiettivo. La funzione di instradamento (routing). Costruzione della tabella di routing. Algoritmi di routing adattivi: distance vector routing e link-state routing. Routing gerarchico.
  • Indirizzamento in Internet: IPv4 datagram. Classi di indirizzi IP. Notazione decimale a punti. Indirizzi speciali e privati. Assegnazione degli indirizzi IP. Subnetting e supernetting. CIDR. Inoltro dei datagrammi IP. DHCP. IPv6. NAT.
    Sicurezza di rete (10 h lezione + 3 h laboratorio)
  • Attacchi alla sicurezza
  • Firewall
  • Sistemi di rilevamento delle intrusioni
  • Principi di crittografia
    Crittografia a chiave simmetrica. Crittografia a chiave pubblica
  • Integrità dei messaggi
    Funzioni hash crittografiche. Codice di autenticazione dei messaggi. Firme digitali
  • Autenticazione end-to-end
  • Sicurezza a livello di applicazione: email
  • Sicurezza a livello di trasporto: SSL
  • Sicurezza a livello di rete: IPsec

Modalità d'esame

L’esame si articola in due prove:

  • prova di laboratorio (idoneità senza voto)
  • prova scritta (voto in trentesimi)
    La prova di laboratorio consiste nel completare un esercizio di programmazione in C con le socket. Esempi di tali programmi possono essere reperiti nel materiale didattico distribuito dal docente sulla piattaforma di e-learning Ada, utilizzata dal Dipartimento di Informatica.
    La prova di laboratorio si svolge in uno dei laboratori didattici del dipartimento, al terzo piano e prevede una durata massima di 2 ore. Durante la prova di laboratorio, lo studente potrà utilizzare il vademecum dei prototipi delle funzioni della libreria Socket API in C messo a disposizione dal docente su Ada.
    Per gli studenti frequentanti è prevista la possibilità di sostenere due prove intermedie di laboratorio consistenti nella consegna di due esercitazioni, una sulle Socket TCP e l’altra sulle Socket UDP. Gli studenti che consegneranno entrambe le assegnazioni in itinere, a fronte della valutazione positiva del docente potranno essere esonerati dalla prova di laboratorio. Anche in questo caso, la validità della prova di laboratorio resta pari all’anno accademico. La prova scritta consiste nel rispondere a un questionario contenente domande a risposta chiusa o aperta. Esempi di quesiti svolti sono reperibili nel materiale didattico rilasciato dal docente su Ada.
    Per sostenere la prova scritta occorre aver superato la prova di laboratorio.
    Lo studente potrà decidere di sostenere la prova di laboratorio e quella scritta in due appelli differenti. In caso di mancato superamento della prova scritta, la prova di laboratorio resta valida per l’intero anno accademico.
    =====
    Voto finale
    Saranno valutati i risultati di apprendimento previsti. La prova di laboratorio è valutata in termini di idoneità a sostenere la prova scritta. La prova scritta è valutata in trentesimi.
    ====
    Criteri di valutazione
    ● Conoscenza e capacità di comprensione:
    Lo studente dovrà dimostrare di conoscere e di aver compreso i concetti fondamentali delle reti di calcolatori, i principali servizi e protocolli per applicazioni di rete, i meccanismi di indirizzamento, instradamento e trasporto in Internet, i concetti fondamentali della sicurezza di rete.
    ● Conoscenza e capacità di comprensione applicate:
    Lo studente dovrà dimostrare di aver acquisito familiarità con la programmazione in rete basata su interfaccia socket. Nella fattispecie, lo studente dovrà dimostrare di essere in grado di progettare e implementare un’applicazione client-server utilizzando la Socket API in C.
    ● Autonomia di giudizio:
    Lo studente dovrà dimostrare di saper formulare un proprio giudizio sulle scelte relative al funzionamento delle reti di calcolatori e dei protocolli di Internet.
    ● Abilità comunicative:
    Lo studente dovrà dimostrare di saper comunicare le conoscenze acquisite nonché motivare le proprie scelte implementative in modo appropriato, con riferimento alle caratteristiche tecniche delle reti di calcolatori e dei protocolli di Internet
    ● Capacità di apprendere:
    Lo studente dovrà dimostrare di aver acquisito la capacità di

Testi di riferimento

Teoria:
J.F. Kurose & K.W. Ross, Reti di calcolatori e Internet - Un approccio top-down, Pearson
Esercitazioni e Laboratori:
M. J. Donahoo, K. L. Calvert, TCP/IP Sockets in C: Practical Guide for Programmers. Morgan Kaufman Publishers.

Codice insegnamento UC450462

Sistemi Informativi 2° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file

L’obiettivo del corso è quello di introdurre il concetto di Sistema Informativo su web partendo dai metodi, dalle metodologie e dalle tecnologie per lo sviluppo di sistemi informativi basati su web. Vengono presentate le…

Scheda dell'insegnamento

Obiettivi formativi

L’obiettivo del corso è quello di introdurre il concetto di Sistema Informativo su web
partendo dai metodi, dalle metodologie e dalle tecnologie per lo sviluppo di sistemi
informativi basati su web. Vengono presentate le caratteristiche fondamentali
dell’uso del web nei sistemi informativi in rete e le architetture principali per la
gestione delle informazioni in ambito principalmente aziendale. Inoltre, ci si
soffermerà sui rapporti che intercorrono tra organizzazione e sistema informativo.

Lo studente dovrà acquisire le competenze relative ai principi fondamentali della
progettazione e gestione dei sistemi informativi e di in particolare dei sistemi
informativi basati su web.

Lo studente dovrà acquisire delle competenze necessarie per lo sviluppo e la
realizzazione di progetti di automazione dei sistemi informativi in ambito aziendale
e nella pubblica amministrazione.

Autonomia di giudizio
Lo studente dovrà dimostrare di aver acquisito una notevole autonomia di giudizio e deve dimostrare di saper gestire situazioni complesse proponendo soluzioni web innovative.
Abilità comunicative
Lo studente dovrà essere in grado di illustrare in modo appropriato le caratteristiche tecniche degli strumenti e delle metodologie web utilizzate per la gestione dei sistemi informativi.
Capacità di apprendere in modo autonomo
Lo studente dovrà mostrare di aver sviluppato capacità di apprendere e di orientarsi agilmente nelle problematiche proprie della gestione e dello sviluppo di sistemi informativi su web.

Programma

Definizione di sistema informativo. Definizione di sistema. Definizione di
informazione e di dato. Definizione di sistema informativo su web. Struttura dei
sistemi informativi. Lo schema generale dei sistemi informativi aziendali. I processi
di elaborazione.
Tipologie di sistemi informativi aziendali. Elaborazione delle transazioni. Procedure
amministrative. Programmazione e controllo delle operazioni. Reporting aziendale e
sistemi informativi decisionali.
Gestione della conoscenza. Ciclo della conoscenza. Knowledge Management.
Workflow Management System.
Gli elementi di base della progettazione organizzativa. I cinque meccanismi di
coordinamento. Le cinque parti dell'organizzazione Il funzionamento
dell'organizzazione. Macrostruttura. Organigramma.
Cicli di vita dei sistemi informativi. Business System Planning. Ciclo di vita
evolutivo. Ciclo di Pianificazione. Modello manageriale. La metodologia di
progettazione. Analisi dei requisiti.
Architettura dei Sistemi Informativi su Web. Struttura di un WIS.
Sicurezza nei WIS. Crittografia. Firma digitale.
Project Management. Modello Workflow.

Modalità d'esame

L’esame prevede una prova scritta a risposte aperte di verifica della conoscenza dei
contenuti del corso e in una prova orale di approfondimento.

Testi di riferimento

  • Valacich J., et al. - Sistemi informativi e trend digitali – ed. Pearson, 2024
  • Batini, Pernici, Santucci - Sistemi Informativi VOL. 6 - Sistemi Informativi basati su web - Franco Angeli, 2006
  • Mintzberg H. - La progettazione dell'organizzazione aziendale - Il Mulino, 1996 i Capitolo:
    Introduzione;
    1: Gli elementi di base della progettazione organizzativa;
    3: La progettazione della macrostruttura; Capitolo 7:
    7: Le configurazioni organizzative
  • Batini, Pernici, Santucci - Sistemi Informativi (Volumi 1-5) - Franco Angeli,
    2001 Rintracciabile su: http://archivio.cnipa.gov.it I Capitoli da studiare sono disponibili sulla piattaforma e-learning.
    Gli studenti che lo desiderano possono ottenere i testi in prestito dalla Biblioteca. Può
    convenire verificarne la disponibilità mediante il Sistema Bibliotecario di Ateneo
    https://opac.uniba.it/easyweb/w8018/ e contattare la biblioteca per concordare il
    prestito.

Codice insegnamento UC450454

Tecnologie Web* 2° anno · 2° semestre · 6 CFU · INFO-01/A · 0 file
A scelta dello/della studente/studentessa 3° anno · 1° semestre · 12 CFU · 0 file
Agent-Based Systems 3° anno · 6 CFU · 0 file
Application Security Engineering 3° anno · 6 CFU · 0 file
Attività formative ulteriori (tirocini, seminari) 3° anno · 1° semestre · 12 CFU · 0 file
Capstone Project 3° anno · 6 CFU · INFO-01/A · 0 file
Computational Intelligence 3° anno · 6 CFU · 0 file
Cyber Security 3° anno · 6 CFU · 0 file
Diritto dell’Informatica 3° anno · 6 CFU · GIUR-01/A · 0 file
Elementi di Data Mining 3° anno · 6 CFU · 0 file
Internet of Things* 3° anno · 1° semestre · 6 CFU · IINF-03/A · 0 file
Numerical Algorithms 3° anno · 6 CFU · 0 file
Prova finale 3° anno · 1° semestre · 6 CFU · 0 file
Seminari di Orientamento Consapevole 3° anno · 1° semestre · 3 CFU · 0 file
Seminari e Tirocinio 3° anno · 12 CFU · 0 file
Sicurezza Informatica 3° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file
Sistemi Cooperativi 3° anno · 6 CFU · 0 file
Sistemi Informativi Sul Web 3° anno · 6 CFU · 0 file
Sistemi Intelligenti per la Comunicazione Digitale 3° anno · 6 CFU · INFO-01/A · 0 file
Sistemi Multimediali 3° anno · 6 CFU · 0 file
Sistemi Multimediali + Progetto 3° anno · 9 CFU · 0 file
Software Evolution 3° anno · 6 CFU · 0 file
Sviluppo dei Videogiochi 3° anno · 6 CFU · 0 file
Tecnologie Informatiche per la Didattica 3° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file
Tecnologie per la Multimedialità* 3° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file
Tecnologie per le Infrastrutture di Calcolo* 3° anno · 1° semestre · 6 CFU · PHYS-06/A · 0 file

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.