Contenuto principale della pagina Menu di navigazione Modulo di ricerca su uniPi Modulo di ricerca su uniPi

INFORMATICA

Corso di laurea

Piano di Studi


Primo anno

  • Analisi matematica (9 cfu)

    • Fornire i primi strumenti di analisi matematica intesi sia come tecniche di calcolo che come esempi di ragionamento logico deduttivo.

      Contenuti

      Numeri reali e numeri complessi.

      Successioni: principali proprietà.

      Prime definizioni legate al concetto di funzione di una variabile reale. Le principali funzioni elementari. Limiti di funzioni.

      Infinitesimi ed infiniti. Funzioni continue e funzioni derivabili: principali proprietà. Ricerca dei punti di massimo e di minimo. Convessità. Formula di Taylor. Studio di una funzione e del suo grafico.

      L'integrale e le sue proprietà; teorema fondamentale del calcolo integrale. Metodi di integrazione. Cenni su equazioni differenziali lineari del I e II ordine e a variabili separabili.


  • Programmazione I e laboratorio (12 cfu)

    • Introduzione alla risoluzione di problemi e alla programmazione con esercitazioni in laboratorio.

      Contenuti

      Grammatiche libere

      Presentazione del Linguaggio funzionale Caml

      Programmazione funzionale

      Presentazione del Linguaggio imperativo C (rappresentazione numerica, funzioni, procedure, parametri, puntatori)

      Programmazione imperativa (array, liste, ecc.)

      Definizione di un interprete in Caml del Linguaggio Imperativo


  • Fisica (6 cfu)

    • Introduzione ai principi e al metodo scientifico della fisica classica.

      Sistemi di riferimento e coordinate, cinematica e dinamica dei sistemi elementari nella modellazione newtoniana.

      Simmetria, invarianza e leggi di conservazione.

      Modellazione dei processi della dinamica dei punti materiali e dei fenomeni elettromagnetici.

      Modellazione di processi naturali deterministici.



  • Algoritmica e laboratorio (12 cfu)

    • Progettazione e analisi di algoritmi. Risoluzione di problemi con strutture dati. Attivita' di programmazione in laboratorio.

      Breve introduzione a problemi computazionali, indecidibilità, e trattabilità.

      Complessità computazionale: limiti superiori e inferiori.

      Tecniche di analisi: Relazioni di Ricorrenza, analisi ammortizzata e analisi competitiva.

      Tecniche algoritmiche: Divide et Impera, Programmazione Dinamica, Greedy.

      Algoritmi per Sequenze: ricerca e ordinamento

      Algoritmi per Alberi: ricorsione, visite, e rappresentazioni.

      Dizionari: Alberi bilanciati, Tabelle hash, Trie.

      Algoritmi e strutture di dati randomizzate.

      Algoritmi per Grafi: rappresentazione, algoritmi di visita, Albero di Copertura Minimo, Cammini Minimi (Dijkstra).


  • Matematica discreta e algebra lineare (12 cfu)

    • MODULO DI MATEMATICA DISCRETA
      • Insiemi, relazioni, funzioni
      • Principio di induzione e definizioni per ricorrenza
      • Il concetto di cardinalità e calcolo combinatorio
      • Aritmetica e congruenze
      • Polinomi e fattorizzazione

      MODULO DI ALGEBRA LINEARE
      • Spazi vettoriali e basi
      • Sistemi lineari e loro intepretazione geometrica
      • Matrici e determinanti
      • Risoluzione di sistemi lineari
      • Polinomio caratteristico e criteri di diagonalizzabilità di operatori lineari

  • Logica per la Programmazione (6 cfu)

    • Obiettivi:

      Obiettivo del corso è la presentazione del calcolo proposizionale e del calcolo del primo ordine e la loro applicazione alla specifica di programmi e alla dimostrazione di correttezza dei programmi in base alla logica di Hoare.

      Contenuti:

      Il concetto di enunciato dichiarativo
      Sintassi della logica proposizionale
      Semantica della logica proposizionale (tabelle di verità)
      Leggi per il calcolo proposizionale e dimostrazioni
      Sintassi della logica del primo ordine
      Semantica della logica del primo ordine (interpretazioni, modelli ecc.)
      Leggi per il calcolo del primo ordine e dimostrazioni
      Specifica di proprietà di programmi
      Prova di correttezza di programmi mediante il calcolo delle triple di Hoare


  • Conoscenza della lingua inglese (3 cfu)


  • Secondo anno

  • Programmazione II (9 cfu)

    • Programmare come progetto e verifica di astrazioni, gerarchie di macchine virtuali e supporto run-time.

      Contenuti

      Programmazione orientata ad oggetti. Il nucleo del linguaggio Java: classi, oggetti, ereditarietà, astrazioni sui dati (specifica e implementazione, tecniche di verifica induttiva), astrazione mediante gerarchie, polimorfismo à la Java

      Strutture a run time: ambiente, memoria, heap; blocchi, sottoprogrammi, records di attivazione, pila dei records di attivazione; oggetti; interpretazione, compilazione.


  • Sistemi Operativi e laboratorio (12 cfu)

    • Principi e concetti per la gestione delle risorse di un sistema di elaborazione.
      Laboratorio di programmazione di sistema.

      Contenuti

      MODULO DI SISTEMI OPERATIVI
      Funzioni, struttura e componenti dei Sistemi Operativi
      - Nucleo e Processi
      - Gestione dei processi e del processore: concorrenza e sincronizzazione tra processi e tra thread, scheduling
      - Gestione della memoria, memoria virtuale e cache
      - Gestione dei dispositivi di I/O e di memoria di massa
      - Sistema di archiviazione e gestione degli archivi

      MODULO DI LABORATORIO DI PROGRAMMAZIONE DI SISTEMA
      - Unix e la shell bash
      - Utilizzo di C in ambiente GNU per lo sviluppo di applicazioni di sistema
      - Programmazione di sistema: file system, processi e memoria, thread
      - Meccanismi di IPC: Pipe, Socket, Segnali

  • Ricerca operativa (6 cfu)

    • Conoscenze: L’insegnamento ha l’obiettivo di fornire le conoscenze di base di Ricerca Operativa.

      Obiettivi: L’insegnamento ha l’obiettivo di fornire gli strumenti per costruire modelli matematici di ottimizzazione, l’analisi di tali modelli e i metodi risolutivi.


      ARGOMENTI

      MODELLI MATEMATICI DELLA RICERCA OPERATIVA.

      PROGRAMMAZIONE LINEARE.

      PROGRAMMAZIONE LINEARE SU RETI.

      PROGRAMMAZIONE LINEARE INTERA.

  • Basi di dati (6 cfu)

    • Fornire le basi scientifiche e metodologiche per la progettazione, la realizzazione e l'uso di basi di dati relazionali.

      Contenuti

      I sistemi informativi e informatici. Funzionalità dei sistemi per la gestione di basi di dati (DBMS).

      I meccanismi di astrazione dei modelli dei dati a oggetti. La progettazione di basi di dati usando il modello a oggetti.

      Il modello dei dati relazionale. La trasformazione di schemi a oggetti in schemi relazionali

      Il linguaggio SQL per creare e usare basi di dati. Interrogazioni semplici, giunzioni, quantificazioni esistenziali ed universali, raggruppamento.

      La teoria relazionale delle basi di dati. Le dipendenze fra i dati. Decomposizioni di schemi relazionali. Forme normali.

      Architettura dei DBMS.


  • Calcolo numerico (6 cfu)

    • Uso e valutazione delle metodologie di risoluzione di problemi del calcolo scientifico. Analisi degli aspetti computazionali, quali il condizionamento dei problemi esaminati, la stabilita' e la complessita' dei metodi proposti.

      Contenuti

      Rappresentazione dei numeri reali e analisi dell'errore numerico: errori di arrotondamento, aritmetica di macchina e propagazione degli errori.

      Condizionamento di un problema e complessità computazionale di un algoritmo numerico.

      Metodi iterativi per le equazioni non lineari: i principali metodi e lo studio della loro convergenza.

      Metodi numerici per l'algebra lineare: i principali metodi diretti e iterativi per la risoluzione di sistemi lineari.

      Interpolazione e integrazione numerica: il polinomio di interpolazione, le formule di quadratura interpolatorie.

  • Architettura degli elaboratori (9 cfu)

    • Basi scientifiche e tecnologiche per comprendere le caratteristiche dei sistemi di elaborazione ai vari livelli e la loro relazione con gli strumenti di programmazione. Strutturazione dei sistemi mediante moduli concorrenti e cooperanti.

      Contenuti

      Metodologia di strutturazione di sistemi di elaborazione:

      Strutturazione a livelli o macchine virtuali, moduli concorrenti e comunicanti; componenti per reti logiche; livello dell'architettura firmware, unità di elaborazione e comunicazioni.

      Livello della macchina assembler e processori: modi di indirizzamento, puntatori, procedure; modalità di compilazione per linguaggi imperativi (C); architettura base di processori general-purpose; valutazione delle prestazioni, benchmarking, impatto di architetture Risc vs Cisc

      Architettura globale dell'elaboratore: architettura base di CPU, memorie e ingresso-uscita; supporto a processi e thread; supporto all'allocazione statica e dinamica della memoria.

      Architetture ad alte prestazioni e tendenze: memorie cache; architetture pipeline, superscalari/multithreading, multicore.

  • Ingegneria del software (6 cfu)

    • Il corso introduce  i problemi della produzione di sistemi software e illustra alcuni processi di sviluppo software. Viene presentato in dettaglio un processo di sviluppo guidato dai modelli, definendo modelli statici e modelli dinamici per le principali fasi del processo: analisi del dominio, analisi dei requisiti, progettazione architettonica e dettaglio. Infine si affronta il tema della verifica: obiettivi e pianificazione delle verifiche, progettazione e valutazione delle prove.

  • Calcolo delle probabilita' e statistica (6 cfu)

    • Assimilare le principali nozioni di Calcolo delle Probabilita' ed essere in grado di utilizzare le procedure base dell'inferenza statistica (eseguire una stima e pianificare un test statistico).

      Contenuti

      Spazi di probabilità, probabilità condizionata e indipendenza, formula di Bayes.

      Variabili aleatorie discrete e con densità, valori attesi e momenti, indipendenza di variabili aleatorie, principali esempi di variabili aleatorie.

      Cenni di statistica descrittiva. Definizione di modello statistico: stime, intervalli di fiducia e test statistici. Alcuni esempi di test statistici


  • Terzo anno

  • Introduzione all'Intelligenza Artificiale (6 cfu)

    • Obiettivi formativi: Apprendere i concetti principali e i metodi che stanno alla base della progettazione e sviluppo di sistemi di intelligenti.

      1. Risoluzione dei problemi come ricerca

      2. Rappresentazione della conoscenza e ragionamento

      3. Ragionamento incerto e probabilistico

      4. Apprendimento automatico

      5. Applicazioni e prospettive

  • Programmazione di Interfacce (6 cfu)

    • Presentare i principi e le principali tecniche per la programmazione di interfacce utente.

      Il problema: dispositivi di interazione e visualizzazione e il sistema percettivo umano
      Colori e gamut
      La programmazione ad eventi nei sistemi grafici
      Assemblare interfacce grafiche usando componenti
      La struttura di un sistema grafico e la pipeline grafica
      Programmazione di componenti grafici
      Animazioni
      Il Web browser: un renderer programmabile
      Javascript, DHTML e CSS
      Presentation system a retention
      Introduzione alla grafica 3D: il rendering 3D


  • Esame a libera scelta dello studente I (6 cfu)

    • Esame a libera scelta dello studente.

  • Esame a libera scelta dello studente II (6 cfu)

    • Esame a libera scelta dello studente.

  • Reti di calcolatori e laboratorio (12 cfu)

    • Le reti di calcolatori e i protocolli di comunicazione. Progettazione e sviluppo di applicazioni di rete.

      Contenuti

      MODULO DI RETI DI CALCOLATORI
      -Introduzione alle reti
      - Il livello application
      - Condivisione di file peer-to-peer
      - Il livello transport
      - Il livello network
      - Il livello link
      - Complementi: Sicurezza nelle reti, Introduzione ai servizi Web, Wireless e Reti Mobili

      MODULO DI LABORATORIO DI PROGRAMMAZIONE DI RETE

      il corso si propone di introdurre i concetti fondamentali della programmazione concorrente in JAVA e di fornire gli strumenti per lo sviluppo di applicazioni distribuite in JAVA. In particolare nella prima parte del corso viene introdotto il modello di concorrenza di JAVA (threads, mutua esclusione, cooperazione di Threads, Thread Pooling).
      Nella seconda parte del corso vengono introdotti i socket sia TCP che UDP, riprendendo il concetto di stream e approfondendo il concetto di serializzazione di oggetti.
      Nella terza parte del corso viene introdotta la programmazione ad oggetti distribuita, con particolare riferimento al meccanismo di Remote Method Invocation.
      Infine l'ultima parte del corso prevede un'attività pratica su una rete virtuale, in particolare si forniscono gli strumenti per la configurazione di una rete: interfacce, routing, DNS.
      Il corso si conclude con l'assegnazione di un progetto didattico.

  • Elementi di calcolabilita' e complessita' (6 cfu)

    • Obiettivi formativi: Introduzione alle nozioni fondamentali della teoria della calcolabilità e della complessità.

      Contenuti

      Introduzione alle nozioni fondamentali della teoria della calcolabilità e della complessità.

      Contenuti

      Linguaggi Formali e Automi: grammatiche, linguaggi e operazioni su di essi, gerarchia di Chomsky; automi a stati finiti, grammatiche regolari, espressioni regolari; automi a pila, grammatiche libere da contesto

      Calcolabilità: Idea intuitiva di algoritmo, Macchina di Turing per accettare e calcolare, funzioni ricorsive primitive, diagonalizzazione, funzioni ricorsive generali, Goedelizzazione, Padding Lemma, Forma Normale, Funzione Universale, teorema s-m-n, insiemi ricorsivi e r.e., problemi insolubili e riducibilità

      Complessità: problemi risolubili in tempo polinomiale, teorema di speed-up, teorema del gap, teorema della gerarchia, problemi risolubili nondeterministicamente in tempo polinomiale, riduzioni in tempo polinomiale, problemi NP-completi (SAT).



  • 6 cfu a scelta nel gruppo Complementari

    • Insegnamento complementare
    • Crittografia (6 cfu)

      • Obiettivi: Introdurre le nozioni elementari sottostanti il progetto dei sistemi di cifratura moderni. Introduzione: definizione di crittografia e crittoanalisi. Cifrari Storici Generatori di numeri pseudo-casuali Cifrari perfetti: definizione e proprietà, il One-time pad. Cifrari a chiave simmetrica: DES, Triple-DES e AES Cifrari composti Cifrari a chiave pubblica: funzioni one-way trapdoor e RSA. Identificazione, Autenticazione e Firma digitale. Il sistema SSL. Smartcard: costituzione e applicazioni. Elementi di steganografia. Virus e simili attacchi. Elementi di crittografia quantistica.
    • Laboratorio di Basi di Dati (6 cfu)

      • Il laboratorio si propone l'obiettivo di completare le nozioni relative ad analisi e progettazione di dati, procedure ed interfacce di applicazioni per basi di dati, ed alla loro realizzazione. Tutte le nozioni introdotte vengono immediatamente sperimentate dagli studenti, utilizzando notazioni standard ed un sistema commerciale, quale ad esempio ORACLE DBMS ed ORACLE WebServer, sviluppando un case study che si conclude, alla fine del corso, con la realizzazione da parte degli studenti di un sistema funzionante.
    • Teoria dell'Informazione (6 cfu)

      • Obiettivi Il corso tratta in modo elementare dei Fondamenti della Teoria dell’Informazione, Introducendo concetti come Entropia, Codifica, Compressione correzione di errori, dovrebbe servire come prerequisito per gli studi successivi che trattano la generazione la codifica e la trasmissione dell’informazione. Syllabus • Concetti generali di Teoria dell'Informazione. La funzione entropia. La proprietà di equiripartizione asintotica. • Sorgenti d'informazione discreta. Codifica in assenza di rumore: codici istantanei e codici univocamente decifrabili; il teorema della codifica in assenza di rumore. Costruzione dei codici ottimali: il metodo di Huffman. Codifica aritmetica • Il canale discreto senza memoria. Capacità, Schemi di decisione e probabilità di errore. La codifica del canale. Il teorema fondamentale. • I codici correttori a blocchi. I codici lineari, algoritmi di decodifica, capacità correttiva, probabilità di errore. I Codici ciclici, I codici BCH, i codici di Reed Solomon, applicazioni
    • Gestione di reti (6 cfu)

      • Obiettivi: Fornire agli studenti una conoscenza di base dei problemi della gestione di rete, degli strumenti per la gestione disponibili e dei principi di base che permettono di gestire complesse reti di comunicazioni. Inoltre sono analizzate le piu' comuni esigenze di monitoraggio (rete, sistemi, servizi, applicazioni, sicurezza) su reti eterogenee (wired e wireless), nonche' gli strumenti (open-source o commerciali) disponibili sul mercato da utilizzare per fornire anche una conoscenza pratica dell'argomento
    • Esperienze di programmazione (6 cfu)

      • Il corso intende mostrare attraverso esempi ragionati alcune tecniche di programmazione adatte a risolvere problemi reali. Verranno mostrate esempi sia di problemi di elevata complessità temporale che di problemi di gestione di grandi quantità di dati. Sarà fatto anche il confronto tra linguaggi diversi (Java, C, C++, Matlab, Mathematica) sempre limitandosi ad esempi significativi. Il corso servirà anche come contenitore per la presentazione di esperienze di programmazione da parte di gruppi di ricerca del dipartimento.
    • Sviluppo di Applicazioni Mobili (6 cfu)

      • 1. Introduzione, storia del mercato mobile, storia di Android. 2. Architettura di Android; rapporto con Linux, visione a strati 3. Dalvik VM, ambiente di sviluppo, deploy di applicazioni e Market 4. Il sistema delle risorse e degli asset; dispatching a runtime 5. Activity e ciclo di vita; il dispatching degli Intent; Layout e View; scrivere una custom View 6. Listview e DataAdapter; dialog, notifiche e alert 7. Drawable e sue sottoclassi; approfondimenti su patch 8. Tematiche di storage: Bundle e Parcelable; preferenze; file system; caching; SQLlite e classi helper; ContentProvider e ContentResolver 9. Services 10. Broadcast receiver e servizi di sistema (telefonia, sensori, ecc.) 11. Esecuzione asincrona e in background 12. Programmazione nativa in C
    • Sicurezza di Sistemi ICT (6 cfu)

      • Il corso si propone di mettere in grado il laureato triennale di conoscere ed utilizzare alcuni controlli di sicurezza che permettono di aumentare in modo significativo la sicurezza offerta da un sistema ICT. Il corso è organizzato in tre parti: (1) concetti di base della sicurezza, (2) esempi di controlli di sicurezza, (3) seminari su argomenti legati alla sicurezza (quali legislazione informatica e aspetti Web della sicurezza).
    • Cloud e Green Computing (6 cfu)

      • L’insegnamento si propone di introdurre le principali tecnologie impiegate per la realizzazione e l’utilizzo del cloud computing, discutendo aspetti infrastrutturali, software e di business model. L’insegnamento si propone inoltre di introdurre i problemi relativi alla sostenibilità ambientale dell’ICT, discutendo prospettive e limiti delle soluzioni proposte per tali problemi.
  • 12 cfu a scelta nel gruppo Prova finale

    • Attività per conseguimento titolo
    • Tirocinio formativo e preparazione prova finale (12 cfu)


    • Prova finale (12 cfu)


Questo sito utilizza solo cookie tecnici, propri e di terze parti, per il corretto funzionamento delle pagine web e per il miglioramento dei servizi. Se vuoi saperne di più, consulta l'informativa