LABORATORIO DI INFORMATICA E TELEMATICA

LABORATORIO DI INFORMATICA E TELEMATICA

_
iten
Codice
72416
ANNO ACCADEMICO
2017/2018
CFU
6 cfu al 2° anno di 9273 INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE (L-8) GENOVA
LINGUA
Italiano
SEDE
GENOVA (INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE)
periodo
1° Semestre
materiale didattico

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) E RISULTATI DI APPRENDIMENTO

  • 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.

Modalità 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

Ricevimento: Su appuntamento

Commissione d'esame

CARLO REGAZZONI (Presidente)

LUCIO MARCENARO (Presidente)

LEZIONI

Modalità 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.

INIZIO LEZIONI

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

ORARI

L'orario di tutti gli insegnamenti è consultabile su EasyAcademy.

Vedi anche:

LABORATORIO DI INFORMATICA E TELEMATICA

ESAMI

Modalità 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.

Modalità 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.