FONDAMENTI DI PROGRAMMAZIONE B
cod. 1000749

Anno accademico 2024/25
2° anno di corso - Secondo semestre
Docente
Vincenzo ARCERI
Settore scientifico disciplinare
Informatica (INF/01)
Ambito
Attività formative affini o integrative
Tipologia attività formativa
Affine/Integrativa
72 ore
di attività frontali
9 crediti
sede:
insegnamento
in - - -

Obiettivi formativi

Il corso si pone l'obiettivo di far acquisire allo studente le conoscenze di base per la progettazione e la realizzazione di programmi “object-oriented”, nonchè conoscenze approfondite sugli strumenti di programmazione messi a disposizione dal C++ e da Java per la programmazione “object-oriented”.

Il corso mira anche a fornire allo studente le capacità di applicare le tecniche di analisi dei problemi e le conoscenze sugli strumenti di programmazione acquisite per realizzare programmi C++ e Java concreti, eseguibili tramite calcolatore.

Prerequisiti

I concetti e le tecniche di base della programmazione imperativa forniti nel corso di Fondamenti di Programmazione A

Contenuti dell'insegnamento

Il corso introduce i fondamenti della programmazione “object-oriented” e modulare, utilizzando come linguaggio di riferimento principale il C++, ma analizzando, nella parte finale del corso, anche il linguaggio Java.

Il corso presenta anche alcuni costrutti e meccanismi avanzati del C++ e di Java, quali l'overloading di funzioni ed operatori e la gestione delle eccezioni, nonchè alcune nozioni e strumenti non strettamente legati alla programmazione “object-oriented”, ma comunque di fondamentale importanza, quali le nozioni di tipo di dato astratto e di ciclo di sviluppo del software.

Programma esteso

COSTRUTTI E MECCANISMI
Il costrutto class: dichiarazione, creazione di oggetti, funzioni proprie ed invocazione di funzioni, inizializzazione di oggetti (costruttori), es. classe data semplificata. Nozioni di "information hiding" e "incapsulamento".
Overloading di funzioni ed operatori. Ridefinizione operatori di inserimento ed estrazione.
Parametri "const reference" e "reference return". Parametri di default.
Gestione delle eccezioni. Motivazioni, meccanismi.
Classi e funzioni template: dichiarazione, istanziazione.

TIPI DI DATO ASTRATTI(ADT)
La nozione di tipo di dato astratto. Esempi di tipi di dato astratti realizzati in C++. Classe predefinita string. Classe intPila e pila<t>: con allocazione statica e con allocazione dinamica; definizione e uso distruttore. Classe vett<t>: ridefinizione operatori [] e = (assegnamento); definizione e uso costruttore di copia.
Standard Template Library (STL). Cenni ai "contenitori" della STL

PROGRAMMAZIONE "OBJECT-ORIENTED" (O-O)
Nozione di oggetto, classe (attributi, metodi), istanza, sistema ad oggetti.
Ereditarietà: dichiarazione, ridefinizione funzioni e dati. Campi protected. Ereditarieta' multipla (cenni). Esempio classe persona e classe studente.

PROGETTAZIONE E PROGRAMMAZIONE MODULARE
Ciclo di sviluppo dei programmi (cenni). "Programming-in-the-large" vs. "Programming-in-the-small".
La nozione di modulo. La modularizzazione nella fase di progettazione e di realizzazione. Classi e modularizzazione in C++. Programmi divisi in piu' file. Funzioni e campi di classi static.
Progettazione ed implementazione di un'applicazione in C++.

LINGUAGGIO JAVA
Cenni all'evoluzione di Java. Caratteristiche e componenti. Modalita' di esecuzione: compilazione vs. interpretazione. La Java Virtual Machine.
Struttura di un programma Java. Tipi semplici primitivi. I/O di base. Costrutti di controllo. Tipi strutturati: array. Reference e oggetti. Garbage collection. Stringhe. Metodi statici e non. Passaggio parametri.
Il costrutto class. Dichiarazione e istanziazione. Esempio classe Razionale. Ereditarieta'. Reference this e super. Polimorfismo. Principio di sostituibilita' tra classe base e sottoclasse e "down-casting". Gerarchia di classi (classe java.lang.Object). Tipi "wrapper". Interfacce e implementazioni. Interfacce ed ereditarieta'. Classi astratte. Tipi generici. Espressioni Lambda (cenni)

Bibliografia

- L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.
- C.S. Horstmann , Concetti di informatica e fondamenti di Java, Apogeo, 2010.
- M.Cadoli, M.Lenzerini, P.Naggar, A.Schaerf. Fondamenti della progettazione di programmi. Principi, tecniche e loro applicazioni in C++, CittaStudiEdizioni di UTET Libreria, 1997.
- Programmi C++ e Java mostrati a lezione e in laboratorio, disponibili sulla pagina Elly del corso

Metodi didattici

L'insegnamento si svolge principalmente tramite lezioni frontali ed esercitazioni su computer, sia assistite che svolte in modo autonomo dallo studente.
Le lezioni prevedono tra l'altro la presentazione di numerosi esempi pratici di problemi e relativi programmi per la loro soluzione scritti in C++ e Java che verranno resi disponibili sulla pagina Elly del corso.

Modalità verifica apprendimento

L'esame finale del corso di Fondamenti di Programmazione B e' costituito da una prova di teoria ed una prova di programmazione.

La prova di teoria consiste nella risposta su carta a dieci domande chiuse a crocette sull’intero programma del corso. Tale prova serve da sbarramento per la seconda prova di programmazione. Per il superamento della prova di teoria e l’accesso alla prova di programmazione è richiesto rispondere correttamente al 70% delle domande. Nel caso lo studente non risponda correttamente ad almeno il 70% delle domande, l’esame si considera non superato e non potrà accedere alla prova di programmazione.

La prova di programmazione consiste nella soluzione su carta di alcuni esercizi di programmazione.

Fondamenti di Programmazione A+B: Per gli studenti del Corso di Laurea in Informatica la prova d'esame è integrata con quella del corso di Fondamenti di Programmazione A. Ad ognuna delle prove d'esame (parte A e parte B) è assegnato un voto in trentesimi. L’esame di Fondamenti di Programmazione A+B si ritiene superato se la media aritmetica fra il voto ottenuto in Fondamenti di Programmazione A e quello ottenuto in Fondamenti di Programmazione B è maggiore o uguale a 18 e ciascuno dei due voti è maggiore o uguale a 16.

Altre informazioni

Il corso prevede una sua pagina Web, gestita direttamente dal docente, basata sulla piattaforma di e-learning dell'Ateneo Elly

Obiettivi agenda 2030 per lo sviluppo sostenibile

- - -

Referenti e contatti

Numero verde

800 904 084

Segreteria studenti

E-mail: segreteria.scienze@unipr.it
 

Servizio per la qualità della didattica

Manager della didattica:
dott.ssa Giulia Bonamartini
T. +39 0521 904157
E-mail servizio smfi.didattica@unipr.it
E-mail del manager giulia.bonamartini@unipr.it

Presidente del corso di studio

Prof. Luca Lorenzi
E-mail: luca.lorenzi@unipr.it

Delegato orientamento in ingresso

Prof. Luca Lorenzi
E-mail: luca.lorenzi@unipr.it

Delegato orientamento in uscita

Prof.ssa Chiara Guardasoni
E-mail: chiara.guardasoni@unipr.it

Docenti tutor

Prof. Emilio Acerbi
E-mail: emilio.acerbi@unipr.it

Prof. Marino Belloni
E-mail: marino.belloni@unipr.it

Prof.ssa Maria Groppi
E-mail: maria.groppi@unipr.it

Prof.ssa Chiara Guardasoni
E-mail: chiara.guardasoni@unipr.it

Prof. Luca Lorenzi
E-mail: luca.lorenzi@unipr.it

Prof. Costantino Medori
E-mail: costantino.medori@unipr.it

Prof. Adriano Tomassini
E-mail: adriano.tomassini@unipr.it

Delegati Erasmus

Prof. Leonardo Biliotti 
E-mail: leonardo.biliotti@unipr.it 
 

Responsabile assicurazione qualità

Prof.ssa Maria Groppi
E-mail: maria.groppi@unipr.it

Referente per le fasce deboli

Prof.ssa Fiorenza Morini
E-mail: fiorenza.morini@unipr.it