Obiettivi formativi
Il corso si propone di fornire le basi sia teoriche che pratiche
della programmazione "orientata agli oggetti", utilizzando come linguaggio
di riferimento il linguaggio di programmazione C++.
Prerequisiti
I concetti e le tecniche di base della
programmazione imperativa forniti nel
corso di Fondamenti di Programmazione A
Contenuti dell'insegnamento
Fondamenti di programmazione. Programmazione object-oriented. Linguaggio di programmazione C++
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 razionale. Classe intLista. 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, in particolare vector.
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 (cenni). Metodi statici e non. Passaggio parametri.
Il costrutto class. Dichiarazione e istanziazione. Esempio classe Razionale. Ereditarieta'. Esempio classi Rettangolo e Quadrato. 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'. Realizzazione ereditarieta' multipla in Java (cenni).
Bibliografia
L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.
Metodi didattici
Lezioni frontali in aula e esercitazioni assistite in
laboratorio informatico
Modalità verifica apprendimento
Esame orale, piu' sviluppo e dimostrazione di
un'applicazione pratica scrita in C++
Altre informazioni
Il corso prevede una sua pagina Web per tutte le informazioni generali, gestita direttamente dal docente (http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html) e una pagina sul sistema di Web Learning dell'Ateneo per la gestione delle esercitazioni (http://lea.unipr.it/course/view.php?id=324).
Obiettivi agenda 2030 per lo sviluppo sostenibile
- - -