Salta ai contenuti. | Salta alla navigazione

Strumenti personali

FONDAMENTI DI INFORMATICA E LABORATORIO

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2018/2019
Docente
EVELINA LAMMA
Crediti formativi
15
Periodo didattico
Annuale
SSD
ING-INF/05

Obiettivi formativi

Il corso è il primo insegnamento di programmazione software. L'obiettivo principale del corso consiste nel fornire agli studenti le basi per individuare l’algoritmo risolutivo di un problema, confrontare l’efficienza di due o più algoritmi e realizzare algoritmi nel linguaggio imperativo C e/o nel linguaggio a oggetti Java, utilizzando semplici strutture di dato.
Il corso introduce gli elementi di base di un elaboratore per il supporto alla programmazione, il C come primo linguaggio di programmazione software, e la sua macchina virtuale. Alla conoscenza del linguaggio C si affianca la presentazione di tecniche algoritmiche – anche ricorsive - per risolvere problemi tipici dell’informatica, discutendone la complessità, e l’uso di semplici strutture di dati, anche dinamiche, per la risoluzione software di problemi di elaborazione. Partendo dalla nozione di progetto software su più file sorgenti, introducendo la nozione di programmazione a moduli e object-oriented, si presenta poi il linguaggio a oggetti Java e le sue caratteristiche rispetto al linguaggio C. Infine, le principali strutture dati dinamiche realizzate in C sono presentate come classi e interfacce della Java Collections Framework.
Le principali conoscenze acquisite saranno:
- nozione di algoritmo, e calcolo della complessità di un algoritmo
- architettura della macchina di Von Neumann, e macchina astratta a supporto dell’esecuzione di un programma in linguaggio C
- il linguaggio di programmazione C
- la realizzazione in C delle principali strutture di dato, anche dinamiche
- la programmazione su più file
- la programmazione a oggetti e il linguaggio Java
- la Java Collections Framework come implementazione in Java di strutture di dato.
Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
- capacità di risolvere semplici problemi con tecniche algoritmiche e realizzarle mediante il linguaggio di programmazione C e/o Java
- essere in grado di individuare l’evoluzione a tempo di esecuzione di un programma in linguaggio C
- essere in grado di valutare la complessità di semplici algoritmi, anche su strutture dati collegate (liste, alberi).

Prerequisiti

Comprensione del testo
Conoscenze minime di matematica come da scuola media superiore
Capacità di ragionamento logico

Contenuti del corso

Il corso include ore di didattica nella forma di lezioni ed esercitazioni. 6 CFU sono occupati dal Modulo A dell’insegnamento, e 9 CFU dal Modulo B.

Nel Modulo A, due terzi delle ore di lezione sono erogate in aula e un terzo come ore di esercitazioni guidate in laboratorio. Gli argomenti affrontati sono nel Modulo A sono:
Nozione di algoritmo
La Macchina di Von Neumann
La programmazione strutturata
Il linguaggio C, le sue strutture di controllo, tipi primitivi, vettori, struct, puntatori, funzioni e passaggio dei parametri, iterazione e ricorsione
Il modello "run-time" del C, argomenti della linea di comando, la programmazione su più file.

Nel Modulo B due terzi delle ore sono dedicate a lezioni (sia in aula sia in Laboratorio di informatica) (indicate di seguito) durante le quali gli studenti verificano direttamente, programmando, ciò che il docente introduce nel corso della lezione (con un approccio learning-by-doing). Il restante terzo e' dedicato ad esercitazioni pratiche di consolidamento degli argomenti legati alla programmazione e alle strutture dati presentanti a lezione.
Gli argomenti affrontati nel Modulo B sono:
Complessità degli algoritmi e calcolo della complessità temporale
Algoritmi e strutture di dato anche dinamiche in C
Programmazione in C di algoritmi con strutture dati di tipo lista e albero (in Laboratorio)
La programmazione per componenti e ad oggetti.
Progettare per astrazioni. Incapsulamento e protezione. Classi ed ereditarietà.
Il linguaggio Java (in Laboratorio):
Classe e istanza, costruzione e distruzione di oggetti, oggetti semplici e oggetti composti.
Package e Package di I/O.
Ereditarietà, Classi Astratte, Interfacce.
Eccezioni.
Java Collections Framework.

Metodi didattici

Il corso comprende lezioni frontali in aula per alcuni argomenti, e lezioni ed esercitazioni pratiche in Laboratorio di Informatica, per argomenti legati alla programmazione in C e in Java.
Nelle ore di lezione ed esercitazione in Laboratorio inserite nel corso, e in quelle previste come tutorato didattico, gli studenti possono usufruire di tutor didattici in numero congruo per essere seguiti nello svolgimento degli esercizi proposti. Gli studenti hanno anche libero accesso al Laboratorio per ulteriori esercitazioni individuali.

Modalità di verifica dell'apprendimento

L’obiettivo della prova d’esame è verificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.
L'esame complessivo è costituito da tre prove che hanno luogo nello stesso giorno:
- Una prova di laboratorio, in cui si chiede allo studente di scrivere un programma in linguaggio C, volta a valutare la capacità di risolvere semplici problemi da parte dello studente identificando un algoritmo risolutivo e programmandolo in C, applicando le conoscenze sulla programmazione in C acquisite durante il corso e durante le lezioni di laboratorio.
- Una seconda prova di laboratorio verte sul linguaggio Java ed è volta a valutare la conoscenza dello studente sulla programmazione orientata agli oggetti e Java, acquisita durante il corso e durante le lezioni di laboratorio.
- Una terza prova, di tipo scritto (ma che puo' essere in parte svolta sempre al computer, con risposte a domande aperte), ha lo scopo di verificare la conoscenza dello studente sul funzionamento della macchina astratta alla base dell’esecuzione di un programma in C, la capacità di utilizzare programmazione ricorsiva e di saper calcolare la complessità di un algoritmo/programma. La prova verifica l’acquisizione delle conoscenze teoriche sugli argomenti del corso. Contiene esercizi di analisi di un programma, programmazione ricorsiva, analisi della complessità e domande a risposta aperta su architettura degli elaboratori e programmazione ad oggetti.

Le prove di laboratorio sono volte a verificare le capacità di sintesi di algoritmi e di programmazione. La prova scritta (parzialmente svolta sempre al computer) ha esercizi volti a verificare le capacità analitiche e le conoscenze su argomenti di base.
Il voto finale è dato dalla somma dei punteggi delle tre prove.
Per superare l’esame è necessario acquisire un punteggio minimo di 18 su 31.
Qualora una delle tre prove risulti insufficiente o qualora il punteggio totale sia inferiore a 18 è necessario ripetere tutte e tre le prove

Per gli studenti frequentanti, è possibile svolgere l'esame in due parti (parziali), una al termine di ciascun modulo del corso. La sufficienza per le prove parziali è di 18 su 31 punti per il modulo A, 18 su 31 punti per il modulo B, ed voto finale è la media dei voti conseguiti.

Testi di riferimento

I lucidi proiettati durante le lezioni in aula o laboratorio sono resi disponibili dai docenti al sito:
http://www.unife.it/ing/informazione/fondamenti-informatica

Al sito indicato, si forniscono anche i testi delle esercitazioni ed alcuni testi d’esame, eventualmente con soluzione.

Argomenti specifici possono essere approfonditi sui seguenti testi.

Per la parte sul linguaggio C:
S. Ceri, D. Mandrioli, L. Sbattella, Informatica: Programmazione, McGraw-Hill, 2006.
A. Bellini, A. Guidi: Guida al Linguaggio C, McGraw-Hill, 1995.

Per la parte sul linguaggio Java, qualsiasi testo introduttivo al linguaggio è adatto.
Si segnalano:

H. M. Dietel, P. J. Dietel: Java Fondamenti di Programmazione, Apogeo.
Lewis John, Loftus William: Java Fondamenti di progettazione software, Addison Wesley.
C. Thomas Wu: Java Fondamenti di Programmazione, Mc Graw Hill.