Modularizzazione per riusabilità e estendibilità. Nozione di classe, astrazione per interfacce, relazione fra classi (ereditarietà e clientela; aggregazione e composizione; ereditarietà multipla). Il modello degli oggetti ed il binding dei metodi. Il sistema dei tipi in Java e le sue proprietà. Polimorfismo per sottotipo e Tipi Generici. Uso delle classi Generiche. Il formalismo U.M.L. per l’analisi e la descrizione del sistema. Soluzioni avanzate: I Design Pattern. Linguaggio utilizzato: Java.
-Thinking in Java. B. Eckel (Apogeo).
-Progettazione del software e Design Pattern in Java. C. Horstmann (Apogeo).
Obiettivi Formativi
Conoscenze:
Il corso si propone di portare a conoscenza dello studente le tecniche e gli obiettivi inerenti alla progettazione e alla realizzazione del software secondo la metodologia orientata agli oggetti, mettendone in rilievo sia gli aspetti ingegneristici, nell’organizzazione per componenti, che quelli programmativi, relativi alle caratteristiche peculiari dei linguaggi ad oggetti.
Competenze acquisite:
Dall’approfondimento e dalla applicazione a casi studio paradigmatici delle conoscenze acquisite durante il corso, gli studenti acquisiranno un utilizzo più consapevole ed efficace delle tecniche di programmazione avanzate, indirizzate alla qualità del software prodotto.
Capacità acquisite (al termine del corso):
Capacità di sviluppare software flessibile, utilizzando tecniche avanzate orientate agli oggetti.
Prerequisiti
Corsi vincolanti: Programmazione
Corsi raccomandati: Algoritmi e strutture dati
Altre Informazioni
Frequenza delle lezioni ed esercitazioni: Raccomandata
Strumenti a supporto della didattica UniFi E-Learning: http://e-l.unifi.it
Orario di ricevimento:
VENERDì.: 14:30 – 16:00
Modalità di verifica apprendimento
Scritta e Orale
Programma del corso
La metodologia orientata agli oggetti per la costruzione del software: tecniche di progettazione e costrutti linguistici per ottenere codice estendibile, riusabile e compatibile.
1. Classi, Interfaccia e implementazione nascosta.
2. UML (Unified Modeling Language): il “diagramma di classi” per l'analisi, la progettazione e la documentazione.
3. Ereditarieta'. Composizione di oggetti e delega di messaggi. Le classi astratte.
4. Classi come Tipi. Polimorfismo per sottotipo e parametrico.
5. Programmazione orientata agli oggetti in Java. Classi e Interfacce; Costruzione di oggetti, copia e serializzazione; gestione di errori mediante Eccezioni. RTTI e Riflessione. Controllo statico dei tipi: cast e Correttezza. Classi Generiche.
6. Programmazione per contratto: Invarianti, Pre/Post condizioni, Sottocontratti.