Salta al contenuto principale
CODICE 72416
ANNO ACCADEMICO 2016/2017
CFU
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

Commissione d'esame

LUCIO MARCENARO (Presidente)

CARLO REGAZZONI (Presidente)

LEZIONI

INIZIO LEZIONI

L’inizio delle lezioni è previsto come da calendario ufficiale della Scuola Politecnica

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