Progettazione del Software   -   A.A. 2017/2018
Diario delle lezioni
Dettaglio degli argomenti svolti durante le lezioni.
-
Lezione del 25-09-2017
Informazioni generali sul corso: obiettivi e motivazioni. Gli attori nella progettazione del SW. Classificazione delle applicazioni SW. Ciclo di vita del SW. Qualità interne ed esterne. Principi guida nello sviluppo del SW. La modularizzazione. I principi della modularizzzazione. Esempi di cattiva e buona modularizzazione.
-
Lezione del 26-09-2017
Principi di base dell'orientazione agli oggetti. Classi, oggetti ed ereditarietà. Introduzione all'analisi. Introduzione ad UML. Oggetti. Classi. Attributi. Associazioni. Link. Ruoli.
-
Lezione del 02-10-2017
Attributi di associazione. Esercitazione. La molteplicità delle associazioni ed attributi.
-
Lezione del 03-10-2017
Le associazioni n-arie. I commenti. Le associazioni ordinate. Generalizzazione ed ereditarietà in UML. Ereditarietà multipla. Il problema delle classi disgiunte. La specializzazione di attributi ed associazioni. Esercitazione.
-
Lezione del 09-10-2017
Ripasso su Generalizzazioni e Specializzazione di attributi e associazioni. Le Operazioni. Esercitazione.
-
Lezione del 10-10-2017
Specializzazione di operazioni. Tipo di dato complessi. Semantica dei diagrammi delle classi: riassunto. Aspetti metodologici nella costruzione del diagramma delle classi. Controllo di qualità sul diagramma delle classi. Esercitazione.
-
Lezione del 16-10-2017
Il diagramma degli use case. Cosa è uno Use Case. Gli Attori. Le associazioni. I Documenti di Specifica. La specifica di una Classe. La specifica di un Use Case. La specifica di una operazione. Precondizioni e Postcondizioni. Esercitazione.
-
Lezione del 30-10-2017
Introduzione al linguaggio Java. La macchina virtuale di Java ed la compilazione di un programma Java. Tipi di dato in Java. Riferimenti ed oggetti. Allocazione della memoria. Campi dati static. Funzioni in Java. Comunicazione fra unità di programma. Il Side-effect.
-
Lezione del 31-10-2017
Qualificatori dei campi dato. Overloading di funzioni. I construttori. Esercitazione.
-
Lezione del 06-11-2017
I package ed il loro uso. Livelli di accesso di una classe. Derivazione fra classi. Principi fondamentali della derivazione. Gerarchie di classi in Java. Casting. Livelli di accesso dei campi di una classe. Regole di visibilità tra campi.
-
Lezione del 07-11-2017
Costruttori di classi derivate. Overloading e Overriding. Late binding. Classi e metodi final.
-
Lezione del 13-11-2017
Sovrascrittura dei campi dati. Le classi astratte. Le interfacce. Esercitazione. La classe Object. Overriding della funzione toString(). La classe Java Class. La funzione isInstance(). L'operatore instanceof. La funzione getclass().
-
Lezione del 14-11-2017
Uguaglianza superficiale e profonda tra oggetti. Overriding della funzione equals(). Uguaglianza profonda in classi derivate. Overriding della funzione hashCode().
-
Lezione del 20-11-2017
Copia superficiale e profonda di oggetti. Overriding della funzione clone(). Copia profonda in classi derivate. Gli oggetti mutabili ed immutabili. Esercitazione.
-
Lezione del 21-11-2017
Le eccezioni. Propagazione delle eccezioni. Le istruzioni try-catch-finally. La clausola throws. Eccezioni checked vs unchecked. Gerarchia delle eccezioni. Definire una propria classe di eccezioni. Come lanciare una eccezione.
-
Lezione del 27-11-2017
Introduzione al Java Collections Framework. Interfacce del Collections Framework. I Generics. Interfaccia Collection. Interfaccia Set. Gli iteratori ed il loro uso. Interfaccia List. Il ListIterator. Implementazioni di Collection.
-
Lezione del 28-11-2017
Esercitazione su diagrammi delle classi UML, diagrammi dei casi d'uso UML e specifica delle operazioni.
-
Lezione del 04-12-2017
Input alla fase di progetto. Output della fase di progetto. Caso di studio. Progetto: algoritmi. Progetto: responsabilità sulle associazioni. Molteplicità e responsabilità. Tabella delle responsabilità. Responsabilità dei ruoli. Esercitazione.
-
Lezione del 05-12-2017
Scelta delle strutture dati. Corrispondenza tra tipi UML e JAVA. Tabella di corrispondenza tipi UML e Java. Realizzazione di tipi UML. Gestione delle precondizioni: verifica lato server e verifica lato client. Gestione delle proprietà di classi UML ed assunzioni di default. Tabella di gestione delle proprietà di classi UML. Esercitazione.
-
Lezione del 11-12-2017
La fase di realizzazione: input ed output. Traduzione in Java del diagramma degli use case. Traduzione in Java del diagramma delle classi. Realizzazione di classi UML con soli attributi: metodologia per i campi dati e per i campi funzione. Il problema dei valori non ammessi: verifica lato server e verifica lato client. Gestire la molteplicià degli attributi. Esercitazione.
-
Lezione del 12-12-2017
Realizzare classi con attributi e operazioni. Realizzazione di associazioni. Associazione con molteplicità 0..1 a responsabilità singola e senza attributi. Associazioni che insistono più volte sulla stessa classe. Associazione con molteplicità 0..* a responsabilità singola e senza attributi. Esercitazione.
-
Lezione del 18-12-2017
La realizzazione di attributi di associazione. La realizzazione naive e non. Associazioni 0..1 con attributi e associazioni 0..* con attributi. Responsabilità doppia (caso con molteplicità 0..1). Esercitazione.
-
Lezione del 19-12-2017
Responsabilità doppia. Come gestire vincoli di cardinalità massima e minima. Le associazioni n-arie. Realizzazione di generalizzazioni. Information hiding e generalizzazione. Generalizzazione e strutturazione in package. Esercitazione.