Progettazione del Software   -   A.A. 2018/2019
Diario delle lezioni
Dettaglio degli argomenti svolti durante le lezioni.
-
Lezione del 28-09-2018
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.
- Slide del corso (pdf e pdf).
-
Lezione del 29-09-2018
Principi di base dell'orientazione agli oggetti. Classi, oggetti ed ereditarietà. Introduzione
all'analisi. Introduzione ad UML. Oggetti. Classi. Attributi. Associazioni. Link. Ruoli.
- Slide del corso (pdf e pdf).
-
Lezione del 04-10-2018
Attributi di associazione. Esercitazione. La molteplicità delle associazioni ed attributi.
- Slide del corso (pdf).
-
Lezione del 05-10-2018
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.
- Slide del corso (pdf).
-
Lezione del 16-10-2018
Ripasso su Generalizzazioni e Specializzazione di attributi e associazioni. Le Operazioni. Esercitazione.
- Slide del corso (pdf).
-
Lezione del 17-10-2018
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.
- Slide del corso (pdf).
-
Lezione del 23-10-2018
Ripasso diagramma delle classi. Esercitazione con testi di esame.
- Slide del corso (pdf) - testo esame (pdf).
-
Lezione del 24-10-2018
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.
- Slide del corso (pdf).
-
Lezione del 08-11-2018
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.
- Slide del corso (pdf).
-
Lezione del 09-11-2018
Qualificatori dei campi dato. Overloading di funzioni. I construttori. Esercitazione. I package ed il loro uso. Livelli di accesso di una classe. Derivazione fra classi. Principi fondamentali della derivazione. Gerarchie di classi in Java.
- Slide del corso (pdf, pdf).
-
Lezione del 15-11-2018
Casting. Livelli di accesso dei campi di una classe. Regole di visibilità tra campi. Costruttori di classi derivate. Overloading e Overriding. Late binding. Classi e metodi final.
- Slide del corso (pdf).
-
Lezione del 16-11-2018
Qualificatori dei campi dato. Overloading di funzioni. I construttori. Esercitazione. I package ed il loro uso. Livelli di accesso di una classe. Derivazione fra classi. Principi fondamentali della derivazione. Gerarchie di classi in Java. Sovrascrittura dei campi dati. Le classi astratte. Le interfacce. Esercitazione.
- Slide del corso (pdf).
-
Lezione del 22-11-2018
La classe Object. Overriding della funzione toString(). La classe Java Class. La funzione isInstance(). L'operatore instanceof. La funzione
getclass(). Uguaglianza superficiale e profonda tra oggetti. Overriding della funzione equals(). Uguaglianza profonda in
classi derivate. Overriding della funzione hashCode(). Copia superficiale e profonda di oggetti. Overriding della funzione clone(). Copia profonda in
classi derivate. Gli oggetti mutabili ed immutabili. Esercitazione.
- Slide del corso (pdf).
-
Lezione del 23-11-2018
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. 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.
- Slide del corso (pdf, pdf).
-
Lezione del 29-11-2019
Esercitazione su diagrammi delle classi UML, diagrammi dei casi d'uso UML e specifica delle operazioni.
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.
- Slide del corso (pdf).
-
Lezione del 30-11-2019
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.
- Slide del corso (pdf).
-
Lezione del 06-12-2019
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.
- Slide del corso (pdf).
-
Lezione del 07-12-2019
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.
- Slide del corso (pdf).
-
Lezione del 13-12-2019
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.
- Slide del corso (pdf).
-
Lezione del 14-12-2019
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.
- Slide del corso (pdf).