Formazione: Industrial Strength C# - Corso Aziendale


Apprendere un nuovo linguaggio significa avvicinarsi anche ad un nuovo modo di approcciare e risolvere i problemi. Si tratta quindi di una occasione unica, spesso sottoutilizzata: ci si limita infatti ad apprendere gli elementi di massima del nuovo linguaggio, a riprodurre con questo gli stessi schemi di pensiero già adottati in precedenza, a replicare le vecchie abitudini nella nuova casa.
Allo stesso tempo, linguaggi come il C#, proposti con un ambiente di sviluppo visuale che invoglia la programmazione esplorativa, tendono spesso ad essere visti attraverso la lente dello sviluppo rapido di prototipi, anzichè nell'ottica di produzione di software di qualità industriale. Questo approccio porta ad ignorare le grandi potenzialità del linguaggio, a favore degli aspetti più scenografici come la rapidità di realizzazione di applicazioni giocattolo.
Questo corso, sin dal titolo, si propone un obiettivo ed un approccio completamente diverso. Il linguaggio è esaminato al di fuori dell'ambiente di sviluppo grafico. Si inizia dagli elementi di base, e si arriva in modo graduale ad aspetti più avanzati. Le diverse potenzialità non vengono esplorate sulla base di benefici più o meno irrealistici e di breve termine, ma esaminandone le ricadute in termini di riusabilità, manutenibilità, comprensibilità, estendibilità, efficienza.
Allo stesso tempo, l'occasione del passaggio ad un nuovo linguaggio è colta nel suo potenziale più ampio, ovvero come possibilità di introdurre un approccio allo sviluppo maturo, allineato con le migliori pratiche di ingegneria del software, cercando di integrare il nuovo linguaggio con nuove e migliori abitudini di programmazione.
Si dedica quindi il giusto spazio alla comprensione del modello delle eccezioni in C#, indispensabile per scrivere codice robusto, ed alla creazione di applicazioni modulari, espandibili tramite plug-in separati. Viene esaminato il modello di threading e sincronizzazione in C#, in quanto distinto dalle primitive del sistema operativo. Viene proposto uno standard di naming per classi, variabili, parametri, ecc, allineato al modello adottato da Microsoft nello sviluppo del Framework .NET. Si esamina un tool disponibile gratuitamente che semplifica la scrittura dei test di unità per i singoli moduli sviluppati.
Nella sua versione più estesa, il corso riprende poi aspetti avanzati del linguaggio, con approfondimenti su overloading degli operatori, importazione di API dal sistema operativo o DLL C, la definizione di attributi in ottica di Aspect Oriented Programming, i commenti XML per la generazione automatica di documentazione, le diverse direttive del compilatore ed il loro effetto sul codice generato.

Dettagli sul corso

Durata: Da 3 a 6 giorni

Partecipanti: massimo 15

Prerequisiti: Conoscenza dell'architettura e dei principi essenziali di Microsoft .NET, ottenuta ad esempio con la partecipazione al corso Fondamenti sulla Piattaforma .NET. E' auspicabile una buona familiarità con i concetti di base della programmazione ad oggetti, ottenuta con la pratica di programmazione in un linguaggio come C++, Java, Delphi, Visual Basic 6 utilizzato come linguaggio OO, ecc. La conoscenza della sintassi di un linguaggio C-like (C, C++, Java) rende il corso più rapido e scorrevole, ma non rappresenta un prerequisito essenziale.

Programma del corso:

Elementi di C#
Principi guida alla base del C#.
Definire una classe in C#
Namespace
Espressioni e Comandi

  if, while, switch, for, foreach, cast, overflow checking, passaggio per riferimento e per valore, compilazione condizionale.
Tipi e Classi, parte 1
  enumerati, strutture, array.
Tipi e Classi, parte 1
  classi, ereditarieta', polimorfismo, costruttori di istanza e statici, distruttori, classi astratte, interfacce, implementazione di interfacce, "versioning" delle classi.
Tipi e Classi, parte 3
  delegati ed eventi; esercizio di design object oriented risolto con delegati; rappresentazione in modelli UML dei delegati.
Attributi (elementi essenziali)
  alcuni attributi predefiniti del framework; demarcazione di codice obsoleto.
Serializzazione
  serializzazione binaria; serializzazione soap; serializzazione XML. Implementazione manuale di ISerializable.

Errori ed Eccezioni
Modelli di gestione degli errori
Eccezione: concetti fondamentali
  Stack Unwinding
Catch, Throw, Finally, using
Progettare codice exception safe
Relazione tra eccezioni, risorse, garbage collection

Thread e Sincronizzazione
Creazione di Thread
Attributo [Synchronized]
Monitor
Esempio: un buffer circolare con accesso sincronizzato ed attesa dati

AppDomain e Plug-In (applicazioni modulari)
Concetto di Plug-In
AppDomain
Caricamento dinamico di moduli in AppDomain
Esempio di Implementazione

Standard di Codifica
File e Layout
Commenti
Identificatori e Naming
Tipi, variabili e costanti
Classi e Funzioni
Oggetti e Copie

Unit Test e Tool relativi
Test di Unita' ed OOP
NUnit
Un esempio elementare
Un esempio piu' completo, sviluppato in modo interattivo

Approfondimenti su C#
Overloading degli operatori (approfondimento)
Importazione di API
Attributi ed Aspect Oriented Programming
  Un ulteriore caso di studio dal framework .NET: il Property Inspector. Definire i propri custom attributes. Esplorare gli attributi degli oggetti tramite Reflection.
Commenti XML nel codice
Direttive del compilatore

Bibliografia


Note:
Come sempre, l'approccio del corso rimane fortemente hands-on, impostato su esempi concreti e problematiche reali di programmazione.



Se siete interessati a questo seminario aziendale, potete compilare la seguente richiesta di contatto per fissare un possibile incontro.


  torna alla pagina dei corsi