CODICE 72416 ANNO ACCADEMICO 2016/2017 CFU 6 cfu anno 2 INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE 9273 (L-8) - 6 cfu anno 3 INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE 9273 (L-8) - LINGUA Italiano SEDE PERIODO 2° Semestre 1° Semestre MATERIALE DIDATTICO AULAWEB PRESENTAZIONE Il corso si propone di insegnare allo studente i concetti della programmazione orientata agli oggetti in particolare approfondendo il linguaggio di programmazione C#. Verranno inoltre introdotte metodologie per la progettazione e l’implementazione di sistemi software complessi. Si faranno alcuni cenni a Metodologie Agili e Design Patterns attraverso esempi concreti. Lo studente imparerà a progettare e realizzare sistemi software concorrenti e distribuiti. 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) Conoscenza approfondita del linguaggio C# Padronanza di strumenti per lo sviluppo condiviso di codice Capacità di sviluppo del codice secondo il paradigma test driven Acquisizione delle basi della progettazione software attraverso diagrammi UML Apprendimento dei concetti base per la programmazione agile 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: Su appuntamento Commissione d'esame LUCIO MARCENARO (Presidente) CARLO REGAZZONI (Presidente) LEZIONI INIZIO LEZIONI L’inizio delle lezioni è previsto come da calendario ufficiale della Scuola Politecnica Orari delle lezioni LABORATORIO DI INFORMATICA E TELEMATICA ESAMI MODALITA' D'ESAME L’esame si svolge nelle date fissate sul calendario esami 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 06/06/2017 09:00 GENOVA Scritto 20/06/2017 09:00 GENOVA Scritto 04/07/2017 09:00 GENOVA Scritto 18/07/2017 09:00 GENOVA Scritto 12/09/2017 09:00 GENOVA Scritto