Fondamenti di Informatica (V.O.)

Finalità del corso

La finalità primaria del corso è fornire i concetti e i metodi fondamentali utilizzati nell’ambito dell’informatica, senza trascurare gli aspetti sperimentali e applicativi di questa disciplina. Gli argomenti principali trattati nel corso sono: l’architettura dei sistemi informatici, elementi di programmazione con l’ausilio del linguaggio C++, strumenti e servizi informatici con particolare riferimento alle basi di dati relazionali. Il linguaggio di programmazione C++ sarà introdotto quali strumento di progettazione. I concetti presentati nel corso sono del tutto generali e, pertanto, trovano naturale applicazione in tutti quegli insegnamenti del triennio del corso di laurea per i quali l’utilizzo del calcolatore costituisce strumento insostituibile per accrescere l’efficienza e l’affidabilità di calcolo. Da notare che la comprensione dei contenuti del corso è indipendente dall’aver superato altri insegnamenti del corso di laurea. Si è adottato un unico testo principale [1] cui si riferiscono i rimandi nel programma di seguito fornito, gli altri testi sono da intendersi come di supporto a specifici argomenti.

Il programma

INTRODUZIONE - Le nozioni di problema, algoritmo e programma. L’organizzazione del calcolatore (Cap 1). Lamacchina a registri illimitati URM come modello di macchina universale. Semplici algoritmi e programmi per la URM.

PARTE I - ARCHITETTURA DEI CALCOLATORI

Obiettivo: Fornire i concetti principali relativi alla rappresentazione dell’informazione in un sistema binario, all’architettura di un calcolatore ed ai linguaggi di basso livello.

Codifica binaria dell’informazione (Cap 2.1). Operazioni aritmetiche e logiche (Cap. 2.2.1-2.2.3). Codifica caratteri e immagini (Cap. 2.3,2.4). Architettura dei calcolatori (Cap. 3). Linguaggio macchina (Cap. 4.1-4.5). Il linguaggio assemblatore e schemi a blocchi (Cap. 4.7-4.8).

PARTE II - PROGRAMMAZIONE

Obiettivo: introdurre i costrutti fondamentali del linguaggio di programmazione C++. 

Strumenti di base del C++ : Struttura di un programma C++; compilazione; tipi, variabili ed espressioni; array; strutture di controllo: if-else,while, for; puntatori; memoria dinamica; riferimenti. Modularizzazione:Paradigma client-server; coesione, interfacciamento, accoppiamento e information hiding; modularizzazione mediante funzioni, mediante file, mediante tipo astratto, mediante namespace; linking.
Funzioni : Passaggio di parametri per valore e per riferimento; passaggio di puntatori; visibilità e ciclo di vita delle variabili; stack e record d’attivazione; ricorsione
Classi: Classi e oggetti; campi e funzioni proprie; costruttore; parte pubblica e parte privata; oggetto di invocazione; definizione delle funzioni proprie; oggetto di invocazione costante e parametri costanti; overloading; copia nel passaggio per valore e costruttore di copia; interferenza; copia profonda; operatore di assegnazione; distruttore.
Standard Library: Template; complessità; contenitori: array, vector, deque, list, set, multiset, map, multimap; iteratori; algoritmi generici; adattatori;
 Ereditarietà: Classe base e classe derivata; uso degli oggetti della classe derivata; layout degli oggetti della classe derivata;binding statico e dinamico; funzioni virtuali. 

PARTE III - STRUMENTI INFORMATICI 

Obiettivo: Fornire una presentazione delle funzioni offerte dai sistemi operativi e degli strumenti quali interpreti di comandi, compilatori, figli elettronici e basi di dati relazionali.

Sistema operativo (Cap. 12.1,12.2,12.2.1-12.2.2,12.4,12.5) e interprete dei comandi (Cap. 12.6). Esercitazioni pratiche sul compilatore C++. Nozione di Base di dati (Cap. 13), modello Entità-Relazioni [8], basi di dati relazionali e linguaggio SQL (Cap. 19), elementi di progettazione di basi dati e dipendenze funzionali (Cap. 21) , fogli elettronici (cenni, Cap. 20).Nozioni di Reti di Calcolatori: retilocali;  la pila ISO/OSI,; ilprotocolli Internet, TCP e UDP; servizi di rete: Web e posta elettronica [9]

Testi di base

[1] S. Ceri, D. Mandrioli, L. Sbattella, Istituzioni di Informatica, linguaggio di riferimento ansi C, McGraw-Hill Italia, 1994.
[2] C. Batini, L. Carlucci Aiello, M. Lenzerini, A. Marchetti Spaccamela, A. Miola, Fondamenti di programmazione dei calcolatori elettronici, Franco Angeli, 1990.
[3] Panizzi E., Il linguaggio di programmazione C++, dispense del corso. Reperibili presso la copisteria universitaria di Ingegneria.
[4]Stroustrup B., The C++ Programming Language, 3° ed, Addison-Wesley, 1997 (anche in italiano, Addison-Wesley, 2000)
[5] Cadoli M., Lenzerini M., Naggar P. e Schaerf A., Fondamenti della progettazione dei programmi, CittàStudiEdizioni, UTET, 1997
[6] Cadoli M., Lenzerini M., Panizzi E. e Schaerf A., Esercizi di progettazione dei programmi in C++, CittàStudiEdizioni, UTET, 1998
[7] Eckel B., Thinking in C++, 2° ed., Prentice Hall, 2000 (disponibile anche in formato acrobat su http://www.BruceEckel.com)
[8] J. Ullman: Basi di Dati e Basi di Conoscenza, Jackson, 1992.
[9]Andrew S. Tanenbaum, Reti di Computer, 3a edizione, Prentice Hall International , 1999.