CODICE 94721 ANNO ACCADEMICO 2018/2019 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 PRESENTAZIONE OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI Lo scopo del corso di “laboratorio di Informatica” è quello di insegnare allo studente le metodologie per la progettazione architetturale e l’implementazione di un sistema software complesso. In particolare, dopo alcuni brevi richiami alle tecniche di programmazione orientate agli oggetti, verranno approfonditi gli aspetti legati alla modellazione di un sistema software attraverso le metodologie UML. Saranno quindi illustrate le Metodologie Agili (Agile Programming) e i Design Patterns anche attraverso esempi concreti. Lo studente imparerà a progettare e realizzare sistemi software concorrenti (memoria condivisa, multi-threading e sincronizzazione) e distribuiti (service oriented programming, web services). OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Durante la prima parte del corso lo studente imparerà le basi teoriche dei sistemi per lo sviluppo condiviso di software e ad utilizza correttamente il sistema Git. Lo studente che abbia seguito il corso con profitto sarà in grado di sviluppare in maniera corretta programmi e librerie utilizzando il linguaggio di programmazione C# ed in particolare avrà le conoscenze per: creare ed utilizzare variabili, scrivere e leggere dalla console, scrivere ed utilizzare istruzioni condizionali, cicli e vettori, creare ed utilizzare oggetti e loro metodi. Grazie ad esercizi specifici, lo studente approfondirà l’uso dei costruttori, di variabili e metodi statici, di namespace, di eccezioni e stringhe. Sarà inoltre in grado di creare nuove classi, strutture, enum anche con l’uso di generics. Durante il corso vengono illustrate tecniche per la lettura e scrittura di file, strutture dati lineari, alberi, grafi, insiemi e hash maps. Lo studente imparerà i concetti base della programmazione orientata agli oggetti, le interfacce, l’encapsulazione, il polimorfismo. Si studieranno i dettagli dei delegati e degli eventi, alcuni design pattern (observer, enumerator), i metodi di estensione, i tipi anonimi, le lambda expressions e LINQ. Nell’ultima parte del corso lo studente imparerà ad implementare semplici interfacce utente con windows forms e web services con il windows communication framework. MODALITA' DIDATTICHE Le lezioni alternano spiegazioni teoriche ad esercitazioni pratiche in aula. 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 la piattaforma AulaWeb. Sulla stessa piattaforma è attivato un forum dove gli studenti possono interagire direttamente con il docente ponendo domande di interesse pubblico. Durante il corso, vengono proposti agli studenti un certo numero di esercitazioni pratiche che devono essere consegnate secondo un preciso programma utilizzando il sito GitHub. Al raggiungimento dell’80% di esercizi svolti correttamente e consegnati con le modalità richieste, lo studente ha diritto a punti di bonus sul voto finale dell’esame. PROGRAMMA/CONTENUTO Introduzione al corso 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 del corso 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: ricevimento su appuntamento Tel: 010 3532060 email: lucio.marcenaro@unige.it Commissione d'esame PAOLO GASTALDO (Presidente) LUCIO MARCENARO (Presidente) CARLO REGAZZONI RODOLFO ZUNINO LEZIONI INIZIO LEZIONI L’inizio delle lezioni è previsto come da calendario ufficiale della Scuola Politecnica 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 il corso vengono proposti alcuni esercizi divisi in blocchi le cui tematiche sono allineate con lo svolgimento della parte teorica. Gli studenti che frequentano il corso 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 del corso. 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 08/01/2019 09:00 GENOVA Scritto 09/01/2019 10:30 GENOVA Scritto 22/01/2019 09:00 GENOVA Scritto 05/02/2019 09:00 GENOVA Scritto 18/02/2019 10:30 GENOVA Scritto 19/02/2019 09:00 GENOVA Scritto 11/06/2019 09:00 GENOVA Scritto 18/06/2019 09:00 GENOVA Scritto 18/06/2019 10:30 GENOVA Scritto 25/06/2019 09:00 GENOVA Scritto 09/07/2019 09:00 GENOVA Scritto 16/07/2019 10:30 GENOVA Scritto 25/07/2019 09:00 GENOVA Scritto 04/09/2019 10:30 GENOVA Scritto 10/09/2019 09:00 GENOVA Scritto