PROGETTAZIONE DEL SOFTWARE

Obiettivi formativi

L'obiettivo del corso è lo studio e l'approfondimento degli aspetti fondamentali relativi alla progettazione del software quali la qualità del software; il concetto di modulo e la modularizzazione; la distinzione tra analisi, progetto e realizzazione di applicazioni. Gli argomenti sono trattati dando enfasi ad aspetti metodologici e ad aspetti sperimentali utilizzando il linguaggio UML per la fase di analisi, e Java per la fase di realizzazione. L’introduzione ad ogni fase del processo di progettazione e realizzazione del software sarà seguita da esercitazioni guidate atte ad applicare in pratica quanto appreso. Al termine del corso lo studente avrà acquisito: le competenze di base per lo sviluppo di progetti software anche complessi, familiarità con i principi di base della programmazione orientata agli oggetti, conoscenza del linguaggio Java e di avanzati ambienti di sviluppo. Obiettivi specifici: Conoscenza e comprensione: I principali standard della progettazione orientata agli oggetti. Le tecniche per la programmazione su larga scala orientata agli oggetti. Il linguaggio di progettazione del software UML. Il linguaggio di programmazione JAVA. Applicare conoscenza e comprensione: Essere in grado di progettare una applicazione costituita da diverse classi e associazioni, e da diverse attività anche concorrenti che insistono sulle stesse. Capacità critiche e di giudizio: Essere in grado di valutare la qualità di una applicazione distinguendo gli aspetti relativi alla modellazione dei dati da quelli relative alla modellazione dei processi. Capacità comunicative: Le attività progettuali e le esercitazioni del corso permettono allo studente di essere in grado di comunicare/condividere i requisiti di un'applicazione software di media complessità, e le scelte progettuali e le metodologie di progettazione e sviluppo di tale applicazione. Capacità di apprendimento: Oltre alle classiche capacità di apprendimento fornite dallo studio teorico del materiale didattico, le modalità di svolgimento del corso, in particolare le attività progettuali, stimolano lo studente all'approfondimento autonomo di alcuni argomenti presentati nel corso, al lavoro di gruppo, e all'applicazione concreta delle nozioni e delle tecniche apprese durante il corso.

Canale 1
IRENE AMERINI Scheda docente

Programmi - Frequenza - Esami

Programma
- Ciclo di vita e qualità del software: il contesto organizzativo. Il ciclo di sviluppo dei programmi: raccolta dei requisiti, analisi, progettazione & realizzazione, verifica & manutenzione. Le qualità del software: qualità esterne & interne. La modularizzazione. Criteri per la modularizzazione. Object-orientation. - Introduzione a Java: allocazione di variabili e di oggetti, passaggio di parametri, costruttori. Package, derivazione tra classi, ereditarietà, classi astratte, interfacce. Uso di librerie predefinite, collection framework, uso di classi del collection framework, iteratori. IO. Interfaccie grafiche (Java Swing). Socket. Concorrenza in Java. Debugging e JUnit. - La fase di analisi: introduzione alla fase di analisi. Il linguaggio UML per l'analisi. Diagrammi strutturali e diagrammi comportamentali e d'interazione: Diagrammi delle Classi, Diagrammi degli oggetti, Diagrammi Stati e Transizioni, Diagrammi delle Attività. Specifica. La metodologia di analisi. Verifiche di qualità. - La fase di progetto: obiettivi e risultati attesi della fase di progetto. Specifica degli algoritmi. Responsabilità sulle associazioni. Uso di strutture di dati. Schemi realizzativi per oggetti e valori. Gestione degli eventi. Aspetti legati alla concorrenza. Pattern realizzativi. API delle classi Java progettate. - La fase di realizzazione: realizzazione in Java dei diagrammi strutturali, comportamentali e d'interazione. La realizzazione di classi. La realizzazione di associazioni. Uso dell'ereditarietà. Programmazione ad eventi e concorrente per realizzare comportamenti dinamici. SYLLABUS - Introduzione al corso - Introduzione alla progettazione - Ciclo di vita del software - Le qualità - La modularizzazione - Introduzione a Java (Lezione 1) - Introduzione a Java - Definizione di classi Java - Uso di classi Java - Riferimenti e oggetti - Public e Private - Overloading di funzioni - Costruttori - Metodi statici - Moduli Funzionali (Lezione 2) - Esercitazione 1 - Package, Livelli di accessi, Derivazione tra Classi, Overriding e Late Binding (Lezione 3) - Array in Java - Primi esempi di realizzazione classi (Lezione 4) - Esercitazione 2 - Classi Astratte, Interfacce, La classe predefinita Object, Redefinizione di equals() e hashcode(), Uguaglianza profonda, Redefinizione di clone(), Copia profonda Materiale Unità 8 e 9 intro Java" (Lezione 5) - I/O da terminale in Java - I/O da file in Java - Eccezioni - cenni al logging (Lezione 6) - Esercitazione 3 - Astrazione di valore, Astrazione di valore collezione, Astrazione di entità, Schemi Realizzativi in Java (Lezione 7) - GUI in Java (Lezione 8) - Esercitazione 4 - Introduzione a UML, Il diagramma delle classi in UML, La nozione di classe, La nozione di attributo, La nozione di associazione - Proprietà di associazioni, Ruoli (Lezione 9) - Il Java Collection Framework ( Lezione 10) - Esercitazione 5 - Vincoli di molteplicità, Associazioni n-arie, Associazioni ordinate, La generalizzazione (Lezione 11) - Ereditarietà, Operazioni nella classi UML, Progetto in Java di diagrammi delle classi UML (Lezione 12) - Esercitazione 6 - Realizzazione in Java di diagrammi delle classi UML - Responsabilità singla e doppia - Realizzazione di classi con attributi (astrazione di entità) - Realizzazione di attributi multivalore - Realizzazione di associazioni con responsabilità singlola - Realizzazione di associazioni con responsabilità singlola con attributi - TipoLInk (astrazione di valore) (Lezione 13) - Realizzazione in Java di diagrammi delle classi UML - Realizzazione di associazioni con responsabilità doppia - Manager + TipoLink - Realizzazione di associazioni ordinate - Realizzazioni di generalizzazioni - ISA e generalizazioni disgiunte e complete (abstract Class) (Lezione 14) - Esercitazione 7 - Diagrammi delle attività, Attività atomiche, Attività complesseSpecifica di operazioni e attività, Specifica di operazioni nelle classi , Specifica di attività atomiche: Pre e post condizioni, Specifica di attività complesse: variabili di processo & pseudo codice (Lezione 15) - Concorrenza in Java - L'interfaccia Runnable (l'eseguibile) e la classe Thread (l'esecutore) - start - sleep, interruptedException - join (Lezione 16) Esercitazione 8 - Realizzazione di attività atomiche, Realizzazione di attività complesse, Diagramma degli degli stati e delle transizioni, Specifica degli stati e delle transizioni (Lezione 17) - Concorrenza in Java - Accesso ad oggetti/risorse condivise - Synchonized - Deadlock - Realizzazione di coppie di processi produttore-cosumatore - wait and notifyAll/notify (Lezione 18) - Esercitazione 9 - Progetto di diagrammi stati e transizioni, Realizzazione di diagrammi stati e transizioni, Pattern Observer-Observed- Realizzazione sequenziale- Realizzazione concorrente" (Lezione 19) Esercizio di esame (Lezione 20) Esercitazione 10
Prerequisiti
Si richiede conoscenza dei fondamenti della programmazione
Testi di riferimento
Cay Horstmann, 2018: Java per impazienti. Pearson
Modalità insegnamento
Il corso è erogato in lezioni d’aula settimanali con alcune esercitazioni di laboratorio.
Frequenza
Attendance is not mandatory but highly recommended.
Modalità di esame
L'esame prevede una prova scritta relativa alla parte di progettazione del software e di una prova di idoneità di programmazione Java. La prova ha come scopo la valutazione delle conoscenze acquisite e la capacità dello studente di applicare tali conoscenze su problemi specifici.
Modalità di erogazione
Il corso è erogato in lezioni d’aula settimanali con alcune esercitazioni di laboratorio.
  • Codice insegnamento1018706
  • Anno accademico2024/2025
  • CorsoIngegneria dell'Informazione (sede di Latina)
  • CurriculumElettronica
  • Anno2º anno
  • Semestre1º semestre
  • SSDING-INF/05
  • CFU9
  • Ambito disciplinareIngegneria informatica