CODICE 94721 ANNO ACCADEMICO 2021/2022 CFU 6 cfu anno 2 INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE 9273 (L-8) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE ING-INF/03 LINGUA Italiano SEDE GENOVA PERIODO 2° Semestre MODULI Questo insegnamento è un modulo di: LABORATORIO DI INFORMATICA E TELEMATICA & ARCHITETTURE DEI SISTEMI ELETTRONICI MATERIALE DIDATTICO AULAWEB OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI Lo studente che abbia seguito con profitto l’insegnamento di “Laboratorio di Informatica e Telematica” sarà in grado di progettare, creare e verificare il funzionamento di un sistema software complesso, utilizzando metodologie UML e tecniche di programmazione orientate agli oggetti. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Durante questo insegnamento lo studente imparerà a: Utilizzare sistemi per il controllo versioni con particolare attenzione a git Sviluppare programmi e librerie utilizzando il linguaggio di programmazione C#. In particolare l’allievo sarà in grado di: creare ed utilizzare variabili scrivere e leggere dalla console scrivere ed utilizzare istruzioni condizionali, cicli e vettori creare ed utilizzare oggetti e loro metodi utilizzare costruttori, variabili e metodi statici, namespace, eccezioni e stringhe creare nuove classi, strutture, enum anche con l’uso di generics leggere e scrivere file modellare strutture dati lineari, alberi, grafi, insiemi e hash maps Verificare il corretto funzionamento del software sviluppato utilizzando gli unit test Scrivere programmi C# utilizzando un approccio orientato agli oggetti. In particolare l’allievo sarà in grado di: utilizzare le interfacce, l’encapsulazione, il polimorfismo, i delegati e gli eventi applicare alcuni design pattern (in particolare observer, enumerator) creare metodi di estensione, tipi anonimi utilizzare le lambda expressions e LINQ Implementare semplici interfacce grafiche con windows forms Implementare web services con il windows communication framework Progettare sistemi software complessi con la metodologia UML MODALITA' DIDATTICHE Le lezioni alternano spiegazioni teoriche ad esercitazioni pratiche. Le spiegazioni teoriche vengono frequentemente esemplificate con l’analisi, l’esecuzione e il debug di frammenti di codice direttamente sul pc del docente. Tutto il materiale visto a lezione (slide ed esempi pratici) viene condiviso attraverso le piattaforme AulaWeb e Teams. Gli studenti possono interagire direttamente con il docente durante le lezioni oppure attraverso la piattaforma Teams. Durante le lezioni, vengono proposte agli studenti un certo numero di esercitazioni pratiche che devono essere consegnate secondo un preciso programma temporale utilizzando il sito GitHub. Al raggiungimento del 60%-80% di esercizi svolti correttamente e consegnati con le modalità richieste, lo studente ha diritto da 1 a 5 punti di bonus sul voto finale dell’esame. PROGRAMMA/CONTENUTO Introduzione Controllo versioni Git come strumento per il controllo delle versioni Git: uso di repository remoti, branching e merging Workflow locali e distribuiti, branch remoti, rebasing e stashing Introduzione all’Object Oriented Programming e al C# - .NET framework Tipi primitivi e variabili in C# Console I/O, istruzioni condizionali Cicli e array in C# Unit testing Metodi, creazione e uso di oggetti in C# Costruttori, variabili e metodi statici, namespace Eccezioni e stringhe in C# Definizione classi in C#: variabili membro, metodi, costruttori, proprietà, strutture, enum, classi generiche Lettura e scrittura file, strutture dati lineari Alberi, grafi, insiemi e hash maps Concetti base Object Oriented Programming con applicazioni al C# Interfacce Encapsulazione, polimorfismo, coesione ed accoppiamento Distruttori, overloading di operatori, enumeratori Delegati, eventi e observer design pattern; metodi di estensione, tipi anonimi Lambda expressions, LINQ, Sviluppo GUI con Windows Forms Web service e WCF TESTI/BIBLIOGRAFIA Slide Robert C. Martin and Micah Martin. 2006. Agile Principles, Patterns, and Practices in C# (Robert C. Martin). Prentice Hall PTR, Upper Saddle River, NJ, USA. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA. Joseph Albahari and Ben Albahari. C# 5.0 in a Nutshell: The Definitive Reference. O'Reilly Media; Fifth Edition edition (June 26, 2012) Jennifer Greene and Andrew Stellman. Head First C#. O'Reilly Media; 3 edition (September 16, 2013) DOCENTI E COMMISSIONI LUCIO MARCENARO Ricevimento: on request Commissione d'esame LUCIO MARCENARO (Presidente) CARLO REGAZZONI RODOLFO ZUNINO PAOLO GASTALDO (Presidente Supplente) LEZIONI INIZIO LEZIONI https://corsi.unige.it/9273/p/studenti-orario Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L’esame si svolge nelle date fissate sul calendario esami, tipicamente dalle ore 9 alle ore 13. Gli studenti che affrontano l’esame dovranno svolgere un test con 62 domande a risposta multipla (tempo limite 1h30m) e impostare un progetto software complesso con un approccio test driven. Questa seconda parte dell’esame può essere fatta a coppie. MODALITA' DI ACCERTAMENTO Durante le lezioni vengono proposti alcuni esercizi divisi in blocchi le cui tematiche sono allineate con lo svolgimento della parte teorica. Gli studenti che frequentano questo insegnamento possono svolgere gli esercizi e caricare il codice sorgente corrispondente in uno specifico repository su GitHub seguendo una tabella di scadenze che viene condivisa durante la prima lezione. Il docente corregge puntualmente gli esercizi svolti suggerendo possibili correzioni e miglioramenti del codice. Gli studenti che alla fine dell’anno abbiano svolto in maniera corretta almeno l’80% degli esercizi proposti hanno diritto ad un bonus sul voto finale dell’esame. Calendario appelli Data appello Orario Luogo Tipologia Note 11/01/2022 09:00 GENOVA Scritto + Orale 11/01/2022 10:30 GENOVA Scritto 25/01/2022 09:00 GENOVA Scritto + Orale 08/02/2022 10:30 GENOVA Scritto 09/02/2022 09:00 GENOVA Scritto + Orale 10/06/2022 09:00 GENOVA Scritto + Orale 14/06/2022 10:30 GENOVA Scritto 17/06/2022 09:00 GENOVA Scritto + Orale 28/06/2022 09:00 GENOVA Scritto + Orale 08/07/2022 09:00 GENOVA Scritto + Orale 13/07/2022 10:30 GENOVA Scritto 03/08/2022 09:00 GENOVA Scritto + Orale 06/09/2022 10:30 GENOVA Scritto 07/09/2022 09:00 GENOVA Scritto + Orale