LABORATORIO DI INFORMATICA E TELEMATICA

LABORATORIO DI INFORMATICA E TELEMATICA

_
iten
Codice
94721
ANNO ACCADEMICO
2018/2019
CFU
6 cfu al 2° anno di 9273 INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE (L-8) GENOVA
SETTORE SCIENTIFICO DISCIPLINARE
ING-INF/03
LINGUA
Italiano
SEDE
GENOVA (INGEGNERIA ELETTRONICA E TECNOLOGIE DELL'INFORMAZIONE)
periodo
2° Semestre
materiale didattico

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.

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: ricevimento su appuntamento Tel: 010 3532060 email: lucio.marcenaro@unige.it  

Commissione d'esame

PAOLO GASTALDO (Presidente)

LUCIO MARCENARO (Presidente)

RODOLFO ZUNINO

CARLO REGAZZONI

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

ESAMI

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

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.